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