mirror of
https://github.com/darlinghq/darling-xnu.git
synced 2024-11-23 04:29:53 +00:00
372 lines
6.8 KiB
C
372 lines
6.8 KiB
C
/*
|
|
* Copyright (c) 1999-2002 Apple Computer, Inc. All rights reserved.
|
|
*
|
|
* @APPLE_LICENSE_HEADER_START@
|
|
*
|
|
* "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.
|
|
*
|
|
* 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."
|
|
*
|
|
* @APPLE_LICENSE_HEADER_END@
|
|
*/
|
|
/*
|
|
* Copyright (c) 1992 NeXT Computer, Inc.
|
|
*
|
|
* Byte ordering conversion.
|
|
*
|
|
*/
|
|
|
|
#ifndef _ARCHITECTURE_BYTE_ORDER_H_
|
|
#define _ARCHITECTURE_BYTE_ORDER_H_
|
|
|
|
#include <libkern/OSByteOrder.h>
|
|
|
|
typedef unsigned long NXSwappedFloat;
|
|
typedef unsigned long long NXSwappedDouble;
|
|
|
|
static __inline__
|
|
unsigned short
|
|
NXSwapShort(
|
|
unsigned short inv
|
|
)
|
|
{
|
|
return (unsigned short)OSSwapInt16((uint16_t)inv);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned int
|
|
NXSwapInt(
|
|
unsigned int inv
|
|
)
|
|
{
|
|
return (unsigned int)OSSwapInt32((uint32_t)inv);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned long
|
|
NXSwapLong(
|
|
unsigned long inv
|
|
)
|
|
{
|
|
return (unsigned long)OSSwapInt32((uint32_t)inv);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned long long
|
|
NXSwapLongLong(
|
|
unsigned long long inv
|
|
)
|
|
{
|
|
return (unsigned long long)OSSwapInt64((uint64_t)inv);
|
|
}
|
|
|
|
static __inline__ NXSwappedFloat
|
|
NXConvertHostFloatToSwapped(float x)
|
|
{
|
|
union fconv {
|
|
float number;
|
|
NXSwappedFloat sf;
|
|
} u;
|
|
u.number = x;
|
|
return u.sf;
|
|
}
|
|
|
|
static __inline__ float
|
|
NXConvertSwappedFloatToHost(NXSwappedFloat x)
|
|
{
|
|
union fconv {
|
|
float number;
|
|
NXSwappedFloat sf;
|
|
} u;
|
|
u.sf = x;
|
|
return u.number;
|
|
}
|
|
|
|
static __inline__ NXSwappedDouble
|
|
NXConvertHostDoubleToSwapped(double x)
|
|
{
|
|
union dconv {
|
|
double number;
|
|
NXSwappedDouble sd;
|
|
} u;
|
|
u.number = x;
|
|
return u.sd;
|
|
}
|
|
|
|
static __inline__ double
|
|
NXConvertSwappedDoubleToHost(NXSwappedDouble x)
|
|
{
|
|
union dconv {
|
|
double number;
|
|
NXSwappedDouble sd;
|
|
} u;
|
|
u.sd = x;
|
|
return u.number;
|
|
}
|
|
|
|
static __inline__ NXSwappedFloat
|
|
NXSwapFloat(NXSwappedFloat x)
|
|
{
|
|
return (NXSwappedFloat)OSSwapInt32((uint32_t)x);
|
|
}
|
|
|
|
static __inline__ NXSwappedDouble
|
|
NXSwapDouble(NXSwappedDouble x)
|
|
{
|
|
return (NXSwappedDouble)OSSwapInt64((uint64_t)x);
|
|
}
|
|
|
|
/*
|
|
* Identify the byte order
|
|
* of the current host.
|
|
*/
|
|
|
|
enum NXByteOrder {
|
|
NX_UnknownByteOrder,
|
|
NX_LittleEndian,
|
|
NX_BigEndian
|
|
};
|
|
|
|
static __inline__
|
|
enum NXByteOrder
|
|
NXHostByteOrder(void)
|
|
{
|
|
#if defined(__LITTLE_ENDIAN__)
|
|
return NX_LittleEndian;
|
|
#elif defined(__BIG_ENDIAN__)
|
|
return NX_BigEndian;
|
|
#else
|
|
return NX_UnknownByteOrder;
|
|
#endif
|
|
}
|
|
|
|
static __inline__
|
|
unsigned short
|
|
NXSwapBigShortToHost(
|
|
unsigned short x
|
|
)
|
|
{
|
|
return (unsigned short)OSSwapBigToHostInt16((uint16_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned int
|
|
NXSwapBigIntToHost(
|
|
unsigned int x
|
|
)
|
|
{
|
|
return (unsigned int)OSSwapBigToHostInt32((uint32_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned long
|
|
NXSwapBigLongToHost(
|
|
unsigned long x
|
|
)
|
|
{
|
|
return (unsigned long)OSSwapBigToHostInt32((uint32_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned long long
|
|
NXSwapBigLongLongToHost(
|
|
unsigned long long x
|
|
)
|
|
{
|
|
return (unsigned long long)OSSwapBigToHostInt64((uint64_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
double
|
|
NXSwapBigDoubleToHost(
|
|
NXSwappedDouble x
|
|
)
|
|
{
|
|
return NXConvertSwappedDoubleToHost((NXSwappedDouble)OSSwapBigToHostInt64((uint64_t)x));
|
|
}
|
|
|
|
static __inline__
|
|
float
|
|
NXSwapBigFloatToHost(
|
|
NXSwappedFloat x
|
|
)
|
|
{
|
|
return NXConvertSwappedFloatToHost((NXSwappedFloat)OSSwapBigToHostInt32((uint32_t)x));
|
|
}
|
|
|
|
static __inline__
|
|
unsigned short
|
|
NXSwapHostShortToBig(
|
|
unsigned short x
|
|
)
|
|
{
|
|
return (unsigned short)OSSwapHostToBigInt16((uint16_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned int
|
|
NXSwapHostIntToBig(
|
|
unsigned int x
|
|
)
|
|
{
|
|
return (unsigned int)OSSwapHostToBigInt32((uint32_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned long
|
|
NXSwapHostLongToBig(
|
|
unsigned long x
|
|
)
|
|
{
|
|
return (unsigned long)OSSwapHostToBigInt32((uint32_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned long long
|
|
NXSwapHostLongLongToBig(
|
|
unsigned long long x
|
|
)
|
|
{
|
|
return (unsigned long long)OSSwapHostToBigInt64((uint64_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
NXSwappedDouble
|
|
NXSwapHostDoubleToBig(
|
|
double x
|
|
)
|
|
{
|
|
return (NXSwappedDouble)OSSwapHostToBigInt64((uint64_t)NXConvertHostDoubleToSwapped(x));
|
|
}
|
|
|
|
static __inline__
|
|
NXSwappedFloat
|
|
NXSwapHostFloatToBig(
|
|
float x
|
|
)
|
|
{
|
|
return (NXSwappedFloat)OSSwapHostToBigInt32((uint32_t)NXConvertHostFloatToSwapped(x));
|
|
}
|
|
|
|
static __inline__
|
|
unsigned short
|
|
NXSwapLittleShortToHost(
|
|
unsigned short x
|
|
)
|
|
{
|
|
return (unsigned short)OSSwapLittleToHostInt16((uint16_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned int
|
|
NXSwapLittleIntToHost(
|
|
unsigned int x
|
|
)
|
|
{
|
|
return (unsigned int)OSSwapLittleToHostInt32((uint32_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned long
|
|
NXSwapLittleLongToHost(
|
|
unsigned long x
|
|
)
|
|
{
|
|
return (unsigned long)OSSwapLittleToHostInt32((uint32_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned long long
|
|
NXSwapLittleLongLongToHost(
|
|
unsigned long long x
|
|
)
|
|
{
|
|
return (unsigned long long)OSSwapLittleToHostInt64((uint64_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
double
|
|
NXSwapLittleDoubleToHost(
|
|
NXSwappedDouble x
|
|
)
|
|
{
|
|
return NXConvertSwappedDoubleToHost((NXSwappedDouble)OSSwapLittleToHostInt64((uint64_t)x));
|
|
}
|
|
|
|
static __inline__
|
|
float
|
|
NXSwapLittleFloatToHost(
|
|
NXSwappedFloat x
|
|
)
|
|
{
|
|
return NXConvertSwappedFloatToHost((NXSwappedFloat)OSSwapLittleToHostInt32((uint32_t)x));
|
|
}
|
|
|
|
static __inline__
|
|
unsigned short
|
|
NXSwapHostShortToLittle(
|
|
unsigned short x
|
|
)
|
|
{
|
|
return (unsigned short)OSSwapHostToLittleInt16((uint16_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned int
|
|
NXSwapHostIntToLittle(
|
|
unsigned int x
|
|
)
|
|
{
|
|
return (unsigned int)OSSwapHostToLittleInt32((uint32_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned long
|
|
NXSwapHostLongToLittle(
|
|
unsigned long x
|
|
)
|
|
{
|
|
return (unsigned long)OSSwapHostToLittleInt32((uint32_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
unsigned long long
|
|
NXSwapHostLongLongToLittle(
|
|
unsigned long long x
|
|
)
|
|
{
|
|
return (unsigned long long)OSSwapHostToLittleInt64((uint64_t)x);
|
|
}
|
|
|
|
static __inline__
|
|
NXSwappedDouble
|
|
NXSwapHostDoubleToLittle(
|
|
double x
|
|
)
|
|
{
|
|
return (NXSwappedDouble)OSSwapHostToLittleInt64((uint64_t)NXConvertHostDoubleToSwapped(x));
|
|
}
|
|
|
|
static __inline__
|
|
NXSwappedFloat
|
|
NXSwapHostFloatToLittle(
|
|
float x
|
|
)
|
|
{
|
|
return (NXSwappedFloat)OSSwapHostToLittleInt32((uint32_t)NXConvertHostFloatToSwapped(x));
|
|
}
|
|
|
|
#endif /* _ARCHITECTURE_BYTE_ORDER_H_ */
|