[英]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.