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?

questionAnswers(2)

yourAnswerToTheQuestion