Jak BSWAP ma niższy 32-bitowy rejestr 64-bitowy?
Szukałem odpowiedzi na pytanie, jak używać BSWAP dla niższego 32-bitowego sub-rejestru 64-bitowego rejestru. Na przykład,0x0123456789abcdef
znajduje się w rejestrze RAX i chcę go zmienić na0x01234567efcdab89
za pomocą jednej instrukcji (z powodu wydajności).
Próbowałem więc użyć funkcji inline:
#define BSWAP(T) { \
__asm__ __volatile__ ( \
"bswap %k0" \
: "=q" (T) \
: "q" (T)); \
}
Rezultat był0x00000000efcdab89
. Nie rozumiem, dlaczego kompilator działa w ten sposób. Czy ktoś zna skuteczne rozwiązanie?