Home | History | Annotate | Download | only in asm
      1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2 #ifndef _ASM_X86_SWAB_H
      3 #define _ASM_X86_SWAB_H
      4 
      5 #include <linux/types.h>
      6 #include <linux/compiler.h>
      7 
      8 static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
      9 {
     10 	asm("bswapl %0" : "=r" (val) : "0" (val));
     11 	return val;
     12 }
     13 #define __arch_swab32 __arch_swab32
     14 
     15 static inline __attribute_const__ __u64 __arch_swab64(__u64 val)
     16 {
     17 #ifdef __i386__
     18 	union {
     19 		struct {
     20 			__u32 a;
     21 			__u32 b;
     22 		} s;
     23 		__u64 u;
     24 	} v;
     25 	v.u = val;
     26 	asm("bswapl %0 ; bswapl %1 ; xchgl %0,%1"
     27 	    : "=r" (v.s.a), "=r" (v.s.b)
     28 	    : "0" (v.s.a), "1" (v.s.b));
     29 	return v.u;
     30 #else /* __i386__ */
     31 	asm("bswapq %0" : "=r" (val) : "0" (val));
     32 	return val;
     33 #endif
     34 }
     35 #define __arch_swab64 __arch_swab64
     36 
     37 #endif /* _ASM_X86_SWAB_H */
     38