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_ */