Use GCC builtins for bswap as compiler can then emit these via insn
Using current macros, one gets for:
static inline int BSWAP32(int x) {
return ((x << 24) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | (x >> 24));
}
int main(int argc, char **argv)
{
return BSWAP32(argc);
}
main:
.LFB1:
.cfi_startproc
movl %edi, %eax
movl %edi, %edx
sarl $24, %edx
sall $24, %eax
orl %edx, %eax
movl %edi, %edx
sarl $8, %edi
sall $8, %edx
andl $65280, %edi
andl $16711680, %edx
orl %edx, %eax
orl %edi, %eax
ret
while using:
```c
int main(int argc, char **argv)
{
return __builtin_bswap32(argc);
}
one gets:
main:
.LFB0:
.cfi_startproc
movl %edi, %eax
bswap %eax
ret