You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARMv7/ARMv8是否存在x86 PEXT等效指令及高效实现方案问询

ARMv7/ARMv8平台x86 PEXT指令等效实现方案

原生指令支持情况

  • ARMv7:无等效原生指令,全系列都没有支持并行位提取功能的硬件指令。
  • ARMv8:基础AArch64指令集无原生等效指令,仅Armv8.1-A及更高版本搭载SVE2向量扩展的硬件,提供了BEXT指令,功能与x86 PEXT完全一致。但目前绝大多数消费级ARMv8设备(手机、普通嵌入式开发板等)都不支持SVE2扩展,通用场景下无法直接使用该指令。

无原生指令时的最高效实现方案

通用动态掩码场景下,主流编译器(GCC、Clang)默认采用位遍历运算序列实现PEXT功能,是目前经过性能验证的最高效通用实现,逻辑如下:

输入参数:源数据src、提取掩码mask
输出结果:res的第n位对应src中mask第n个为1的位置的位值

mov     res, #0
tst     mask, mask
beq     end // 掩码为空直接返回0
extract_loop:
lsr     src, src, #1
subs    mask_carry, mask, #1
and     temp, src, #1
orr     res, res, temp
lsl     res, res, #1
and     mask, mask, mask_carry
bne     extract_loop
end:
lsr     res, res, #1 // 修正最后一次循环多余的左移

如果是固定掩码的专用场景,可以进一步优化:直接硬编码掩码中所有为1的位的偏移量,不需要循环逻辑,仅需最多k条位提取+位或指令(k为掩码中1的数量),性能比动态掩码实现高3~10倍。

内容的提问来源于stack exchange,提问作者Raoul722

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:15:07