1
1
/* Macros to swap the order of bytes in integer values. s390 version.
2
Copyright (C) 2000-2003, 2008, 2011 Free Software Foundation, Inc.
2
Copyright (C) 2000-2012 Free Software Foundation, Inc.
3
3
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
4
4
This file is part of the GNU C Library.
14
14
Lesser General Public License for more details.
16
16
You should have received a copy of the GNU Lesser General Public
17
License along with the GNU C Library; if not, write to the Free
18
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17
License along with the GNU C Library; if not, see
18
<http://www.gnu.org/licenses/>. */
21
20
#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H
22
21
# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
28
27
#define _BITS_BYTESWAP_H 1
30
29
#define __bswap_constant_16(x) \
31
((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
30
((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))
33
/* Swap bytes in 16 bit value. */
34
#if defined __GNUC__ && __GNUC__ >= 2
36
# define __bswap_16(x) \
38
({ unsigned short int __v, __x = (x); \
39
if (__builtin_constant_p (x)) \
40
__v = __bswap_constant_16 (__x); \
42
unsigned short int __tmp = (unsigned short int) (__x); \
43
__asm__ __volatile__ ( \
45
: "=&d" (__v) : "m" (__tmp) ); \
49
# define __bswap_16(x) \
51
({ unsigned short int __v, __x = (x); \
52
if (__builtin_constant_p (x)) \
53
__v = __bswap_constant_16 (__x); \
55
unsigned short int __tmp = (unsigned short int) (__x); \
56
__asm__ __volatile__ ( \
61
: "=&d" (__v) : "m" (__tmp) : "1"); \
66
/* This is better than nothing. */
67
static __inline unsigned short int
68
__bswap_16 (unsigned short int __bsx)
70
return __bswap_constant_16 (__bsx);
33
#include <bits/byteswap-16.h>
74
35
/* Swap bytes in 32 bit value. */
75
36
#define __bswap_constant_32(x) \
151
112
__r.__l[1] = __bswap_32 (__w.__l[0]); \
115
#elif __GLIBC_HAVE_LONG_LONG
155
116
# define __bswap_constant_64(x) \
156
((((x) & 0xff00000000000000ul) >> 56) \
157
| (((x) & 0x00ff000000000000ul) >> 40) \
158
| (((x) & 0x0000ff0000000000ul) >> 24) \
159
| (((x) & 0x000000ff00000000ul) >> 8) \
160
| (((x) & 0x00000000ff000000ul) << 8) \
161
| (((x) & 0x0000000000ff0000ul) << 24) \
162
| (((x) & 0x000000000000ff00ul) << 40) \
163
| (((x) & 0x00000000000000fful) << 56))
117
((((x) & 0xff00000000000000ull) >> 56) \
118
| (((x) & 0x00ff000000000000ull) >> 40) \
119
| (((x) & 0x0000ff0000000000ull) >> 24) \
120
| (((x) & 0x000000ff00000000ull) >> 8) \
121
| (((x) & 0x00000000ff000000ull) << 8) \
122
| (((x) & 0x0000000000ff0000ull) << 24) \
123
| (((x) & 0x000000000000ff00ull) << 40) \
124
| (((x) & 0x00000000000000ffull) << 56))
165
126
static __inline unsigned long long int
166
127
__bswap_64 (unsigned long long int __bsx)