Я искал ответ о том, как использовать BSWAP для нижнего 32-битного подрегистра 64-битного регистра. Например, 0x0123456789abcdef
находится внутри регистра RAX, и я хочу изменить его на 0x01234567efcdab89
с помощью одной инструкции (из-за производительности).
Итак, я попробовал следующую встроенную функцию:
#define BSWAP(T) { \
__asm__ __volatile__ ( \
"bswap %k0" \
: "=q" (T) \
: "q" (T)); \
}
И результат был 0x00000000efcdab89
. Я не понимаю, почему компилятор так себя ведет. Кто-нибудь знает эффективное решение?
64-bit
заменен на64bit
, потому что вопросов с тегом64bit
больше. - person Brad Gilbert   schedule 17.10.2008