Skip to content
  • marxin's avatar
    Use GCC builtins for bswap as compiler can then emit these via instructions. · 64bce5a2
    marxin authored
    Using current macros, one get 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:
    
    int main(int argc, char **argv)
    {
      return __builtin_bswap32(argc);
    }
    
    one gets:
    
    main:
    .LFB0:
    	.cfi_startproc
    	movl	%edi, %eax
    	bswap	%eax
    	ret
    64bce5a2