对不起,我没有一个好的标题...混淆关于XMM寄存器的位图
我读这个线程:Vector Matrix Multiplication In SSE
楼主有以下代码
// xmm0 = (v0,v1,v2,v3)
movups xmm0, [eax]
// xmm0 = (v0,v0,v0,v0)
// xmm1 = (v1,v1,v1,v1)
// xmm2 = (v2,v2,v2,v2)
// xmm3 = (v3,v3,v3,v3)
shufps xmm3, xmm0, 255
shufps xmm2, xmm0, 170
shufps xmm1, xmm0, 85
shufps xmm0, xmm0, 0
有人说如下:
但是根据手册确实发生了什么:(a,b,c,d)意思是一个位s 0至31,b是位32到63等
// xmm0 = (v0,v1,v2,v3)
movups xmm0, [eax]
// xmm0 = (v0, v0, v0, v0)
shufps xmm0, xmm0, 0
这是有意义的,因为我在线性阵列模型[elt0,ELT1,ELT2,....] elt0是阵列[0 ]。
令我困惑的是,根据手册xmm寄存器的位图是[127 ... 0](见下图)。
我就像看着位图的原始海报,认为[elt0,elt2,elt3,elt4]的最左端是位“11”。
所以,如果我想XMM0只包含V0
shufps xmm0, xmm0, 0xFF // 11 11 11 11 === 0xFF
哪个解释是正确的?
非常感谢你。它有助于。 :) – CppLearner