swab.h
01: #ifndef _ASM_X86_SWAB_H
02: #define _ASM_X86_SWAB_H
03:
04: #include <linux/types.h>
05:
06:
07: static __inline__ __u32 __arch_swab32(__u32 val)
08: {
09: #ifdef __i386__
10: # ifdef CONFIG_X86_BSWAP
11: __asm__("bswap %0" : "=r" (val) : "0" (val));
12: # else
13: __asm__("xchgb %b0,%h0\n\t"
14: "rorl $16,%0\n\t"
15: "xchgb %b0,%h0"
16: : "=q" (val)
17: : "0" (val));
18: # endif
19:
20: #else
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__ __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
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
62:
© Andrew Scott 2006 -
2025,
All Rights Reserved