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