Armv8a霓虹灯内联asm代码:如何将16x8位向量转换为四个4x32位(整数)向量?

Armv8a霓虹灯内联asm代码:如何将16x8位向量转换为四个4x32位(整数)向量?,arm,neon,armv8,Arm,Neon,Armv8,我需要加载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.

我需要加载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,而不需要内部函数


感谢您的帮助。

对于未签名的元素,
ushl
ushl2
,班次号为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
直接等价的内容

--编辑


另一方面,有与
VMOVN
完全相同的
XTN/XTN2
指令。

对于无符号元素,
USHLL
ushl2
,班次号为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
完全相同。

谢谢!但是,在aarch64中找不到USHRN和USHRN2。它给出了错误
error:unknown助记符
ushrn'-
ushrn v19.8b、v17.8h、#0'
。因此,我尝试了另一个
UQSHRN
,但不允许使用移位号0,这导致了错误“UQSHRN v19.8b,v17.8h,#0”…您能帮个忙吗?@KathyLee My bad,有符号和无符号值都应该是
SHRN/SHRN2
。(符号性并不重要,因为最大移位值不能超过元素大小的一半)。那该死的
aarch64
助记符(借口,借口)@Kathyle现在我看到
SHRN/SHRN
也不允许
\0
作为筛选值,我不记得我现在是怎么处理的。。。。。请稍等,我来看看我以前的项目<代码>aarch64
记忆法真的很糟糕。慢慢来。谢谢你的帮助。:)@Kathyle这些是关于“提取狭窄”GRRRR的
XTN/XTN2
说明…。。我讨厌aarch64的记忆法。我会相应地修改答案,谢谢!但是,在aarch64中找不到USHRN和USHRN2。它给出了错误
error:unknown助记符
ushrn'-
ushrn v19.8b、v17.8h、#0'
。因此,我尝试了另一个
UQSHRN
,但不允许使用移位号0,这导致了错误“UQSHRN v19.8b,v17.8h,#0”…您能帮个忙吗?@KathyLee My bad,有符号和无符号值都应该是
SHRN/SHRN2
。(符号性并不重要,因为最大移位值不能超过元素大小的一半)。那该死的
aarch64
助记符(借口,借口)@Kathyle现在我看到
SHRN/SHRN
也不允许
\0
作为筛选值,我不记得我现在是怎么处理的。。。。。请稍等,我来看看我以前的项目<代码>aarch64
记忆法真的很糟糕。慢慢来。谢谢你的帮助。:)@Kathyle这些是关于“提取狭窄”GRRRR的
XTN/XTN2
说明…。。我讨厌aarch64的记忆法。我将相应地编辑答案。