The riscv64 <machine/endian.h> was likely copied from an architecture
providing optimized byte-swapping code (I'd bet arm64), but doesn't have
any such optimization, and copies the MI code.

Acknowledge this by dropping the __HAVE_MD_SWAP define to get the MI
code for free, rather than duplicating it.

Completely untested due to lack of applicable hardware.

Index: endian.h
===================================================================
RCS file: /OpenBSD/src/sys/arch/riscv64/include/endian.h,v
retrieving revision 1.2
diff -u -p -r1.2 endian.h
--- endian.h    12 May 2021 01:20:52 -0000      1.2
+++ endian.h    21 Mar 2022 19:47:43 -0000
@@ -19,51 +19,11 @@
 #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)
-{
-       __uint32_t ret;
-       ret = ((_x >> 8) | ((_x << 8) & 0xff00));
-
-       return ((__uint16_t)ret);
-}
-
-static __inline __uint32_t
-__swap32md(__uint32_t _x)
-{
-       return ((_x >> 24) | ((_x >> 8) & 0xff00) | ((_x << 8) & 0xff0000) |
-           ((_x << 24) & 0xff000000));
-}
-
-static __inline __uint64_t
-__swap64md(__uint64_t _x)
-{
-       __uint64_t ret;
-
-       ret = (_x >> 56);
-       ret |= ((_x >> 40) & 0xff00);
-       ret |= ((_x >> 24) & 0xff0000);
-       ret |= ((_x >>  8) & 0xff000000);
-       ret |= ((_x <<  8) & ((__uint64_t)0xff << 32));
-       ret |= ((_x << 24) & ((__uint64_t)0xff << 40));
-       ret |= ((_x << 40) & ((__uint64_t)0xff << 48));
-       ret |= (_x << 56);
-
-       return (ret);
-}
-
-/* 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_ */

Reply via email to