drop the MD byte-swap micro-optimizations on clang architectures
authornaddy <naddy@openbsd.org>
Tue, 7 May 2024 14:26:48 +0000 (14:26 +0000)
committernaddy <naddy@openbsd.org>
Tue, 7 May 2024 14:26:48 +0000 (14:26 +0000)
The compiler already translates the generic code into arithmetic
byte-swap instructions or byte-swapping memory load and store
instructions if available on an architecture.

ok deraadt@ guenther@

sys/arch/amd64/include/endian.h
sys/arch/arm/include/endian.h
sys/arch/arm64/include/endian.h
sys/arch/i386/include/endian.h
sys/arch/powerpc/include/endian.h
sys/arch/powerpc64/include/endian.h

index 3b077cd..3a2b46d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: endian.h,v 1.7 2018/10/02 21:30:44 naddy Exp $        */
+/*     $OpenBSD: endian.h,v 1.8 2024/05/07 14:26:48 naddy Exp $        */
 
 /*-
  * Copyright (c) 1997 Niklas Hallqvist.  All rights reserved.
 #ifndef _MACHINE_ENDIAN_H_
 #define _MACHINE_ENDIAN_H_
 
-#ifndef __FROM_SYS__ENDIAN
-#include <sys/_types.h>
-#endif
-
-static __inline __uint16_t
-__swap16md(__uint16_t _x)
-{
-       __asm ("rorw $8, %w0" : "+r" (_x));
-       return (_x);
-}
-
-static __inline __uint32_t
-__swap32md(__uint32_t _x)
-{
-       __asm ("bswap %0" : "+r" (_x));
-       return (_x);
-}
-
-static __inline __uint64_t
-__swap64md(__uint64_t _x)
-{
-       __asm ("bswapq %0" : "+r" (_x));
-       return (_x);
-}
-
-/* Tell sys/endian.h we have MD variants of the swap macros.  */
-#define __HAVE_MD_SWAP
-
 #define _BYTE_ORDER _LITTLE_ENDIAN
 
 #ifndef __FROM_SYS__ENDIAN
index 739ee04..1e31015 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: endian.h,v 1.11 2018/10/02 21:30:44 naddy Exp $       */
+/*     $OpenBSD: endian.h,v 1.12 2024/05/07 14:26:48 naddy Exp $       */
 
 /*
  * Copyright (c) 2015 David Gwynne <dlg@openbsd.org>
 #ifndef _ARM_ENDIAN_H_
 #define _ARM_ENDIAN_H_
 
-#ifndef __FROM_SYS__ENDIAN
-#include <sys/_types.h>
-#endif
-
-static __inline __uint16_t
-__swap16md(__uint16_t _x)
-{
-       __uint16_t _rv;
-
-       __asm ("rev16 %0, %1" : "=r" (_rv) : "r" (_x));
-
-       return (_rv);
-}
-
-static __inline __uint32_t
-__swap32md(__uint32_t _x)
-{
-       __uint32_t _rv;
-
-       __asm ("rev %0, %1" : "=r" (_rv) : "r" (_x));
-
-       return (_rv);
-}
-
-static __inline __uint64_t
-__swap64md(__uint64_t _x)
-{
-       __uint64_t _rv;
-
-       _rv = (__uint64_t)__swap32md(_x >> 32) |
-           (__uint64_t)__swap32md(_x) << 32;
-
-       return (_rv);
-}
-
-/* Tell sys/endian.h we have MD variants of the swap macros.  */
-#define __HAVE_MD_SWAP
-
 #define _BYTE_ORDER _LITTLE_ENDIAN
 #define        __STRICT_ALIGNMENT
 
 #ifndef __FROM_SYS__ENDIAN
 #include <sys/endian.h>
 #endif
+
 #endif /* _ARM_ENDIAN_H_ */
index 605a4a7..db5d10f 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: endian.h,v 1.3 2018/10/01 17:42:16 naddy Exp $ */
+/* $OpenBSD: endian.h,v 1.4 2024/05/07 14:26:48 naddy Exp $ */
 
 /*
  * Copyright (c) 2015 David Gwynne <dlg@openbsd.org>
 #ifndef _MACHINE_ENDIAN_H_
 #define _MACHINE_ENDIAN_H_
 
-#ifndef __FROM_SYS__ENDIAN
-#include <sys/_types.h>
-#endif
-
-static __inline __uint16_t
-__swap16md(__uint16_t _x)
-{
-        __uint16_t _rv;
-
-        __asm ("rev16 %w0, %w1" : "=r" (_rv) : "r"(_x));
-
-       return (_rv);
-}
-
-static __inline __uint32_t
-__swap32md(__uint32_t _x)
-{
-        __uint32_t _rv;
-
-        __asm ("rev %w0, %w1" : "=r" (_rv) : "r"(_x));
-
-        return (_rv);
-}
-
-static __inline __uint64_t
-__swap64md(__uint64_t _x)
-{
-        __uint64_t _rv;
-
-        __asm ("rev %x0, %x1" : "=r" (_rv) : "r"(_x));
-
-        return (_rv);
-}
-
-/* Tell sys/endian.h we have MD variants of the swap macros.  */
-#define __HAVE_MD_SWAP
-
-
 #define _BYTE_ORDER _LITTLE_ENDIAN
 #define        __STRICT_ALIGNMENT
 
 #ifndef __FROM_SYS__ENDIAN
 #include <sys/endian.h>
 #endif
+
 #endif /* _MACHINE_ENDIAN_H_ */
index b107da4..248f984 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: endian.h,v 1.19 2018/10/02 21:30:44 naddy Exp $       */
+/*     $OpenBSD: endian.h,v 1.20 2024/05/07 14:26:48 naddy Exp $       */
 
 /*-
  * Copyright (c) 1997 Niklas Hallqvist.  All rights reserved.
 #ifndef _MACHINE_ENDIAN_H_
 #define _MACHINE_ENDIAN_H_
 
-#ifndef __FROM_SYS__ENDIAN
-#include <sys/_types.h>
-#endif
-
-static __inline __uint16_t
-__swap16md(__uint16_t _x)
-{
-       __asm ("rorw $8, %w0" : "+r" (_x));
-       return (_x);
-}
-
-static __inline __uint32_t
-__swap32md(__uint32_t _x)
-{
-       __asm ("bswap %0" : "+r" (_x));
-       return (_x);
-}
-
-static __inline __uint64_t
-__swap64md(__uint64_t _x)
-{
-       return ((__uint64_t)__swap32md(_x >> 32) |
-           (__uint64_t)__swap32md(_x & 0xffffffff) << 32);
-}
-
-/* Tell sys/endian.h we have MD variants of the swap macros.  */
-#define __HAVE_MD_SWAP
-
 #define _BYTE_ORDER _LITTLE_ENDIAN
 
 #ifndef __FROM_SYS__ENDIAN
index 11ce820..993a872 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: endian.h,v 1.21 2014/10/22 23:56:47 dlg Exp $ */
+/*     $OpenBSD: endian.h,v 1.22 2024/05/07 14:26:48 naddy Exp $ */
 
 /*-
  * Copyright (c) 1997 Niklas Hallqvist.  All rights reserved.
 #ifndef _POWERPC_ENDIAN_H_
 #define _POWERPC_ENDIAN_H_
 
-#ifdef _KERNEL
-
-static inline __uint16_t
-__mswap16(volatile const __uint16_t *m)
-{
-       __uint16_t v;
-
-       __asm("lhbrx %0, 0, %1"
-           : "=r" (v)
-            : "r" (m), "m" (*m));
-
-       return (v);
-}
-
-static inline __uint32_t
-__mswap32(volatile const __uint32_t *m)
-{
-       __uint32_t v;
-
-       __asm("lwbrx %0, 0, %1"
-           : "=r" (v)
-            : "r" (m), "m" (*m));
-
-       return (v);
-}
-
-static inline __uint64_t
-__mswap64(volatile const __uint64_t *m)
-{
-       __uint32_t *a = (__uint32_t *)m;
-       __uint64_t v;
-
-       v = (__uint64_t)__mswap32(a + 1) << 32 |
-           (__uint64_t)__mswap32(a);
-
-       return (v);
-}
-
-static inline void
-__swapm16(volatile __uint16_t *m, __uint16_t v)
-{
-       __asm("sthbrx %1, 0, %2"
-           : "=m" (*m)
-           : "r" (v), "r" (m));
-}
-
-static inline void
-__swapm32(volatile __uint32_t *m, __uint32_t v)
-{
-       __asm("stwbrx %1, 0, %2"
-           : "=m" (*m)
-           : "r" (v), "r" (m));
-}
-
-static inline void
-__swapm64(volatile __uint64_t *m, __uint64_t v)
-{
-       __uint32_t *a = (__uint32_t *)m;
-
-       __swapm32(a + 1, v >> 32);
-       __swapm32(a, v);
-}
-
-#define __HAVE_MD_SWAPIO
-#endif /* _KERNEL */
-
 #undef _BIG_ENDIAN     /* XXX - gcc may define _BIG_ENDIAN too */
 #define _BYTE_ORDER _BIG_ENDIAN
 
index 5803ecd..5e02d2a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: endian.h,v 1.2 2020/06/08 14:12:00 naddy Exp $ */
+/*     $OpenBSD: endian.h,v 1.3 2024/05/07 14:26:48 naddy Exp $ */
 
 /*-
  * Copyright (c) 1997 Niklas Hallqvist.  All rights reserved.
 #ifndef _MACHINE_ENDIAN_H_
 #define _MACHINE_ENDIAN_H_
 
-#ifdef _KERNEL
-
-static inline __uint16_t
-__mswap16(volatile const __uint16_t *m)
-{
-       __uint16_t v;
-
-       __asm("lhbrx %0, 0, %1"
-           : "=r" (v)
-           : "r" (m), "m" (*m));
-
-       return (v);
-}
-
-static inline __uint32_t
-__mswap32(volatile const __uint32_t *m)
-{
-       __uint32_t v;
-
-       __asm("lwbrx %0, 0, %1"
-           : "=r" (v)
-           : "r" (m), "m" (*m));
-
-       return (v);
-}
-
-static inline __uint64_t
-__mswap64(volatile const __uint64_t *m)
-{
-       __uint64_t v;
-
-       __asm("ldbrx %0, 0, %1"
-           : "=r" (v)
-           : "r" (m), "m" (*m));
-
-       return (v);
-}
-
-static inline void
-__swapm16(volatile __uint16_t *m, __uint16_t v)
-{
-       __asm("sthbrx %1, 0, %2"
-           : "=m" (*m)
-           : "r" (v), "r" (m));
-}
-
-static inline void
-__swapm32(volatile __uint32_t *m, __uint32_t v)
-{
-       __asm("stwbrx %1, 0, %2"
-           : "=m" (*m)
-           : "r" (v), "r" (m));
-}
-
-static inline void
-__swapm64(volatile __uint64_t *m, __uint64_t v)
-{
-       __asm("stdbrx %1, 0, %2"
-           : "=m" (*m)
-           : "r" (v), "r" (m));
-}
-
-#define __HAVE_MD_SWAPIO
-#endif /* _KERNEL */
-
 #undef _BIG_ENDIAN     /* XXX - gcc may define _BIG_ENDIAN too */
 #define _BYTE_ORDER _BIG_ENDIAN