Rev 5270 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5270 | serge | 1 | #ifndef _ASM_X86_SWAB_H |
2 | #define _ASM_X86_SWAB_H |
||
3 | |||
4 | #include |
||
5 | #include |
||
6 | |||
7 | static inline __attribute_const__ __u32 __arch_swab32(__u32 val) |
||
8 | { |
||
9 | #ifdef __i386__ |
||
10 | # ifdef CONFIG_X86_BSWAP |
||
11 | asm("bswap %0" : "=r" (val) : "0" (val)); |
||
12 | # else |
||
13 | asm("xchgb %b0,%h0\n\t" /* swap lower bytes */ |
||
14 | "rorl $16,%0\n\t" /* swap words */ |
||
15 | "xchgb %b0,%h0" /* swap higher bytes */ |
||
16 | : "=q" (val) |
||
17 | : "0" (val)); |
||
18 | # endif |
||
19 | |||
20 | #else /* __i386__ */ |
||
21 | asm("bswapl %0" |
||
22 | : "=r" (val) |
||
23 | : "0" (val)); |
||
24 | #endif |
||
25 | return val; |
||
26 | } |
||
27 | #define __arch_swab32 __arch_swab32 |
||
28 | |||
29 | static inline __attribute_const__ __u64 __arch_swab64(__u64 val) |
||
30 | { |
||
31 | #ifdef __i386__ |
||
32 | union { |
||
33 | struct { |
||
34 | __u32 a; |
||
35 | __u32 b; |
||
36 | } s; |
||
37 | __u64 u; |
||
38 | } v; |
||
39 | v.u = val; |
||
40 | # ifdef CONFIG_X86_BSWAP |
||
41 | asm("bswapl %0 ; bswapl %1 ; xchgl %0,%1" |
||
42 | : "=r" (v.s.a), "=r" (v.s.b) |
||
43 | : "0" (v.s.a), "1" (v.s.b)); |
||
44 | # else |
||
45 | v.s.a = __arch_swab32(v.s.a); |
||
46 | v.s.b = __arch_swab32(v.s.b); |
||
47 | asm("xchgl %0,%1" |
||
48 | : "=r" (v.s.a), "=r" (v.s.b) |
||
49 | : "0" (v.s.a), "1" (v.s.b)); |
||
50 | # endif |
||
51 | return v.u; |
||
52 | #else /* __i386__ */ |
||
53 | asm("bswapq %0" |
||
54 | : "=r" (val) |
||
55 | : "0" (val)); |
||
56 | return val; |
||
57 | #endif |
||
58 | } |
||
59 | #define __arch_swab64 __arch_swab64 |
||
60 | |||
61 | #endif /* _ASM_X86_SWAB_H */ |