1 /* Macros to swap the order of bytes in 16-bit integer values. 2 Copyright (C) 2012-2015 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <http://www.gnu.org/licenses/>. */ 18 19 #ifndef _BITS_BYTESWAP_H 20 # error "Never use <bits/byteswap-16.h> directly; include <byteswap.h> instead." 21 #endif 22 23 #ifdef __GNUC__ 24 # if __GNUC__ >= 2 25 # define __bswap_16(x) \ 26 (__extension__ \ 27 ({ unsigned short int __v, __x = (unsigned short int) (x); \ 28 if (__builtin_constant_p (__x)) \ 29 __v = __bswap_constant_16 (__x); \ 30 else \ 31 __asm__ ("rorw $8, %w0" \ 32 : "=r" (__v) \ 33 : "0" (__x) \ 34 : "cc"); \ 35 __v; })) 36 # else 37 /* This is better than nothing. */ 38 # define __bswap_16(x) \ 39 (__extension__ \ 40 ({ unsigned short int __x = (unsigned short int) (x); \ 41 __bswap_constant_16 (__x); })) 42 # endif 43 #else 44 static __inline unsigned short int 45 __bswap_16 (unsigned short int __bsx) 46 { 47 return __bswap_constant_16 (__bsx); 48 } 49 #endif 50