shd*_*shd 3 optimization assembly arm
在 xcode 生成的以下代码中,您在前 2 行中看到值加载到q0和q1寄存器,但从v0和v1寄存器使用,为什么不使用 isq0和q1而不是v0和v1。
和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)
名称v0和q0引用相同的寄存器。区别在于寄存器内容的解释方式:名称q0表明寄存器被解释为单个 128 位量,而名称v0表明寄存器被解释为某物的向量。向量元素的类型由指令助记符的后缀指示。在您的情况下,.4s表示 4 个 32 个字(32 位量)的向量,而.16b表示 16 个八位字节(8 位量)的向量。您已链接到的文档中解释了此表示法的具体细节。