Source to EXTERNAL_HEADERS/architecture/ppc/byte_order.h
/*
* Copyright (c) 2000 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.
*
* This 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) 1996 NeXT Software, Inc.
*
* Byte ordering conversion (for ppc).
*
* HISTORY
*
* 29-Dec-96 Umesh Vaishampayan ([email protected])
* Ported from m98k.
*
* 8 October 1992 ? at NeXT
* Converted to NXxxx versions. Condensed history.
*
* 28 August 1992 Bruce Martin @NeXT
* Created.
*/
static __inline__
unsigned short
NXSwapShort(
unsigned short inv
)
{
union sconv {
unsigned short us;
unsigned char uc[2];
} *inp, outv;
inp = (union sconv *)&inv;
outv.uc[0] = inp->uc[1];
outv.uc[1] = inp->uc[0];
return (outv.us);
}
static __inline__
unsigned int
NXSwapInt(
unsigned int inv
)
{
union iconv {
unsigned int ui;
unsigned char uc[4];
} *inp, outv;
inp = (union iconv *)&inv;
outv.uc[0] = inp->uc[3];
outv.uc[1] = inp->uc[2];
outv.uc[2] = inp->uc[1];
outv.uc[3] = inp->uc[0];
return (outv.ui);
}
static __inline__
unsigned long
NXSwapLong(
unsigned long inv
)
{
union lconv {
unsigned long ul;
unsigned char uc[4];
} *inp, outv;
inp = (union lconv *)&inv;
outv.uc[0] = inp->uc[3];
outv.uc[1] = inp->uc[2];
outv.uc[2] = inp->uc[1];
outv.uc[3] = inp->uc[0];
return (outv.ul);
}
static __inline__
unsigned long long
NXSwapLongLong(
unsigned long long inv
)
{
union llconv {
unsigned long long ull;
unsigned char uc[8];
} *inp, outv;
inp = (union llconv *)&inv;
outv.uc[0] = inp->uc[7];
outv.uc[1] = inp->uc[6];
outv.uc[2] = inp->uc[5];
outv.uc[3] = inp->uc[4];
outv.uc[4] = inp->uc[3];
outv.uc[5] = inp->uc[2];
outv.uc[6] = inp->uc[1];
outv.uc[7] = inp->uc[0];
return (outv.ull);
}
#ifndef KERNEL
static __inline__ NXSwappedFloat
NXConvertHostFloatToSwapped(float x)
{
union fconv {
float number;
NXSwappedFloat sf;
};
return ((union fconv *)&x)->sf;
}
static __inline__ float
NXConvertSwappedFloatToHost(NXSwappedFloat x)
{
union fconv {
float number;
NXSwappedFloat sf;
};
return ((union fconv *)&x)->number;
}
static __inline__ NXSwappedDouble
NXConvertHostDoubleToSwapped(double x)
{
union dconv {
double number;
NXSwappedDouble sd;
};
return ((union dconv *)&x)->sd;
}
static __inline__ double
NXConvertSwappedDoubleToHost(NXSwappedDouble x)
{
union dconv {
double number;
NXSwappedDouble sd;
};
return ((union dconv *)&x)->number;
}
static __inline__ NXSwappedFloat
NXSwapFloat(NXSwappedFloat x)
{
return NXSwapLong(x);
}
static __inline__ NXSwappedDouble
NXSwapDouble(NXSwappedDouble x)
{
return NXSwapLongLong(x);
}
#endif /* ! KERNEL */