Commit 13f7877bb5aeb1d5ad01ffbf17a80fb550fa6642
Committed by
Linus Torvalds
1 parent
156ca2bbf6
s390: introduce asm/swab.h
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 3 changed files with 94 additions and 90 deletions Side-by-side Diff
arch/s390/include/asm/Kbuild
arch/s390/include/asm/byteorder.h
1 | 1 | #ifndef _S390_BYTEORDER_H |
2 | 2 | #define _S390_BYTEORDER_H |
3 | 3 | |
4 | -/* | |
5 | - * include/asm-s390/byteorder.h | |
6 | - * | |
7 | - * S390 version | |
8 | - * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation | |
9 | - * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) | |
10 | - */ | |
11 | - | |
12 | -#include <asm/types.h> | |
13 | - | |
14 | -#define __BIG_ENDIAN | |
15 | - | |
16 | -#ifndef __s390x__ | |
17 | -# define __SWAB_64_THRU_32__ | |
18 | -#endif | |
19 | - | |
20 | -#ifdef __s390x__ | |
21 | -static inline __u64 __arch_swab64p(const __u64 *x) | |
22 | -{ | |
23 | - __u64 result; | |
24 | - | |
25 | - asm volatile("lrvg %0,%1" : "=d" (result) : "m" (*x)); | |
26 | - return result; | |
27 | -} | |
28 | -#define __arch_swab64p __arch_swab64p | |
29 | - | |
30 | -static inline __u64 __arch_swab64(__u64 x) | |
31 | -{ | |
32 | - __u64 result; | |
33 | - | |
34 | - asm volatile("lrvgr %0,%1" : "=d" (result) : "d" (x)); | |
35 | - return result; | |
36 | -} | |
37 | -#define __arch_swab64 __arch_swab64 | |
38 | - | |
39 | -static inline void __arch_swab64s(__u64 *x) | |
40 | -{ | |
41 | - *x = __arch_swab64p(x); | |
42 | -} | |
43 | -#define __arch_swab64s __arch_swab64s | |
44 | -#endif /* __s390x__ */ | |
45 | - | |
46 | -static inline __u32 __arch_swab32p(const __u32 *x) | |
47 | -{ | |
48 | - __u32 result; | |
49 | - | |
50 | - asm volatile( | |
51 | -#ifndef __s390x__ | |
52 | - " icm %0,8,3(%1)\n" | |
53 | - " icm %0,4,2(%1)\n" | |
54 | - " icm %0,2,1(%1)\n" | |
55 | - " ic %0,0(%1)" | |
56 | - : "=&d" (result) : "a" (x), "m" (*x) : "cc"); | |
57 | -#else /* __s390x__ */ | |
58 | - " lrv %0,%1" | |
59 | - : "=d" (result) : "m" (*x)); | |
60 | -#endif /* __s390x__ */ | |
61 | - return result; | |
62 | -} | |
63 | -#define __arch_swab32p __arch_swab32p | |
64 | - | |
65 | -#ifdef __s390x__ | |
66 | -static inline __u32 __arch_swab32(__u32 x) | |
67 | -{ | |
68 | - __u32 result; | |
69 | - | |
70 | - asm volatile("lrvr %0,%1" : "=d" (result) : "d" (x)); | |
71 | - return result; | |
72 | -} | |
73 | -#define __arch_swab32 __arch_swab32 | |
74 | -#endif /* __s390x__ */ | |
75 | - | |
76 | -static inline __u16 __arch_swab16p(const __u16 *x) | |
77 | -{ | |
78 | - __u16 result; | |
79 | - | |
80 | - asm volatile( | |
81 | -#ifndef __s390x__ | |
82 | - " icm %0,2,1(%1)\n" | |
83 | - " ic %0,0(%1)\n" | |
84 | - : "=&d" (result) : "a" (x), "m" (*x) : "cc"); | |
85 | -#else /* __s390x__ */ | |
86 | - " lrvh %0,%1" | |
87 | - : "=d" (result) : "m" (*x)); | |
88 | -#endif /* __s390x__ */ | |
89 | - return result; | |
90 | -} | |
91 | -#define __arch_swab16p __arch_swab16p | |
92 | - | |
93 | -#include <linux/byteorder.h> | |
4 | +#include <asm/swab.h> | |
5 | +#include <linux/byteorder/big_endian.h> | |
94 | 6 | |
95 | 7 | #endif /* _S390_BYTEORDER_H */ |
arch/s390/include/asm/swab.h
1 | +#ifndef _S390_SWAB_H | |
2 | +#define _S390_SWAB_H | |
3 | + | |
4 | +/* | |
5 | + * include/asm-s390/swab.h | |
6 | + * | |
7 | + * S390 version | |
8 | + * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation | |
9 | + * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) | |
10 | + */ | |
11 | + | |
12 | +#include <asm/types.h> | |
13 | + | |
14 | +#ifndef __s390x__ | |
15 | +# define __SWAB_64_THRU_32__ | |
16 | +#endif | |
17 | + | |
18 | +#ifdef __s390x__ | |
19 | +static inline __u64 __arch_swab64p(const __u64 *x) | |
20 | +{ | |
21 | + __u64 result; | |
22 | + | |
23 | + asm volatile("lrvg %0,%1" : "=d" (result) : "m" (*x)); | |
24 | + return result; | |
25 | +} | |
26 | +#define __arch_swab64p __arch_swab64p | |
27 | + | |
28 | +static inline __u64 __arch_swab64(__u64 x) | |
29 | +{ | |
30 | + __u64 result; | |
31 | + | |
32 | + asm volatile("lrvgr %0,%1" : "=d" (result) : "d" (x)); | |
33 | + return result; | |
34 | +} | |
35 | +#define __arch_swab64 __arch_swab64 | |
36 | + | |
37 | +static inline void __arch_swab64s(__u64 *x) | |
38 | +{ | |
39 | + *x = __arch_swab64p(x); | |
40 | +} | |
41 | +#define __arch_swab64s __arch_swab64s | |
42 | +#endif /* __s390x__ */ | |
43 | + | |
44 | +static inline __u32 __arch_swab32p(const __u32 *x) | |
45 | +{ | |
46 | + __u32 result; | |
47 | + | |
48 | + asm volatile( | |
49 | +#ifndef __s390x__ | |
50 | + " icm %0,8,3(%1)\n" | |
51 | + " icm %0,4,2(%1)\n" | |
52 | + " icm %0,2,1(%1)\n" | |
53 | + " ic %0,0(%1)" | |
54 | + : "=&d" (result) : "a" (x), "m" (*x) : "cc"); | |
55 | +#else /* __s390x__ */ | |
56 | + " lrv %0,%1" | |
57 | + : "=d" (result) : "m" (*x)); | |
58 | +#endif /* __s390x__ */ | |
59 | + return result; | |
60 | +} | |
61 | +#define __arch_swab32p __arch_swab32p | |
62 | + | |
63 | +#ifdef __s390x__ | |
64 | +static inline __u32 __arch_swab32(__u32 x) | |
65 | +{ | |
66 | + __u32 result; | |
67 | + | |
68 | + asm volatile("lrvr %0,%1" : "=d" (result) : "d" (x)); | |
69 | + return result; | |
70 | +} | |
71 | +#define __arch_swab32 __arch_swab32 | |
72 | +#endif /* __s390x__ */ | |
73 | + | |
74 | +static inline __u16 __arch_swab16p(const __u16 *x) | |
75 | +{ | |
76 | + __u16 result; | |
77 | + | |
78 | + asm volatile( | |
79 | +#ifndef __s390x__ | |
80 | + " icm %0,2,1(%1)\n" | |
81 | + " ic %0,0(%1)\n" | |
82 | + : "=&d" (result) : "a" (x), "m" (*x) : "cc"); | |
83 | +#else /* __s390x__ */ | |
84 | + " lrvh %0,%1" | |
85 | + : "=d" (result) : "m" (*x)); | |
86 | +#endif /* __s390x__ */ | |
87 | + return result; | |
88 | +} | |
89 | +#define __arch_swab16p __arch_swab16p | |
90 | + | |
91 | +#endif /* _S390_SWAB_H */ |