From: Gabriel Ganne Date: Tue, 21 Nov 2017 10:33:45 +0000 (+0100) Subject: use REV on aarch64 for endianness swapping (VPP-1067) X-Git-Tag: v18.04-rc0~206 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=70d44d347a58caef0a4417bdc587a37b0a638783;p=vpp.git use REV on aarch64 for endianness swapping (VPP-1067) Change-Id: I2de52725f40380422ca5019405df36cc05681603 Signed-off-by: Gabriel Ganne --- diff --git a/src/vppinfra/byte_order.h b/src/vppinfra/byte_order.h index b263538c6fe..4cdc06fb329 100644 --- a/src/vppinfra/byte_order.h +++ b/src/vppinfra/byte_order.h @@ -56,6 +56,13 @@ always_inline u16 clib_byte_swap_u16 (u16 x) { +#if defined (__aarch64__) + if (!__builtin_constant_p (x)) + { + __asm__ ("rev16 %w0, %w0":"+r" (x)); + return x; + } +#endif return (x >> 8) | (x << 8); } @@ -74,6 +81,12 @@ clib_byte_swap_u32 (u32 x) asm volatile ("bswap %0":"=r" (x):"0" (x)); return x; } +#elif defined (__aarch64__) + if (!__builtin_constant_p (x)) + { + __asm__ ("rev %w0, %w0":"+r" (x)); + return x; + } #endif return ((x << 24) | ((x & 0xff00) << 8) | ((x >> 8) & 0xff00) | (x >> 24)); } @@ -93,6 +106,12 @@ clib_byte_swap_u64 (u64 x) asm volatile ("bswapq %0":"=r" (x):"0" (x)); return x; } +#elif defined (__aarch64__) + if (!__builtin_constant_p (x)) + { + __asm__ ("rev %0, %0":"+r" (x)); + return x; + } #endif #define _(x,n,i) \ ((((x) >> (8*(i))) & 0xff) << (8*((n)-(i)-1)))