[英]How to BSWAP the lower 32-bit of 64-bit register?
我一直在寻找有关如何将BSWAP用于64位寄存器的低32位子寄存器的答案。 例如, 0x0123456789abcdef
位于RAX寄存器中,我想用一条指令将其更改为0x01234567efcdab89
(由于性能)。
所以我尝试了以下内联函数:
#define BSWAP(T) { \
__asm__ __volatile__ ( \
"bswap %k0" \
: "=q" (T) \
: "q" (T)); \
}
结果是0x00000000efcdab89
。 我不明白为什么编译器会这样。 有人知道有效的解决方案吗?
检查gcc生成的程序集输出! 使用gcc -s
标志来编译代码并生成asm输出。
IIRC,x86-64在没有明确指示的情况下默认情况下使用32位整数,因此这可能是问题的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.