GCC introduced __builtin_bswapXX intrinsics in a quite old version. As version 2 and 3 are no more used nowadays instead of manually craft these functions using assembly language use the new built-ins. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- spice/macros.h | 128 ++------------------------------------------------------- 1 file changed, 4 insertions(+), 124 deletions(-) diff --git a/spice/macros.h b/spice/macros.h index 79d00ee..023fd6a 100644 --- a/spice/macros.h +++ b/spice/macros.h @@ -248,130 +248,10 @@ /* Arch specific stuff for speed */ -#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__) -# if defined (__i386__) -# define SPICE_BYTESWAP16_IA32(val) \ - (__extension__ \ - ({ register uint16_t __v, __x = ((uint16_t) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = SPICE_BYTESWAP16_CONSTANT (__x); \ - else \ - __asm__ ("rorw $8, %w0" \ - : "=r" (__v) \ - : "0" (__x) \ - : "cc"); \ - __v; })) -# if !defined (__i486__) && !defined (__i586__) \ - && !defined (__pentium__) && !defined (__i686__) \ - && !defined (__pentiumpro__) && !defined (__pentium4__) -# define SPICE_BYTESWAP32_IA32(val) \ - (__extension__ \ - ({ register uint32_t __v, __x = ((uint32_t) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = SPICE_BYTESWAP32_CONSTANT (__x); \ - else \ - __asm__ ("rorw $8, %w0\n\t" \ - "rorl $16, %0\n\t" \ - "rorw $8, %w0" \ - : "=r" (__v) \ - : "0" (__x) \ - : "cc"); \ - __v; })) -# else /* 486 and higher has bswap */ -# define SPICE_BYTESWAP32_IA32(val) \ - (__extension__ \ - ({ register uint32_t __v, __x = ((uint32_t) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = SPICE_BYTESWAP32_CONSTANT (__x); \ - else \ - __asm__ ("bswap %0" \ - : "=r" (__v) \ - : "0" (__x)); \ - __v; })) -# endif /* processor specific 32-bit stuff */ -# define SPICE_BYTESWAP64_IA32(val) \ - (__extension__ \ - ({ union { uint64_t __ll; \ - uint32_t __l[2]; } __w, __r; \ - __w.__ll = ((uint64_t) (val)); \ - if (__builtin_constant_p (__w.__ll)) \ - __r.__ll = SPICE_BYTESWAP64_CONSTANT (__w.__ll); \ - else \ - { \ - __r.__l[0] = SPICE_BYTESWAP32 (__w.__l[1]); \ - __r.__l[1] = SPICE_BYTESWAP32 (__w.__l[0]); \ - } \ - __r.__ll; })) - /* Possibly just use the constant version and let gcc figure it out? */ -# define SPICE_BYTESWAP16(val) (SPICE_BYTESWAP16_IA32 (val)) -# define SPICE_BYTESWAP32(val) (SPICE_BYTESWAP32_IA32 (val)) -# define SPICE_BYTESWAP64(val) (SPICE_BYTESWAP64_IA32 (val)) -# elif defined (__ia64__) -# define SPICE_BYTESWAP16_IA64(val) \ - (__extension__ \ - ({ register uint16_t __v, __x = ((uint16_t) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = SPICE_BYTESWAP16_CONSTANT (__x); \ - else \ - __asm__ __volatile__ ("shl %0 = %1, 48 ;;" \ - "mux1 %0 = %0, @rev ;;" \ - : "=r" (__v) \ - : "r" (__x)); \ - __v; })) -# define SPICE_BYTESWAP32_IA64(val) \ - (__extension__ \ - ({ register uint32_t __v, __x = ((uint32_t) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = SPICE_BYTESWAP32_CONSTANT (__x); \ - else \ - __asm__ __volatile__ ("shl %0 = %1, 32 ;;" \ - "mux1 %0 = %0, @rev ;;" \ - : "=r" (__v) \ - : "r" (__x)); \ - __v; })) -# define SPICE_BYTESWAP64_IA64(val) \ - (__extension__ \ - ({ register uint64_t __v, __x = ((uint64_t) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = SPICE_BYTESWAP64_CONSTANT (__x); \ - else \ - __asm__ __volatile__ ("mux1 %0 = %1, @rev ;;" \ - : "=r" (__v) \ - : "r" (__x)); \ - __v; })) -# define SPICE_BYTESWAP16(val) (SPICE_BYTESWAP16_IA64 (val)) -# define SPICE_BYTESWAP32(val) (SPICE_BYTESWAP32_IA64 (val)) -# define SPICE_BYTESWAP64(val) (SPICE_BYTESWAP64_IA64 (val)) -# elif defined (__x86_64__) -# define SPICE_BYTESWAP32_X86_64(val) \ - (__extension__ \ - ({ register uint32_t __v, __x = ((uint32_t) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = SPICE_BYTESWAP32_CONSTANT (__x); \ - else \ - __asm__ ("bswapl %0" \ - : "=r" (__v) \ - : "0" (__x)); \ - __v; })) -# define SPICE_BYTESWAP64_X86_64(val) \ - (__extension__ \ - ({ register uint64_t __v, __x = ((uint64_t) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = SPICE_BYTESWAP64_CONSTANT (__x); \ - else \ - __asm__ ("bswapq %0" \ - : "=r" (__v) \ - : "0" (__x)); \ - __v; })) - /* gcc seems to figure out optimal code for this on its own */ -# define SPICE_BYTESWAP16(val) (SPICE_BYTESWAP16_CONSTANT (val)) -# define SPICE_BYTESWAP32(val) (SPICE_BYTESWAP32_X86_64 (val)) -# define SPICE_BYTESWAP64(val) (SPICE_BYTESWAP64_X86_64 (val)) -# else /* generic gcc */ -# define SPICE_BYTESWAP16(val) (SPICE_BYTESWAP16_CONSTANT (val)) -# define SPICE_BYTESWAP32(val) (SPICE_BYTESWAP32_CONSTANT (val)) -# define SPICE_BYTESWAP64(val) (SPICE_BYTESWAP64_CONSTANT (val)) -# endif +#if defined (__GNUC__) && (__GNUC__ >= 4) && defined (__OPTIMIZE__) +# define SPICE_BYTESWAP16(val) __builtin_bswap16(val) +# define SPICE_BYTESWAP32(val) __builtin_bswap32(val) +# define SPICE_BYTESWAP64(val) __builtin_bswap64(val) #else /* generic */ # define SPICE_BYTESWAP16(val) (SPICE_BYTESWAP16_CONSTANT (val)) # define SPICE_BYTESWAP32(val) (SPICE_BYTESWAP32_CONSTANT (val)) -- 2.14.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel