static __inline__
unsigned short
NXSwapShort(
unsigned short inv
)
{
register unsigned short value = inv;
__asm__ volatile( "xchgb %h1, %b1" : "=q" (value) : "0" (value));
return (value);
}
static __inline__
unsigned long
NXSwapInt(
unsigned long inv
)
{
register unsigned int outv = inv;
__asm__ volatile( "bswap %0" : "=r" (outv) : "0" (outv));
return (outv);
}
static __inline__
unsigned long
NXSwapLong(
unsigned long inv
)
{
unsigned long outv;
__asm__ volatile(
"bswap %0"
: "=r" (outv)
: "0" (inv));
return (outv);
}
static __inline__
unsigned long long
NXSwapLongLong(
unsigned long long inv
)
{
union llconv {
unsigned long long ull;
unsigned long ul[2];
} *inp, outv;
inp = (union llconv *)&inv;
outv.ul[0] = NXSwapLong(inp->ul[1]);
outv.ul[1] = NXSwapLong(inp->ul[0]);
return (outv.ull);
}
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);
}