Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.
1: /* 2: * Copyright (c) 2006 Apple Computer, Inc. All rights reserved. 3: * 4: * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5: * 6: * This file contains Original Code and/or Modifications of Original Code 7: * as defined in and that are subject to the Apple Public Source License 8: * Version 2.0 (the 'License'). You may not use this file except in 9: * compliance with the License. The rights granted to you under the License 10: * may not be used to create, or enable the creation or redistribution of, 11: * unlawful or unlicensed copies of an Apple operating system, or to 12: * circumvent, violate, or enable the circumvention or violation of, any 13: * terms of an Apple operating system software license agreement. 14: * 15: * Please obtain a copy of the License at 16: * http://www.opensource.apple.com/apsl/ and read it before using this file. 17: * 18: * The Original Code and all software distributed under the License are 19: * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22: * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23: * Please see the License for the specific language governing rights and 24: * limitations under the License. 25: * 26: * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27: */ 28: 29: #ifndef _OS__OSBYTEORDER_H 30: #define _OS__OSBYTEORDER_H 31: 32: /* 33: * This header is normally included from <libkern/OSByteOrder.h>. However, 34: * <sys/_endian.h> also includes this in the case of little-endian 35: * architectures, so that we can map OSByteOrder routines to the hton* and ntoh* 36: * macros. This results in the asymmetry below; we only include 37: * <libkern/arch/_OSByteOrder.h> for little-endian architectures. 38: */ 39: 40: #include <sys/_types.h> 41: 42: /* Macros for swapping constant values in the preprocessing stage. */ 43: #define __DARWIN_OSSwapConstInt16(x) \ 44: ((__uint16_t)((((__uint16_t)(x) & 0xff00) >> 8) | \ 45: (((__uint16_t)(x) & 0x00ff) << 8))) 46: 47: #define __DARWIN_OSSwapConstInt32(x) \ 48: ((__uint32_t)((((__uint32_t)(x) & 0xff000000) >> 24) | \ 49: (((__uint32_t)(x) & 0x00ff0000) >> 8) | \ 50: (((__uint32_t)(x) & 0x0000ff00) << 8) | \ 51: (((__uint32_t)(x) & 0x000000ff) << 24))) 52: 53: #define __DARWIN_OSSwapConstInt64(x) \ 54: ((__uint64_t)((((__uint64_t)(x) & 0xff00000000000000ULL) >> 56) | \ 55: (((__uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \ 56: (((__uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \ 57: (((__uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \ 58: (((__uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \ 59: (((__uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \ 60: (((__uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \ 61: (((__uint64_t)(x) & 0x00000000000000ffULL) << 56))) 62: 63: #if defined(__GNUC__) 64: 65: #if defined(__i386__) || defined(__x86_64__) 66: #include <libkern/i386/_OSByteOrder.h> 67: #endif 68: 69: 70: 71: #define __DARWIN_OSSwapInt16(x) \ 72: ((__uint16_t)(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt16(x) : _OSSwapInt16(x))) 73: 74: #define __DARWIN_OSSwapInt32(x) \ 75: (__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt32(x) : _OSSwapInt32(x)) 76: 77: #define __DARWIN_OSSwapInt64(x) \ 78: (__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt64(x) : _OSSwapInt64(x)) 79: 80: #else /* ! __GNUC__ */ 81: 82: #if defined(__i386__) || defined(__x86_64__) 83: 84: #if !defined(__DARWIN_OS_INLINE) 85: # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 86: # define __DARWIN_OS_INLINE static inline 87: # elif defined(__MWERKS__) || defined(__cplusplus) 88: # define __DARWIN_OS_INLINE static inline 89: # else 90: # define __DARWIN_OS_INLINE static __inline__ 91: # endif 92: #endif 93: 94: __DARWIN_OS_INLINE 95: uint16_t 96: _OSSwapInt16( 97: uint16_t data 98: ) 99: { 100: return __DARWIN_OSSwapConstInt16(data); 101: } 102: 103: __DARWIN_OS_INLINE 104: uint32_t 105: _OSSwapInt32( 106: uint32_t data 107: ) 108: { 109: return __DARWIN_OSSwapConstInt32(data); 110: } 111: 112: __DARWIN_OS_INLINE 113: uint64_t 114: _OSSwapInt64( 115: uint64_t data 116: ) 117: { 118: return __DARWIN_OSSwapConstInt64(data); 119: } 120: #endif 121: 122: #define __DARWIN_OSSwapInt16(x) _OSSwapInt16(x) 123: 124: #define __DARWIN_OSSwapInt32(x) _OSSwapInt32(x) 125: 126: #define __DARWIN_OSSwapInt64(x) _OSSwapInt64(x) 127: 128: #endif /* __GNUC__ */ 129: 130: #endif /* ! _OS__OSBYTEORDER_H */ 131: