如何在armv8中获得Vn.8h的半64位,就像在armv7和xFF1F中获得D寄存器一样;

如何在armv8中获得Vn.8h的半64位,就像在armv7和xFF1F中获得D寄存器一样;,arm,simd,neon,Arm,Simd,Neon,我像这样加载数据: ld1{v8.8h,v9.8h,v10.8h,v11.8h},[%8],#64 但当我使用数据进行计算时,出现了错误: smlal v16.4s, v8.2d[0], v0.h[0] 错误是: /tmp/cc2h1F9Y.s:523:错误:操作数2必须是SIMD向量寄存器--`smlal v16.4s,v8.2d[0],v0.h[0]' 所以我想知道如何获得armv8中Vn.8h的半个64位,就像armv7中的D寄存器一样?这是用一个向量乘以一个标量 您可以使用smla

我像这样加载数据:

ld1{v8.8h,v9.8h,v10.8h,v11.8h},[%8],#64

但当我使用数据进行计算时,出现了错误:

smlal   v16.4s, v8.2d[0], v0.h[0]
错误是:

/tmp/cc2h1F9Y.s:523:错误:操作数2必须是SIMD向量寄存器--`smlal v16.4s,v8.2d[0],v0.h[0]'


所以我想知道如何获得armv8中Vn.8h的半个64位,就像armv7中的D寄存器一样?

这是用一个向量乘以一个标量

您可以使用smlal2指令来解决此问题

smlal v16.4s、v8.4h、v0.h[0]

这将乘以低64位

smlal2 v16.4s、v8.8h、v0.h[0]

这将乘以高64位

对于那些对此感到困惑的人