File: /usr/include/libkern/i386/_OSByteOrder.h

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-2012 Apple 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__OSBYTEORDERI386_H
      30: #define _OS__OSBYTEORDERI386_H
      31: 
      32: #if !defined(__DARWIN_OS_INLINE)
      33: # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
      34: #        define __DARWIN_OS_INLINE static inline
      35: # elif defined(__MWERKS__) || defined(__cplusplus)
      36: #        define __DARWIN_OS_INLINE static inline
      37: # else
      38: #        define __DARWIN_OS_INLINE static __inline__
      39: # endif
      40: #endif
      41: 
      42: /* Generic byte swapping functions. */
      43: 
      44: __DARWIN_OS_INLINE
      45: __uint16_t
      46: _OSSwapInt16(
      47:     __uint16_t        _data
      48: )
      49: {
      50:     return ((__uint16_t)((_data << 8) | (_data >> 8)));
      51: }
      52: 
      53: __DARWIN_OS_INLINE
      54: __uint32_t
      55: _OSSwapInt32(
      56:     __uint32_t        _data
      57: )
      58: {
      59: #if defined(__llvm__)
      60:     return __builtin_bswap32(_data);
      61: #else
      62:     __asm__ ("bswap   %0" : "+r" (_data));
      63:     return _data;
      64: #endif
      65: }
      66: 
      67: #if defined(__llvm__)
      68: __DARWIN_OS_INLINE
      69: __uint64_t
      70: _OSSwapInt64(
      71:     __uint64_t        _data
      72: )
      73: {
      74:     return __builtin_bswap64(_data);
      75: }
      76: 
      77: #elif defined(__i386__)
      78: __DARWIN_OS_INLINE
      79: __uint64_t
      80: _OSSwapInt64(
      81:     __uint64_t        _data
      82: )
      83: {
      84:     __asm__ ("bswap   %%eax\n\t"
      85:              "bswap   %%edx\n\t" 
      86:              "xchgl   %%eax, %%edx"
      87:              : "+A" (_data));
      88:     return _data;
      89: }
      90: #elif defined(__x86_64__)
      91: __DARWIN_OS_INLINE
      92: __uint64_t
      93: _OSSwapInt64(
      94:     __uint64_t        _data
      95: )
      96: {
      97:     __asm__ ("bswap   %0" : "+r" (_data));
      98:     return _data;
      99: }
     100: #else
     101: #error Unknown architecture
     102: #endif
     103: 
     104: #endif /* ! _OS__OSBYTEORDERI386_H */
     105: