diff options
Diffstat (limited to 'arch/c6x/include/asm/swab.h')
-rw-r--r-- | arch/c6x/include/asm/swab.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/arch/c6x/include/asm/swab.h b/arch/c6x/include/asm/swab.h new file mode 100644 index 000000000000..fd4bb0520e5e --- /dev/null +++ b/arch/c6x/include/asm/swab.h | |||
@@ -0,0 +1,54 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Texas Instruments Incorporated | ||
3 | * Author: Mark Salter <msalter@redhat.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | */ | ||
9 | #ifndef _ASM_C6X_SWAB_H | ||
10 | #define _ASM_C6X_SWAB_H | ||
11 | |||
12 | static inline __attribute_const__ __u16 __c6x_swab16(__u16 val) | ||
13 | { | ||
14 | asm("swap4 .l1 %0,%0\n" : "+a"(val)); | ||
15 | return val; | ||
16 | } | ||
17 | |||
18 | static inline __attribute_const__ __u32 __c6x_swab32(__u32 val) | ||
19 | { | ||
20 | asm("swap4 .l1 %0,%0\n" | ||
21 | "swap2 .l1 %0,%0\n" | ||
22 | : "+a"(val)); | ||
23 | return val; | ||
24 | } | ||
25 | |||
26 | static inline __attribute_const__ __u64 __c6x_swab64(__u64 val) | ||
27 | { | ||
28 | asm(" swap2 .s1 %p0,%P0\n" | ||
29 | "|| swap2 .l1 %P0,%p0\n" | ||
30 | " swap4 .l1 %p0,%p0\n" | ||
31 | " swap4 .l1 %P0,%P0\n" | ||
32 | : "+a"(val)); | ||
33 | return val; | ||
34 | } | ||
35 | |||
36 | static inline __attribute_const__ __u32 __c6x_swahw32(__u32 val) | ||
37 | { | ||
38 | asm("swap2 .l1 %0,%0\n" : "+a"(val)); | ||
39 | return val; | ||
40 | } | ||
41 | |||
42 | static inline __attribute_const__ __u32 __c6x_swahb32(__u32 val) | ||
43 | { | ||
44 | asm("swap4 .l1 %0,%0\n" : "+a"(val)); | ||
45 | return val; | ||
46 | } | ||
47 | |||
48 | #define __arch_swab16 __c6x_swab16 | ||
49 | #define __arch_swab32 __c6x_swab32 | ||
50 | #define __arch_swab64 __c6x_swab64 | ||
51 | #define __arch_swahw32 __c6x_swahw32 | ||
52 | #define __arch_swahb32 __c6x_swahb32 | ||
53 | |||
54 | #endif /* _ASM_C6X_SWAB_H */ | ||