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

ARM64 SIMD指令优化:将交替字节打包为连续字节(Hex转uint64_t)

优化NEON寄存器字节合并方案

针对你的需求,我们可以利用NEON的向量提取和位操作指令,完全消除单字节mov指令,大幅减少指令数量:

ARMv8-A 最优方案(支持直接索引提取)

; 输入v6.16b = 0a,0b,0c,0d,0e,0f,07,08,0a,0b,0c,0d,0e,0f,07,08
vmov v7.8b, v6.16b[0,2,4,6,8,10,12,14]  ; 提取所有偶数位置字节:0a,0c,0e,07,0a,0c,0e,07
vshl.u8 v7, v7, #4                      ; 左移4位,将低4位移到高4位:a0,c0,e0,70,a0,c0,e0,70
vmov v8.8b, v6.16b[1,3,5,7,9,11,13,15]  ; 提取所有奇数位置字节:0b,0d,0f,08,0b,0d,0f,08
orr v10.8b, v7.8b, v8.8b                ; 合并高低4位,得到目标结果:ab,cd,ef,78,ab,cd,ef,78

ARMv7 兼容方案(无直接索引提取时使用)

; 输入v6.16b = 0a,0b,0c,0d,0e,0f,07,08,0a,0b,0c,0d,0e,0f,07,08
mov v0.8b, v6.8b          ; 复制前8字节到v0:0a,0b,0c,0d,0e,0f,07,08
mov v1.8b, v6.8b[8]       ; 复制后8字节到v1:0a,0b,0c,0d,0e,0f,07,08
vuzp.8 v0, v1             ; 分离偶数/奇数位置字节:
                           ; v0 = 0a,0c,0e,07,0a,0c,0e,07(原偶数位)
                           ; v1 = 0b,0d,0f,08,0b,0d,0f,08(原奇数位)
vshl.u8 v0, v0, #4        ; 左移4位:a0,c0,e0,70,a0,c0,e0,70
orr v10.8b, v0, v1        ; 合并得到目标结果:ab,cd,ef,78,ab,cd,ef,78

方案优势

  1. 彻底消除了原代码中7条单字节mov指令,改用向量级操作,执行效率更高
  2. 指令数量从12条减少到4条,逻辑更简洁直观
  3. 直接通过提取、移位、合并三步完成转换,无冗余操作

如果需要生成16字节的重复结果(即目标为ab,cd,ef,78,ab,cd,ef,78,ab,cd,ef,78,ab,cd,ef,78),只需在最后添加一条:

vdup.16b v10, v10.8b

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:27:02