> Date: Tue, 22 Mar 2022 14:25:38 +1100
> From: Jonathan Gray <[email protected]>
> 
> 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@

ok kettenis@

> > 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