From 7f00713a2574f3e700917d016fdfda960f137f29 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 12 Jun 2004 08:22:32 +0000 Subject: [PATCH] native endian functions --- stepmania/src/RageUtil.h | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/stepmania/src/RageUtil.h b/stepmania/src/RageUtil.h index 2efb7efa29..61c86ddacc 100644 --- a/stepmania/src/RageUtil.h +++ b/stepmania/src/RageUtil.h @@ -66,6 +66,53 @@ inline void wrap( float &x, float n) x = fmodf(x,n); } +/* + * We only have unsigned swaps; byte swapping a signed value doesn't make sense. + * + * Platform-specific, optimized versions are defined in arch_setup, with the names + * ArchSwap32, ArchSwap24, and ArchSwap16; we define them to their real names here, + * to force inclusion of this file when swaps are in use (to prevent different dependencies + * on different systems). + */ +#ifdef HAVE_BYTE_SWAPS +#define Swap32 ArchSwap32 +#define Swap24 ArchSwap24 +#define Swap16 ArchSwap16 +#else +inline uint32_t Swap32( uint32_t n ) +{ + return (n >> 24) | + ((n >> 8) & 0x0000FF00) | + ((n << 8) & 0x00FF0000) | + (n << 24); +} + +inline uint32_t Swap24( uint32_t n ) +{ + return Swap32(n) >> 8; // xx223344 -> 443322xx -> 00443322 +} + +inline uint16_t Swap16( uint16_t n ) +{ + return (n >> 8) | (n << 8); +} +#endif + +#if defined(ENDIAN_LITTLE) +inline uint32_t Swap32LE( uint32_t n ) { return n; } +inline uint32_t Swap24LE( uint32_t n ) { return n; } +inline uint32_t Swap16LE( uint16_t n ) { return n; } +inline uint32_t Swap32BE( uint32_t n ) { return Swap32( n ); } +inline uint32_t Swap24BE( uint32_t n ) { return Swap24( n ); } +inline uint16_t Swap16BE( uint16_t n ) { return Swap16( n ); } +#else +inline uint32_t Swap32BE( uint32_t n ) { return n; } +inline uint32_t Swap24BE( uint32_t n ) { return n; } +inline uint32_t Swap16BE( uint16_t n ) { return n; } +inline uint32_t Swap32LE( uint32_t n ) { return Swap32( n ); } +inline uint32_t Swap24LE( uint32_t n ) { return Swap24( n ); } +inline uint16_t Swap16BE( uint16_t n ) { return Swap16( n ); } +#endif // Fast random number generators // Taken from "Numerical Recipes in C"