asm x86_64 Intel Linux - 将 RDX:RAX 移至 XMM0 [副本]

asm x86_64 Intel Linux - Move RDX:RAX into XMM0 [duplicate]

提问人:0xDEADBEEF 提问时间:3/7/2022 更新时间:3/7/2022 访问量:258

问:

我正在使用 rdtsc 指令,我知道它将高四字词存储到 RDX 中,将低四字字存储到 RAX (RDX:RAX) 中,但我想用它来做算术运算(减去两个时间戳) 所以我需要将 RDX:RAX 移动到 128 位寄存器 (xmm0) 中

MOVQ 指令有效,但仅适用于低四字字 (MOVQ XMM0,RAX):enter image description here

是否可以将 RDX 移动到 xmm0 的最高 64 位部分(v2_int64 的第二部分)?

程序集 nasm simd int128 x64dbg

评论

2赞 Raymond Chen 3/7/2022
您确实意识到不需要使用 xmm 寄存器来执行 128 位减法。您可以在常规寄存器中执行此操作,后跟 sub 后跟 sbb。这可能比移入和移出 xmm 寄存器更快。
3赞 fuz 3/7/2022
不要发布文字图片!
1赞 fuz 3/7/2022
如果您有 SSE 4.1,则可以使用。如果没有,请使用 和 .pinsrqmovqpunpcklqdq
4赞 ecm 3/7/2022
显然仍然以 64 位模式返回,因此 的上半部分将始终归零。参考资料: stackoverflow.com/questions/17401914/... 伊塔:更好的来源:felixcloutier.com/x86/rdtsc“(在支持 Intel 64 架构的处理器上,RAX 和 RDX 中每个的高阶 32 位都会被清除。rdtscedx:eaxrax
2赞 Peter Cordes 3/7/2022
在 XMM 寄存器中拥有 128 位数字甚至无法帮助您减去它。算术中最宽的 SIMD 元素大小是 64 位,就像 一样,与标量不同,它不会产生进位/借用输出。psubq

答: 暂无答案