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