arm64中Q0,Q1这些代表什么?寄存器吗?具体怎么理解?


#1

请教一下:
arm64中Q0,Q1这些代表什么?寄存器吗?具体怎么理解?
V0,V1这些又怎么理解?

_text:0000000100326034 LDUR Q0, [X19,#0xF4]
__text:0000000100326038 LDR Q1, [SP,#0x40+var_40]
__text:000000010032603C EOR V0.16B, V1.16B, V0.16B
__text:0000000100326040 STR Q0, [SP,#0x40+var_40]
__text:0000000100326044 LDR Q0, [X21]
__text:0000000100326048 STR Q0, [X23]


#2

Neon的寄存器吧。用来做simd的


#3

LDUR Q0, [X19,#0xF4]
【X19为基地址,加上0XF4】偏移取值存入Q0
LDR Q1, [SP,#0x40+var_40]
类似。【SP+(0x40+var_40)x4】
EOR V0.16B, V1.16B, V0.16B
V0代表simd里[0]号元素,即第一个。16b代表取16bit。 eor是异或。

应该是这样


#4

第一次和大神交流,先膜拜一下


#5

根据张总的提示,找了下Neon指令的知识,还有SIMD,遇到相同问题的同学可以参考:
https://blog.csdn.net/chshplp_liaoping/article/details/12752749


#6

Q寄存器和X寄存器对比解读
LDUR Q0, [X19,#0xF4]//地址[X19,#0xF4],取16BYTE存入Q0
LDUR X0, [X19,#0xF4]//地址[X19,#0xF4],取8BYTE存入X0(双字)
LDR Q1, [SP,#0x40+var_40]//memory地址[SP,#0x40+var_40],取16BYTE存入Q1
LDR X0, [SP,#0x40+var_40]//memory地址[SP,#0x40+var_40],取8BYTE存入X1(双字)

EOR V0.16B, V1.16B, V0.16B
我的理解:V0.16B就是Q0,V1.16B就是Q1,他们是SIMD时要操作时的两个操作数。


#7

这里我漏打了。ldur和ldr的区别是ldur不用0x4对齐但ldr需要。所以我理解应该是
【SP+(0x40+var_40) x4


#8

arm还是需要多学习


#9

https://community.arm.com/processors/f/discussions/3163/how-to-understand-unscaled-syntax-in-armv8-arm-manual