On Mon, Mar 21, 2022 at 07:51:25PM +0000, Miod Vallat wrote:
> 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.
a kernel with this boots on qemu-system-riscv64
ok jsg@
>
> 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_ */
>
>