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

Reply via email to