1 /* Macros to swap the order of bytes in 16-bit integer values. s390 version
2 Copyright (C) 2012-2015 Free Software Foundation, Inc.
3 Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
4 This file is part of the GNU C Library.
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, see
18 <http://www.gnu.org/licenses/>. */
20 #ifndef _BITS_BYTESWAP_H
21 # error "Never use <bits/byteswap-16.h> directly; include <byteswap.h> instead."
24 #include <bits/wordsize.h>
26 /* Swap bytes in 16 bit value. */
27 #if defined __GNUC__ && __GNUC__ >= 2
29 # define __bswap_16(x) \
31 ({ unsigned short int __v, __x = (unsigned short int) (x); \
32 if (__builtin_constant_p (x)) \
33 __v = __bswap_constant_16 (__x); \
35 unsigned short int __tmp = (unsigned short int) (__x); \
36 __asm__ __volatile__ ( \
38 : "=&d" (__v) : "m" (__tmp) ); \
42 # define __bswap_16(x) \
44 ({ unsigned short int __v, __x = (unsigned short int) (x); \
45 if (__builtin_constant_p (x)) \
46 __v = __bswap_constant_16 (__x); \
48 unsigned short int __tmp = (unsigned short int) (__x); \
49 __asm__ __volatile__ ( \
54 : "=&d" (__v) : "m" (__tmp) : "1"); \
59 /* This is better than nothing. */
60 static __inline
unsigned short int
61 __bswap_16 (unsigned short int __bsx
)
63 return __bswap_constant_16 (__bsx
);