]>
Commit | Line | Data |
---|---|---|
cfcac2f7 HH |
1 | #ifndef _BLACKFIN_SWAB_H |
2 | #define _BLACKFIN_SWAB_H | |
3 | ||
350eb8b3 | 4 | #include <linux/types.h> |
cfcac2f7 HH |
5 | #include <linux/compiler.h> |
6 | ||
7 | #if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__) | |
8 | # define __SWAB_64_THRU_32__ | |
9 | #endif | |
10 | ||
11 | #ifdef __GNUC__ | |
12 | ||
13 | static __inline__ __attribute_const__ __u32 __arch_swahb32(__u32 xx) | |
14 | { | |
15 | __u32 tmp; | |
16 | __asm__("%1 = %0 >> 8 (V);\n\t" | |
17 | "%0 = %0 << 8 (V);\n\t" | |
18 | "%0 = %0 | %1;\n\t" | |
19 | : "+d"(xx), "=&d"(tmp)); | |
20 | return xx; | |
21 | } | |
22 | #define __arch_swahb32 __arch_swahb32 | |
23 | ||
24 | static __inline__ __attribute_const__ __u32 __arch_swahw32(__u32 xx) | |
25 | { | |
26 | __u32 rv; | |
27 | __asm__("%0 = PACK(%1.L, %1.H);\n\t": "=d"(rv): "d"(xx)); | |
28 | return rv; | |
29 | } | |
30 | #define __arch_swahw32 __arch_swahw32 | |
31 | ||
32 | static __inline__ __attribute_const__ __u32 __arch_swab32(__u32 xx) | |
33 | { | |
34 | return __arch_swahb32(__arch_swahw32(xx)); | |
35 | } | |
36 | #define __arch_swab32 __arch_swab32 | |
37 | ||
38 | static __inline__ __attribute_const__ __u16 __arch_swab16(__u16 xx) | |
39 | { | |
40 | __u32 xw = xx; | |
41 | __asm__("%0 <<= 8;\n %0.L = %0.L + %0.H (NS);\n": "+d"(xw)); | |
42 | return (__u16)xw; | |
43 | } | |
44 | #define __arch_swab16 __arch_swab16 | |
45 | ||
46 | #endif /* __GNUC__ */ | |
47 | ||
48 | #endif /* _BLACKFIN_SWAB_H */ |