我需要加载 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 neon 代码完成此操作?或者如何将上面的代码转换为 armv8a?PS:就我而言,我只需要内联 asm 而不是内联函数......
感谢您的帮助。
对于无符号元素,移位编号为 0 的 USHLL
、 USHLL2
将完成这项工作。
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
对于有符号元素 - 猜测猜测 - 改用SSHLL
和SSHLL2
。
同样,也没有直接等同于aarch64
上的MOVN
。
--编辑
另一方面,有XTN/XTN2
说明与VMOVN
完全相同。