1 /*- 2 * Copyright (c) 2002 Thomas Moestl <tmm@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 * $FreeBSD$ 27 */ 28 29 #ifndef _SYS_ENDIAN_H_ 30 #define _SYS_ENDIAN_H_ 31 32 #include <sys/cdefs.h> 33 #include <stdint.h> 34 35 /* 36 * General byte order swapping functions. 37 */ 38 #define bswap16(x) __bswap16(x) 39 #define bswap32(x) __bswap32(x) 40 #define bswap64(x) __bswap64(x) 41 42 /* 43 * Host to big endian, host to little endian, big endian to host, and little 44 * endian to host byte order functions as detailed in byteorder(9). 45 */ 46 #if _BYTE_ORDER == _LITTLE_ENDIAN 47 #define htobe16(x) bswap16((x)) 48 #define htobe32(x) bswap32((x)) 49 #define htobe64(x) bswap64((x)) 50 #define htole16(x) ((uint16_t)(x)) 51 #define htole32(x) ((uint32_t)(x)) 52 #define htole64(x) ((uint64_t)(x)) 53 54 #define be16toh(x) bswap16((x)) 55 #define be32toh(x) bswap32((x)) 56 #define be64toh(x) bswap64((x)) 57 #define le16toh(x) ((uint16_t)(x)) 58 #define le32toh(x) ((uint32_t)(x)) 59 #define le64toh(x) ((uint64_t)(x)) 60 #else /* _BYTE_ORDER != _LITTLE_ENDIAN */ 61 #define htobe16(x) ((uint16_t)(x)) 62 #define htobe32(x) ((uint32_t)(x)) 63 #define htobe64(x) ((uint64_t)(x)) 64 #define htole16(x) bswap16((x)) 65 #define htole32(x) bswap32((x)) 66 #define htole64(x) bswap64((x)) 67 68 #define be16toh(x) ((uint16_t)(x)) 69 #define be32toh(x) ((uint32_t)(x)) 70 #define be64toh(x) ((uint64_t)(x)) 71 #define le16toh(x) bswap16((x)) 72 #define le32toh(x) bswap32((x)) 73 #define le64toh(x) bswap64((x)) 74 #endif /* _BYTE_ORDER == _LITTLE_ENDIAN */ 75 76 /* 77 * The generic encoding and decoding functions have been removed since they're 78 * rarely used and generate suboptimal code on platforms that allow unaligned 79 * accesses 80 */ 81 82 #endif /* _SYS_ENDIAN_H_ */ 83