xmm
寄存器和 ymm
寄存器有什么区别呢?我以为 xmm
是用于 SSE,ymm
用于 AVX,但我写了一些代码:
vmovups ymm1, [r9]
vcvtss2si rcx, ymm1
并且它给了我:
error: invalid combination of opcode and operands
这是关于这条线:
vcvtss2si rcx, ymm1
于是我写道:
vcvtss2si rcx, xmm1
它按预期工作。将ymm1
向量的第一个值转换为整数,现在在rcx
中。
这是关于什么?ymm1
和xmm1
是同一寄存器吗?
xmm1
和ymm1
(以及其他索引)的主要区别在于前者长度为128位,而后者长度为256位。 - Leandro Canigliaxmm1
和ymm1
共享同一块内存吗? 如果我想使用仅使用前128位的指令,那么使用xmm
还是ymm
无所谓吗?或者每个仅使用前128位的指令都需要使用xmm
? - SciArtvmovups ymm1, [r9]
然后我将xmm1
的第一个元素(而不是ymm1
)进行转换,并将其保存在rcx
中:vcvtss2si rcx, xmm1
为什么rcx
中会有ymm1
的第一个值?它不应该是来自xmm1
的“随机”数字吗? 如果xmm1
和ymm1
是独立的寄存器,为什么ymm1
的第一个元素和xmm1
的第一个元素相同? - SciArtxmm0
是ymm0
的低半部分,就像eax
是rax
的低半部分一样。(同时,写入xmm0
会将ymm0
的上半部分清零) - Peter Cordes