1#ifndef _S390_SWAB_H 2#define _S390_SWAB_H 3 4/* 5 * S390 version 6 * Copyright IBM Corp. 1999 7 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 8 */ 9 10#include <linux/types.h> 11 12#ifndef __s390x__ 13# define __SWAB_64_THRU_32__ 14#endif 15 16#ifdef __s390x__ 17static inline __u64 __arch_swab64p(const __u64 *x) 18{ 19 __u64 result; 20 21 asm volatile("lrvg %0,%1" : "=d" (result) : "m" (*x)); 22 return result; 23} 24#define __arch_swab64p __arch_swab64p 25 26static inline __u64 __arch_swab64(__u64 x) 27{ 28 __u64 result; 29 30 asm volatile("lrvgr %0,%1" : "=d" (result) : "d" (x)); 31 return result; 32} 33#define __arch_swab64 __arch_swab64 34 35static inline void __arch_swab64s(__u64 *x) 36{ 37 *x = __arch_swab64p(x); 38} 39#define __arch_swab64s __arch_swab64s 40#endif /* __s390x__ */ 41 42static inline __u32 __arch_swab32p(const __u32 *x) 43{ 44 __u32 result; 45 46 asm volatile( 47#ifndef __s390x__ 48 " icm %0,8,%O1+3(%R1)\n" 49 " icm %0,4,%O1+2(%R1)\n" 50 " icm %0,2,%O1+1(%R1)\n" 51 " ic %0,%1" 52 : "=&d" (result) : "Q" (*x) : "cc"); 53#else /* __s390x__ */ 54 " lrv %0,%1" 55 : "=d" (result) : "m" (*x)); 56#endif /* __s390x__ */ 57 return result; 58} 59#define __arch_swab32p __arch_swab32p 60 61#ifdef __s390x__ 62static inline __u32 __arch_swab32(__u32 x) 63{ 64 __u32 result; 65 66 asm volatile("lrvr %0,%1" : "=d" (result) : "d" (x)); 67 return result; 68} 69#define __arch_swab32 __arch_swab32 70#endif /* __s390x__ */ 71 72static inline __u16 __arch_swab16p(const __u16 *x) 73{ 74 __u16 result; 75 76 asm volatile( 77#ifndef __s390x__ 78 " icm %0,2,%O1+1(%R1)\n" 79 " ic %0,%1\n" 80 : "=&d" (result) : "Q" (*x) : "cc"); 81#else /* __s390x__ */ 82 " lrvh %0,%1" 83 : "=d" (result) : "m" (*x)); 84#endif /* __s390x__ */ 85 return result; 86} 87#define __arch_swab16p __arch_swab16p 88 89#endif /* _S390_SWAB_H */ 90