]> git.saurik.com Git - apple/xnu.git/blobdiff - EXTERNAL_HEADERS/architecture/byte_order.h
xnu-7195.101.1.tar.gz
[apple/xnu.git] / EXTERNAL_HEADERS / architecture / byte_order.h
index b39c272cb532e058937f46a814d32f4cd9e0c6ce..72507854a922046b2a04770e0d3ee08561036937 100644 (file)
@@ -1,21 +1,23 @@
 /*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999-2002 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License").  You may not use this file except in compliance with the
- * License.  Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
+ * Reserved.  This file contains Original Code and/or Modifications of
+ * Original Code as defined in and that are subject to the Apple Public
+ * Source License Version 1.0 (the 'License').  You may not use this file
+ * except in compliance with the License.  Please obtain a copy of the
+ * License at http://www.apple.com/publicsource and read it before using
+ * this file.
  * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  * License for the specific language governing rights and limitations
- * under the License.
+ * under the License."
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
  *
  * Byte ordering conversion.
  *
- * HISTORY
- *
- * 20 October 1992 ? at NeXT
- *     Added #ifdef wrapper to prevent multiple inclusions of this file.
- *
- * 8 October 1992 ? at NeXT
- *     Converted to NXxxx versions.  Condensed history.
- *
- * 18 May 1992 ? at NeXT
- *     Created.
  */
 
 #ifndef        _ARCHITECTURE_BYTE_ORDER_H_
 #define _ARCHITECTURE_BYTE_ORDER_H_
  
+#include <libkern/OSByteOrder.h>
+
 typedef unsigned long NXSwappedFloat;
 typedef unsigned long long NXSwappedDouble;
 
-#if defined (__ppc__)
-#include "architecture/ppc/byte_order.h"
-#elif defined (__i386__)
-#include "architecture/i386/byte_order.h"
-#else
-#error architecture not supported
-#endif
-
-/*
- * Identify the byte order
- * of the current host.
- */
-
-enum NXByteOrder {
-    NX_UnknownByteOrder,
-    NX_LittleEndian,
-    NX_BigEndian
-};
-
-static __inline__
-enum NXByteOrder
-NXHostByteOrder(void)
-{
-    unsigned int       _x;
-    
-    _x = (NX_BigEndian << 24) | NX_LittleEndian;
-        
-    return ((enum NXByteOrder)*((unsigned char *)&_x));
-}
-
-/*
- * The predicated versions
- * are defined here in terms
- * of the unpredicated ones.
- */
-
-#if    __BIG_ENDIAN__
-
-static __inline__
-unsigned short
-NXSwapBigShortToHost(
-    unsigned short     x
-)
-{
-    return (x);
-}
-
-static __inline__
-unsigned int
-NXSwapBigIntToHost(
-    unsigned int       x
-)
-{
-    return (x);
-}
-
-static __inline__
-unsigned long
-NXSwapBigLongToHost(
-    unsigned long      x
-)
-{
-    return (x);
-}
-
-static __inline__
-unsigned long long
-NXSwapBigLongLongToHost(
-    unsigned long long x
-)
-{
-    return (x);
-}
-
-#ifndef KERNEL
-
-static __inline__
-double
-NXSwapBigDoubleToHost(
-    NXSwappedDouble    x
-)
-{
-    return NXConvertSwappedDoubleToHost(x);
-}
-
-static __inline__
-float
-NXSwapBigFloatToHost(
-    NXSwappedFloat     x
-)
-{
-    return NXConvertSwappedFloatToHost(x);
-}
-
-#endif /* KERNEL */
-
-static __inline__
-unsigned short
-NXSwapHostShortToBig(
-    unsigned short     x
-)
-{
-    return (x);
-}
-
-static __inline__
-unsigned int
-NXSwapHostIntToBig(
-    unsigned int       x
-)
-{
-    return (x);
-}
-
-static __inline__
-unsigned long
-NXSwapHostLongToBig(
-    unsigned long      x
-)
-{
-    return (x);
-}
-
 static __inline__
-unsigned long long
-NXSwapHostLongLongToBig(
-    unsigned long long x
+unsigned short 
+NXSwapShort(
+    unsigned short inv
 )
 {
-    return (x);
-}
-
-#ifndef KERNEL
-
-static __inline__
-NXSwappedDouble
-NXSwapHostDoubleToBig(
-    double             x
-)
-{
-    return NXConvertHostDoubleToSwapped(x);
-}
-
-static __inline__
-NXSwappedFloat
-NXSwapHostFloatToBig(
-    float              x
-)
-{
-    return NXConvertHostFloatToSwapped(x);
-}
-
-#endif /* KERNEL */
-
-static __inline__
-unsigned short
-NXSwapLittleShortToHost(
-    unsigned short     x
-)
-{
-    return (NXSwapShort(x));
+    return (unsigned short)OSSwapInt16((uint16_t)inv);
 }
 
 static __inline__
 unsigned int
-NXSwapLittleIntToHost(
-    unsigned int       x
+NXSwapInt(
+    unsigned int inv
 )
 {
-    return (NXSwapInt(x));
+    return (unsigned int)OSSwapInt32((uint32_t)inv);
 }
 
 static __inline__
 unsigned long
-NXSwapLittleLongToHost(
-    unsigned long      x
+NXSwapLong(
+    unsigned long inv
 )
 {
-    return (NXSwapLong(x));
+    return (unsigned long)OSSwapInt32((uint32_t)inv);
 }
 
 static __inline__
 unsigned long long
-NXSwapLittleLongLongToHost(
-    unsigned long long x
+NXSwapLongLong(
+    unsigned long long inv
 )
 {
-    return (NXSwapLongLong(x));
+    return (unsigned long long)OSSwapInt64((uint64_t)inv);
 }
 
-#ifndef KERNEL
-
-static __inline__
-double
-NXSwapLittleDoubleToHost(
-    NXSwappedDouble    x
-)
+static __inline__ NXSwappedFloat
+NXConvertHostFloatToSwapped(float x)
 {
-    return NXConvertSwappedDoubleToHost(NXSwapDouble(x));
+    union fconv {
+        float number;
+        NXSwappedFloat sf;
+    } u;
+    u.number = x;
+    return u.sf;
 }
 
-static __inline__
-float
-NXSwapLittleFloatToHost(
-    NXSwappedFloat     x
-)
+static __inline__ float
+NXConvertSwappedFloatToHost(NXSwappedFloat x)
 {
-    return NXConvertSwappedFloatToHost(NXSwapFloat(x));
+    union fconv {
+        float number;
+        NXSwappedFloat sf;
+    } u;
+    u.sf = x;
+    return u.number;
 }
 
-#endif /* KERNEL */
-
-static __inline__
-unsigned short
-NXSwapHostShortToLittle(
-    unsigned short     x
-)
+static __inline__ NXSwappedDouble
+NXConvertHostDoubleToSwapped(double x)
 {
-    return (NXSwapShort(x));
+    union dconv {
+        double number;
+        NXSwappedDouble sd;
+    } u;
+    u.number = x;
+    return u.sd;
 }
 
-static __inline__
-unsigned int
-NXSwapHostIntToLittle(
-    unsigned int       x
-)
+static __inline__ double
+NXConvertSwappedDoubleToHost(NXSwappedDouble x)
 {
-    return (NXSwapInt(x));
+    union dconv {
+        double number;
+        NXSwappedDouble sd;
+    } u;
+    u.sd = x;
+    return u.number;
 }
 
-static __inline__
-unsigned long
-NXSwapHostLongToLittle(
-    unsigned long      x
-)
-{
-    return (NXSwapLong(x));
+static __inline__ NXSwappedFloat
+NXSwapFloat(NXSwappedFloat x)
+{ 
+    return (NXSwappedFloat)OSSwapInt32((uint32_t)x);  
 }
 
-static __inline__
-unsigned long long
-NXSwapHostLongLongToLittle(
-    unsigned long long x
-)
-{
-    return (NXSwapLongLong(x));
+static __inline__ NXSwappedDouble   
+NXSwapDouble(NXSwappedDouble x)
+{  
+    return (NXSwappedDouble)OSSwapInt64((uint64_t)x);
 }
 
-#ifndef KERNEL
+/*
+ * Identify the byte order
+ * of the current host.
+ */
 
-static __inline__
-NXSwappedDouble
-NXSwapHostDoubleToLittle(
-    double             x
-)
-{
-    return NXSwapDouble(NXConvertHostDoubleToSwapped(x));
-}
+enum NXByteOrder {
+    NX_UnknownByteOrder,
+    NX_LittleEndian,
+    NX_BigEndian
+};
 
 static __inline__
-NXSwappedFloat
-NXSwapHostFloatToLittle(
-    float              x
-)
+enum NXByteOrder
+NXHostByteOrder(void)
 {
-    return NXSwapFloat(NXConvertHostFloatToSwapped(x));
+#if defined(__LITTLE_ENDIAN__)
+    return NX_LittleEndian;
+#elif defined(__BIG_ENDIAN__)
+    return NX_BigEndian;
+#else
+    return NX_UnknownByteOrder;
+#endif
 }
 
-#endif /* KERNEL */
-#endif /*__BIG_ENDIAN__ */
-
-#if    __LITTLE_ENDIAN__
-
 static __inline__
 unsigned short
 NXSwapBigShortToHost(
     unsigned short     x
 )
 {
-    return (NXSwapShort(x));
+    return (unsigned short)OSSwapBigToHostInt16((uint16_t)x);
 }
 
 static __inline__
@@ -330,7 +167,7 @@ NXSwapBigIntToHost(
     unsigned int       x
 )
 {
-    return (NXSwapInt(x));
+    return (unsigned int)OSSwapBigToHostInt32((uint32_t)x);
 }
 
 static __inline__
@@ -339,7 +176,7 @@ NXSwapBigLongToHost(
     unsigned long      x
 )
 {
-    return (NXSwapLong(x));
+    return (unsigned long)OSSwapBigToHostInt32((uint32_t)x);
 }
 
 static __inline__
@@ -348,7 +185,7 @@ NXSwapBigLongLongToHost(
     unsigned long long x
 )
 {
-    return (NXSwapLongLong(x));
+    return (unsigned long long)OSSwapBigToHostInt64((uint64_t)x);
 }
 
 static __inline__
@@ -357,7 +194,7 @@ NXSwapBigDoubleToHost(
     NXSwappedDouble    x
 )
 {
-    return NXConvertSwappedDoubleToHost(NXSwapDouble(x));
+    return NXConvertSwappedDoubleToHost((NXSwappedDouble)OSSwapBigToHostInt64((uint64_t)x));
 }
 
 static __inline__
@@ -366,7 +203,7 @@ NXSwapBigFloatToHost(
     NXSwappedFloat     x
 )
 {
-    return NXConvertSwappedFloatToHost(NXSwapFloat(x));
+    return NXConvertSwappedFloatToHost((NXSwappedFloat)OSSwapBigToHostInt32((uint32_t)x));
 }
 
 static __inline__
@@ -375,7 +212,7 @@ NXSwapHostShortToBig(
     unsigned short     x
 )
 {
-    return (NXSwapShort(x));
+    return (unsigned short)OSSwapHostToBigInt16((uint16_t)x);
 }
 
 static __inline__
@@ -384,7 +221,7 @@ NXSwapHostIntToBig(
     unsigned int       x
 )
 {
-    return (NXSwapInt(x));
+    return (unsigned int)OSSwapHostToBigInt32((uint32_t)x);
 }
 
 static __inline__
@@ -393,7 +230,7 @@ NXSwapHostLongToBig(
     unsigned long      x
 )
 {
-    return (NXSwapLong(x));
+    return (unsigned long)OSSwapHostToBigInt32((uint32_t)x);
 }
 
 static __inline__
@@ -402,25 +239,25 @@ NXSwapHostLongLongToBig(
     unsigned long long x
 )
 {
-    return (NXSwapLongLong(x));
+    return (unsigned long long)OSSwapHostToBigInt64((uint64_t)x);
 }
 
 static __inline__
 NXSwappedDouble
 NXSwapHostDoubleToBig(
-    double             x
+    double     x
 )
 {
-    return (NXSwapDouble(NXConvertHostDoubleToSwapped(x)));
+    return (NXSwappedDouble)OSSwapHostToBigInt64((uint64_t)NXConvertHostDoubleToSwapped(x));
 }
 
 static __inline__
 NXSwappedFloat
 NXSwapHostFloatToBig(
-    float              x
+    float      x
 )
 {
-    return (NXSwapFloat(NXConvertHostFloatToSwapped(x)));
+    return (NXSwappedFloat)OSSwapHostToBigInt32((uint32_t)NXConvertHostFloatToSwapped(x));
 }
 
 static __inline__
@@ -429,7 +266,7 @@ NXSwapLittleShortToHost(
     unsigned short     x
 )
 {
-    return (x);
+    return (unsigned short)OSSwapLittleToHostInt16((uint16_t)x);
 }
 
 static __inline__
@@ -438,7 +275,7 @@ NXSwapLittleIntToHost(
     unsigned int       x
 )
 {
-    return (x);
+    return (unsigned int)OSSwapLittleToHostInt32((uint32_t)x);
 }
 
 static __inline__
@@ -447,7 +284,7 @@ NXSwapLittleLongToHost(
     unsigned long      x
 )
 {
-    return (x);
+    return (unsigned long)OSSwapLittleToHostInt32((uint32_t)x);
 }
 
 static __inline__
@@ -456,7 +293,7 @@ NXSwapLittleLongLongToHost(
     unsigned long long x
 )
 {
-    return (x);
+    return (unsigned long long)OSSwapLittleToHostInt64((uint64_t)x);
 }
 
 static __inline__
@@ -465,7 +302,7 @@ NXSwapLittleDoubleToHost(
     NXSwappedDouble    x
 )
 {
-    return NXConvertSwappedDoubleToHost(x);
+    return NXConvertSwappedDoubleToHost((NXSwappedDouble)OSSwapLittleToHostInt64((uint64_t)x));
 }
 
 static __inline__
@@ -474,7 +311,7 @@ NXSwapLittleFloatToHost(
     NXSwappedFloat     x
 )
 {
-    return NXConvertSwappedFloatToHost(x);
+    return NXConvertSwappedFloatToHost((NXSwappedFloat)OSSwapLittleToHostInt32((uint32_t)x));
 }
 
 static __inline__
@@ -483,7 +320,7 @@ NXSwapHostShortToLittle(
     unsigned short     x
 )
 {
-    return (x);
+    return (unsigned short)OSSwapHostToLittleInt16((uint16_t)x);
 }
 
 static __inline__
@@ -492,7 +329,7 @@ NXSwapHostIntToLittle(
     unsigned int       x
 )
 {
-    return (x);
+    return (unsigned int)OSSwapHostToLittleInt32((uint32_t)x);
 }
 
 static __inline__
@@ -501,7 +338,7 @@ NXSwapHostLongToLittle(
     unsigned long      x
 )
 {
-    return (x);
+    return (unsigned long)OSSwapHostToLittleInt32((uint32_t)x);
 }
 
 static __inline__
@@ -510,27 +347,25 @@ NXSwapHostLongLongToLittle(
     unsigned long long x
 )
 {
-    return (x);
+    return (unsigned long long)OSSwapHostToLittleInt64((uint64_t)x);
 }
 
 static __inline__
 NXSwappedDouble
 NXSwapHostDoubleToLittle(
-    double             x
+    double     x
 )
 {
-    return NXConvertHostDoubleToSwapped(x);
+    return (NXSwappedDouble)OSSwapHostToLittleInt64((uint64_t)NXConvertHostDoubleToSwapped(x));
 }
 
 static __inline__
 NXSwappedFloat
 NXSwapHostFloatToLittle(
-    float              x
+    float      x
 )
 {
-    return NXConvertHostFloatToSwapped(x);
+    return (NXSwappedFloat)OSSwapHostToLittleInt32((uint32_t)NXConvertHostFloatToSwapped(x));
 }
 
-#endif /* __LITTLE_ENDIAN__ */
-
 #endif /* _ARCHITECTURE_BYTE_ORDER_H_ */