Como BSWAP o menor 32 bits do registro de 64 bits?
Eu tenho procurado a resposta para como usar BSWAP para sub-registro inferior de 32 bits do registro de 64 bits. Por exemplo,0x0123456789abcdef
está dentro do registro RAX, e eu quero mudá-lo para0x01234567efcdab89
com uma única instrução (por causa do desempenho).
Então eu tentei seguir a função inline:
#define BSWAP(T) { \
__asm__ __volatile__ ( \
"bswap %k0" \
: "=q" (T) \
: "q" (T)); \
}
E o resultado foi0x00000000efcdab89
. Eu não entendo porque o compilador age assim. Alguém conhece a solução eficiente?