| /* Copyright (C) 1992-2014 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/>. */ |
| |
| #ifndef _ENDIAN_H |
| #define _ENDIAN_H 1 |
| |
| #include <features.h> |
| |
| /* Definitions for byte order, according to significance of bytes, |
| from low addresses to high addresses. The value is what you get by |
| putting '4' in the most significant byte, '3' in the second most |
| significant byte, '2' in the second least significant byte, and '1' |
| in the least significant byte, and then writing down one digit for |
| each byte, starting with the byte at the lowest address at the left, |
| and proceeding to the byte with the highest address at the right. */ |
| |
| #define __LITTLE_ENDIAN 1234 |
| #define __BIG_ENDIAN 4321 |
| #define __PDP_ENDIAN 3412 |
| |
| /* This file defines `__BYTE_ORDER' for the particular machine. */ |
| #include <bits/endian.h> |
| |
| /* Some machines may need to use a different endianness for floating point |
| values. */ |
| #ifndef __FLOAT_WORD_ORDER |
| # define __FLOAT_WORD_ORDER __BYTE_ORDER |
| #endif |
| |
| #ifdef __USE_BSD |
| # define LITTLE_ENDIAN __LITTLE_ENDIAN |
| # define BIG_ENDIAN __BIG_ENDIAN |
| # define PDP_ENDIAN __PDP_ENDIAN |
| # define BYTE_ORDER __BYTE_ORDER |
| #endif |
| |
| #if __BYTE_ORDER == __LITTLE_ENDIAN |
| # define __LONG_LONG_PAIR(HI, LO) LO, HI |
| #elif __BYTE_ORDER == __BIG_ENDIAN |
| # define __LONG_LONG_PAIR(HI, LO) HI, LO |
| #endif |
| |
| |
| #if defined __USE_BSD && !defined __ASSEMBLER__ |
| /* Conversion interfaces. */ |
| # include <bits/byteswap.h> |
| |
| # if __BYTE_ORDER == __LITTLE_ENDIAN |
| # define htobe16(x) __bswap_16 (x) |
| # define htole16(x) (x) |
| # define be16toh(x) __bswap_16 (x) |
| # define le16toh(x) (x) |
| |
| # define htobe32(x) __bswap_32 (x) |
| # define htole32(x) (x) |
| # define be32toh(x) __bswap_32 (x) |
| # define le32toh(x) (x) |
| |
| # define htobe64(x) __bswap_64 (x) |
| # define htole64(x) (x) |
| # define be64toh(x) __bswap_64 (x) |
| # define le64toh(x) (x) |
| |
| # else |
| # define htobe16(x) (x) |
| # define htole16(x) __bswap_16 (x) |
| # define be16toh(x) (x) |
| # define le16toh(x) __bswap_16 (x) |
| |
| # define htobe32(x) (x) |
| # define htole32(x) __bswap_32 (x) |
| # define be32toh(x) (x) |
| # define le32toh(x) __bswap_32 (x) |
| |
| # define htobe64(x) (x) |
| # define htole64(x) __bswap_64 (x) |
| # define be64toh(x) (x) |
| # define le64toh(x) __bswap_64 (x) |
| # endif |
| #endif |
| |
| #endif /* endian.h */ |