Index: amd64/include/endian.h =================================================================== RCS file: /cvs/src/sys/arch/amd64/include/endian.h,v retrieving revision 1.6 diff -u -p -r1.6 endian.h --- amd64/include/endian.h 12 Jul 2014 16:25:08 -0000 1.6 +++ amd64/include/endian.h 3 Jan 2018 23:23:44 -0000 @@ -27,33 +27,31 @@ #ifndef _MACHINE_ENDIAN_H_ #define _MACHINE_ENDIAN_H_ -#ifdef __GNUC__ +#include -#define __swap32md(x) __statement({ \ - __uint32_t __swap32md_x = (x); \ - \ - __asm ("bswap %0" : "+r" (__swap32md_x)); \ - __swap32md_x; \ -}) +static inline __uint32_t +__swap32md(__uint32_t x) +{ + __asm ("bswap %0" : "+r" (x)); + return (x); +} -#define __swap64md(x) __statement({ \ - __uint64_t __swap64md_x = (x); \ - \ - __asm ("bswapq %0" : "+r" (__swap64md_x)); \ - __swap64md_x; \ -}) +static inline __uint64_t +__swap64md(__uint64_t x) +{ + __asm ("bswapq %0" : "+r" (x)); + return (x); +} -#define __swap16md(x) __statement({ \ - __uint16_t __swap16md_x = (x); \ - \ - __asm ("rorw $8, %w0" : "+r" (__swap16md_x)); \ - __swap16md_x; \ -}) +static inline __uint16_t +__swap16md(__uint16_t x) +{ + __asm ("rorw $8, %w0" : "+r" (x)); + return (x); +} /* Tell sys/endian.h we have MD variants of the swap macros. */ #define __HAVE_MD_SWAP - -#endif /* __GNUC__ */ #define _BYTE_ORDER _LITTLE_ENDIAN Index: arm64/include/endian.h =================================================================== RCS file: /cvs/src/sys/arch/arm64/include/endian.h,v retrieving revision 1.2 diff -u -p -r1.2 endian.h --- arm64/include/endian.h 6 Feb 2017 04:08:57 -0000 1.2 +++ arm64/include/endian.h 3 Jan 2018 23:23:44 -0000 @@ -19,30 +19,34 @@ #ifndef _MACHINE_ENDIAN_H_ #define _MACHINE_ENDIAN_H_ -#define __swap32md(x) __statement({ \ - __uint32_t __swap32md_x; \ - \ - __asm ("rev %w0, %w1" : "=r" (__swap32md_x) : "r"(x)); \ - __swap32md_x; \ -}) +#include -#define __swap64md(x) __statement({ \ - __uint64_t __swap64md_x; \ - \ - __asm ("rev %x0, %x1" : "=r" (__swap64md_x) : "r"(x)); \ - __swap64md_x; \ -}) +static inline __uint32_t +__swap32md(__uint32_t i) +{ + __uint32_t o; + __asm ("rev %w0, %w1" : "=r" (o) : "r" (i)); + return (o); +} -#define __swap16md(x) __statement({ \ - __uint16_t __swap16md_x; \ - \ - __asm ("rev16 %w0, %w1" : "=r" (__swap16md_x) : "r"(x)); \ - __swap16md_x; \ -}) +static inline __uint64_t +__swap64md(__uint64_t i) +{ + __uint64_t o; + __asm ("rev %x0, %x1" : "=r" (o) : "r" (i)); + return (o); +} + +static inline __uint16_t +__swap16md(__uint16_t i) +{ + __uint16_t o; + __asm ("rev16 %w0, %w1" : "=r" (o) : "r" (i)); + return (o); +} /* Tell sys/endian.h we have MD variants of the swap macros. */ #define __HAVE_MD_SWAP - #define _BYTE_ORDER _LITTLE_ENDIAN #define __STRICT_ALIGNMENT Index: i386/include/endian.h =================================================================== RCS file: /cvs/src/sys/arch/i386/include/endian.h,v retrieving revision 1.18 diff -u -p -r1.18 endian.h --- i386/include/endian.h 12 Jul 2014 16:25:08 -0000 1.18 +++ i386/include/endian.h 3 Jan 2018 23:23:44 -0000 @@ -27,32 +27,31 @@ #ifndef _MACHINE_ENDIAN_H_ #define _MACHINE_ENDIAN_H_ -#ifdef __GNUC__ +#include -#define __swap32md(x) __statement({ \ - __uint32_t __swap32md_x = (x); \ - \ - __asm ("bswap %0" : "+r" (__swap32md_x)); \ - __swap32md_x; \ -}) +static inline __uint32_t +__swap32md(__uint32_t x) +{ + __asm ("bswap %0" : "+r" (x)); + return (x); +} -#define __swap64md(x) __statement({ \ - __uint64_t __swap64md_x = (x); \ - \ - (__uint64_t)__swap32md(__swap64md_x >> 32) | \ - (__uint64_t)__swap32md(__swap64md_x & 0xffffffff) << 32; \ -}) -#define __swap16md(x) __statement({ \ - __uint16_t __swap16md_x = (x); \ - \ - __asm ("rorw $8, %w0" : "+r" (__swap16md_x)); \ - __swap16md_x; \ -}) +static inline __uint64_t +__swap64md(__uint64_t x) +{ + return ((__uint64_t)__swap32md(x >> 32) | + (__uint64_t)__swap32md(x) << 32); +} + +static inline __uint16_t +__swap16md(__uint16_t x) +{ + __asm ("rorw $8, %w0" : "+r" (x)); + return (x); +} /* Tell sys/endian.h we have MD variants of the swap macros. */ #define __HAVE_MD_SWAP - -#endif /* __GNUC__ */ #define _BYTE_ORDER _LITTLE_ENDIAN Index: sh/include/endian.h =================================================================== RCS file: /cvs/src/sys/arch/sh/include/endian.h,v retrieving revision 1.5 diff -u -p -r1.5 endian.h --- sh/include/endian.h 12 Jul 2014 16:25:09 -0000 1.5 +++ sh/include/endian.h 3 Jan 2018 23:23:44 -0000 @@ -6,30 +6,33 @@ #ifndef _SH_ENDIAN_H_ #define _SH_ENDIAN_H_ -#ifdef __GNUC__ +#include -#define __swap64md __swap64gen +static inline __uint16_t +__swap16md(__uint16_t i) +{ + __uint16_t o; + __asm volatile ("swap.b %1,%0" : "=r" (o) : "r" (i)); + return (o); +} -#define __swap16md(x) __statement({ \ - uint16_t rval; \ - \ - __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x)); \ - \ - rval; \ +static inline __uint32_t +__swap32md(__uint32_t i) +{ + __uint32_t o; + __asm volatile ("swap.b %1,%0; swap.w %0,%0; swap.b %0,%0" + : "=r" (o) : "r" (i)); + return (o); }) -#define __swap32md(x) __statement({ \ - uint32_t rval; \ - \ - __asm volatile ("swap.b %1,%0; swap.w %0,%0; swap.b %0,%0" \ - : "=r"(rval) : "r"(x)); \ - \ - rval; \ -}) +static inline __uint64_t +__swap64md(__uint64_t x) +{ + return ((__uint64_t)__swap32md(x >> 32) | + (__uint64_t)__swap32md(x) << 32); +} #define __HAVE_MD_SWAP - -#endif /* __GNUC_ */ #ifdef __LITTLE_ENDIAN__ #define _BYTE_ORDER _LITTLE_ENDIAN