1 | #ifndef _ASM_X86_SWAB_H |
2 | #define _ASM_X86_SWAB_H |
3 | |
4 | #include <linux/types.h> |
5 | |
6 | |
7 | static __inline__ __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__ __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 | |