0

我需要加载 8 位数组,然后使用 armv8a neon 内联 asm 代码将每个元素转换为 32 位整数。我已经用 armv7 做到了,但不知道如何在 v8a 中做到这一点......

我在 v7 中使用的代码是

"pld        [%1, #128]                 \n"
"vld1.u8    {d0,d1}, [%1]!       \n" 
"vmovl.u8   q8, d0               \n"  
"vmovl.u8   q9, d1               \n" 
"vmovl.u16  q0, d16              \n" 
"vmovl.u16  q1, d17              \n" 
"vmovl.u16  q2, d18              \n" 
"vmovl.u16  q3, d19              \n" 

如何使用 armv8a 霓虹灯代码完成此操作?或者如何将上面的代码转换为 armv8a?PS:就我而言,我只需要内联 asm 而不是内在函数......

谢谢您的帮助。

4

1 回答 1

2

对于无符号元素,USHLL移位USHLL2号为 0 的 , 将完成这项工作。

ld1     {v0.16b}, [%1], #16

USHLL   v16.8h, v0.8b, #0
USHLL2  v17.8h, v0.16b, #0

USHLL   v0.4s, v16.4h, #0
USHLL2  v1.4s, v16.8h, #0
USHLL   v2.4s, v17.4h, #0
USHLL2  v3.4s, v17.8h, #0

对于有符号元素 - 猜猜 - 使用SSHLLandSSHLL2代替。

同样,也没有直接等价于MOVNonaarch64的情况。

- 编辑

另一方面,也有XTN/XTN2穿着一模一样的说明。VMOVN

于 2019-07-25T06:02:13.347 回答