64ビットレジスタの下位32ビットサブレジスタにBSWAPを使用する方法の答えを探していました。たとえば、 RAXレジスタ内にあり、単一の命令で0x0123456789abcdef
変更したい(パフォーマンスのため)。0x01234567efcdab89
だから私は次のインライン関数を試しました:
#define BSWAP(T) { \
__asm__ __volatile__ ( \
"bswap %k0" \
: "=q" (T) \
: "q" (T)); \
}
その結果は でした0x00000000efcdab89
。コンパイラがこのように動作する理由がわかりません。誰かが効率的な解決策を知っていますか?