ARM LLVM 汇编 q 和 v 寄存器

shd*_*shd 3 optimization assembly arm

在 xcode 生成的以下代码中,您在前 2 行中看到值加载到q0q1寄存器,但从v0v1寄存器使用,为什么不使用 isq0q1而不是v0v1

v0是andv1的别名(来源:http ://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/ ch04s06s02.html )?q0q1

0x100005db0 <+548>:  ldr    q0, [x9, x12]
0x100005db4 <+552>:  ldr    q1, [x10, x12]
0x100005db8 <+556>:  cmeq.4s v2, v0, v4
0x100005dbc <+560>:  bsl.16b v2, v1, v0
Run Code Online (Sandbox Code Playgroud)

fuz*_*fuz 5

名称v0q0引用相同的寄存器。区别在于寄存器内容的解释方式:名称q0表明寄存器被解释为单个 128 位量,而名称v0表明寄存器被解释为某物的向量。向量元素的类型由指令助记符的后缀指示。在您的情况下,.4s表示 4 个 32 个字(32 位量)的向量,而.16b表示 16 个八位字节(8 位量)的向量。您已链接到的文档中解释了此表示法的具体细节。