Armv8a NEON 内联汇编代码:如何将 16x8 位向量转换为四个 4x32 位(整数)向量?
Armv8a NEON inline asm code: How to convert 16x8bit vector to four 4x32bit (integer) vectors?
我需要加载 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:在我的例子中,我只需要内联汇编而不是内在函数...
感谢您的帮助。
对于无符号元素,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
对于带符号的元素 - 猜猜 - 使用 SSHLL
和 SSHLL2
代替。
同样,在 aarch64
上也没有直接等同于 MOVN
。
--编辑
另一方面,有 XTN/XTN2
条指令与 VMOVN
完全相同。
我需要加载 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:在我的例子中,我只需要内联汇编而不是内在函数...
感谢您的帮助。
对于无符号元素,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
对于带符号的元素 - 猜猜 - 使用 SSHLL
和 SSHLL2
代替。
同样,在 aarch64
上也没有直接等同于 MOVN
。
--编辑
另一方面,有 XTN/XTN2
条指令与 VMOVN
完全相同。