PATH:
usr
/
include
/
bits
/* Macros to swap the order of bytes in integer values. Copyright (C) 1997-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ #if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H # error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead." #endif #ifndef _BITS_BYTESWAP_H #define _BITS_BYTESWAP_H 1 #include <features.h> #include <bits/types.h> #include <bits/wordsize.h> /* Swap bytes in 16 bit value. */ #define __bswap_constant_16(x) \ ((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))) /* Get __bswap_16. */ #include <bits/byteswap-16.h> /* Swap bytes in 32 bit value. */ #define __bswap_constant_32(x) \ ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) #ifdef __GNUC__ # if __GNUC_PREREQ (4, 3) static __inline unsigned int __bswap_32 (unsigned int __bsx) { return __builtin_bswap32 (__bsx); } # elif __GNUC__ >= 2 # if __WORDSIZE == 64 || (defined __i486__ || defined __pentium__ \ || defined __pentiumpro__ || defined __pentium4__ \ || defined __k8__ || defined __athlon__ \ || defined __k6__ || defined __nocona__ \ || defined __core2__ || defined __geode__ \ || defined __amdfam10__) /* To swap the bytes in a word the i486 processors and up provide the `bswap' opcode. On i386 we have to use three instructions. */ # define __bswap_32(x) \ (__extension__ \ ({ unsigned int __v, __x = (x); \ if (__builtin_constant_p (__x)) \ __v = __bswap_constant_32 (__x); \ else \ __asm__ ("bswap %0" : "=r" (__v) : "0" (__x)); \ __v; })) # else # define __bswap_32(x) \ (__extension__ \ ({ unsigned int __v, __x = (x); \ if (__builtin_constant_p (__x)) \ __v = __bswap_constant_32 (__x); \ else \ __asm__ ("rorw $8, %w0;" \ "rorl $16, %0;" \ "rorw $8, %w0" \ : "=r" (__v) \ : "0" (__x) \ : "cc"); \ __v; })) # endif # else # define __bswap_32(x) \ (__extension__ \ ({ unsigned int __x = (x); __bswap_constant_32 (__x); })) # endif #else static __inline unsigned int __bswap_32 (unsigned int __bsx) { return __bswap_constant_32 (__bsx); } #endif #if __GNUC_PREREQ (2, 0) /* Swap bytes in 64 bit value. */ # define __bswap_constant_64(x) \ (__extension__ ((((x) & 0xff00000000000000ull) >> 56) \ | (((x) & 0x00ff000000000000ull) >> 40) \ | (((x) & 0x0000ff0000000000ull) >> 24) \ | (((x) & 0x000000ff00000000ull) >> 8) \ | (((x) & 0x00000000ff000000ull) << 8) \ | (((x) & 0x0000000000ff0000ull) << 24) \ | (((x) & 0x000000000000ff00ull) << 40) \ | (((x) & 0x00000000000000ffull) << 56))) # if __GNUC_PREREQ (4, 3) static __inline __uint64_t __bswap_64 (__uint64_t __bsx) { return __builtin_bswap64 (__bsx); } # elif __WORDSIZE == 64 # define __bswap_64(x) \ (__extension__ \ ({ __uint64_t __v, __x = (x); \ if (__builtin_constant_p (__x)) \ __v = __bswap_constant_64 (__x); \ else \ __asm__ ("bswap %q0" : "=r" (__v) : "0" (__x)); \ __v; })) # else # define __bswap_64(x) \ (__extension__ \ ({ union { __extension__ __uint64_t __ll; \ unsigned int __l[2]; } __w, __r; \ if (__builtin_constant_p (x)) \ __r.__ll = __bswap_constant_64 (x); \ else \ { \ __w.__ll = (x); \ __r.__l[0] = __bswap_32 (__w.__l[1]); \ __r.__l[1] = __bswap_32 (__w.__l[0]); \ } \ __r.__ll; })) # endif #elif __GLIBC_HAVE_LONG_LONG # define __bswap_constant_64(x) \ ((((x) & 0xff00000000000000ull) >> 56) \ | (((x) & 0x00ff000000000000ull) >> 40) \ | (((x) & 0x0000ff0000000000ull) >> 24) \ | (((x) & 0x000000ff00000000ull) >> 8) \ | (((x) & 0x00000000ff000000ull) << 8) \ | (((x) & 0x0000000000ff0000ull) << 24) \ | (((x) & 0x000000000000ff00ull) << 40) \ | (((x) & 0x00000000000000ffull) << 56)) static __inline __uint64_t __bswap_64 (__uint64_t __bsx) { return __bswap_constant_64 (__bsx); } #endif #endif /* _BITS_BYTESWAP_H */
[-] inf.h
[edit]
[-] sched.h
[edit]
[-] netdb.h
[edit]
[-] ipctypes.h
[edit]
[-] wchar.h
[edit]
[-] fcntl2.h
[edit]
[-] fcntl-linux.h
[edit]
[-] wchar2.h
[edit]
[-] mman.h
[edit]
[-] wchar-ldbl.h
[edit]
[-] environments.h
[edit]
[-] string.h
[edit]
[-] socket.h
[edit]
[-] fenvinline.h
[edit]
[-] unistd.h
[edit]
[-] monetary-ldbl.h
[edit]
[-] eventfd.h
[edit]
[-] endian.h
[edit]
[-] locale.h
[edit]
[-] typesizes.h
[edit]
[-] printf-ldbl.h
[edit]
[-] ipc.h
[edit]
[-] dirent.h
[edit]
[-] resource.h
[edit]
[-] waitstatus.h
[edit]
[-] mathdef.h
[edit]
[-] wordsize.h
[edit]
[-] stdio_lim.h
[edit]
[+]
..
[-] initspin.h
[edit]
[-] shm.h
[edit]
[-] sysctl.h
[edit]
[-] fenv.h
[edit]
[-] posix2_lim.h
[edit]
[-] xopen_lim.h
[edit]
[-] stdio-ldbl.h
[edit]
[-] sockaddr.h
[edit]
[-] ioctl-types.h
[edit]
[-] pthreadtypes.h
[edit]
[-] syscall.h
[edit]
[-] sys_errlist.h
[edit]
[-] select2.h
[edit]
[-] stdio-lock.h
[edit]
[-] errno.h
[edit]
[-] local_lim.h
[edit]
[-] fcntl.h
[edit]
[-] huge_valf.h
[edit]
[-] mqueue.h
[edit]
[-] stat.h
[edit]
[-] waitflags.h
[edit]
[-] huge_vall.h
[edit]
[-] semaphore.h
[edit]
[-] signum.h
[edit]
[-] mathcalls.h
[edit]
[-] siginfo.h
[edit]
[-] poll2.h
[edit]
[-] socket2.h
[edit]
[-] select.h
[edit]
[-] sigaction.h
[edit]
[-] timex.h
[edit]
[-] time.h
[edit]
[-] setjmp.h
[edit]
[-] types.h
[edit]
[-] utmpx.h
[edit]
[-] posix_opt.h
[edit]
[-] stdlib.h
[edit]
[-] syslog.h
[edit]
[-] ioctls.h
[edit]
[-] sigstack.h
[edit]
[-] uio.h
[edit]
[-] libio-ldbl.h
[edit]
[-] inotify.h
[edit]
[-] statvfs.h
[edit]
[-] poll.h
[edit]
[-] math-finite.h
[edit]
[-] stdio.h
[edit]
[-] stdlib-float.h
[edit]
[-] mathinline.h
[edit]
[-] mqueue2.h
[edit]
[-] nan.h
[edit]
[-] statfs.h
[edit]
[-] sem.h
[edit]
[-] termios.h
[edit]
[-] posix1_lim.h
[edit]
[-] param.h
[edit]
[-] socket_type.h
[edit]
[-] cmathcalls.h
[edit]
[-] elfclass.h
[edit]
[-] ustat.h
[edit]
[-] msq.h
[edit]
[-] byteswap-16.h
[edit]
[-] error.h
[edit]
[-] string3.h
[edit]
[-] a.out.h
[edit]
[-] utsname.h
[edit]
[-] timerfd.h
[edit]
[-] epoll.h
[edit]
[-] setjmp2.h
[edit]
[-] sigthread.h
[edit]
[-] string2.h
[edit]
[-] huge_val.h
[edit]
[-] stab.def
[edit]
[-] libc-lock.h
[edit]
[-] sigcontext.h
[edit]
[-] sigset.h
[edit]
[-] stdio2.h
[edit]
[-] dlfcn.h
[edit]
[-] syslog-path.h
[edit]
[-] signalfd.h
[edit]
[-] confname.h
[edit]
[-] utmp.h
[edit]
[-] in.h
[edit]
[-] byteswap.h
[edit]
[-] link.h
[edit]
[-] stdlib-ldbl.h
[edit]
[-] hwcap.h
[edit]
[-] syslog-ldbl.h
[edit]