From 6fb749991268c5ce6a8b7aa7c6fb1611e814e740 Mon Sep 17 00:00:00 2001 From: tma Date: Sat, 13 Oct 2007 12:03:47 +0000 Subject: * Fix to qvm compilation on big endian architectures git-svn-id: svn://svn.icculus.org/quake3/trunk@1197 edf5b092-35ff-0310-97b2-ce42778d08ea --- code/tools/asm/cmdlib.c | 101 +++++------------------------------------------- code/tools/asm/cmdlib.h | 8 ---- code/tools/asm/q3asm.c | 9 +++++ 3 files changed, 19 insertions(+), 99 deletions(-) (limited to 'code/tools') diff --git a/code/tools/asm/cmdlib.c b/code/tools/asm/cmdlib.c index 738c561..de2610d 100644 --- a/code/tools/asm/cmdlib.c +++ b/code/tools/asm/cmdlib.c @@ -975,13 +975,7 @@ int ParseNum (const char *str) ============================================================================ */ -#ifdef _SGI_SOURCE -#define __BIG_ENDIAN__ -#endif - -#ifdef __BIG_ENDIAN__ - -short LittleShort (short l) +short ShortSwap (short l) { byte b1,b2; @@ -991,13 +985,7 @@ short LittleShort (short l) return (b1<<8) + b2; } -short BigShort (short l) -{ - return l; -} - - -int LittleLong (int l) +int LongSwap (int l) { byte b1,b2,b3,b4; @@ -1009,89 +997,20 @@ int LittleLong (int l) return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; } -int BigLong (int l) -{ - return l; -} - - -float LittleFloat (float l) -{ - union {byte b[4]; float f;} in, out; - - in.f = l; - out.b[0] = in.b[3]; - out.b[1] = in.b[2]; - out.b[2] = in.b[1]; - out.b[3] = in.b[0]; - - return out.f; -} - -float BigFloat (float l) -{ - return l; -} - - -#else - - -short BigShort (short l) -{ - byte b1,b2; - - b1 = l&255; - b2 = (l>>8)&255; - - return (b1<<8) + b2; -} - -short LittleShort (short l) -{ - return l; -} +typedef union { + float f; + unsigned int i; +} _FloatByteUnion; +float FloatSwap (const float *f) { + _FloatByteUnion out; -int BigLong (int l) -{ - byte b1,b2,b3,b4; + out.f = *f; + out.i = LongSwap(out.i); - b1 = l&255; - b2 = (l>>8)&255; - b3 = (l>>16)&255; - b4 = (l>>24)&255; - - return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; -} - -int LittleLong (int l) -{ - return l; -} - -float BigFloat (float l) -{ - union {byte b[4]; float f;} in, out; - - in.f = l; - out.b[0] = in.b[3]; - out.b[1] = in.b[2]; - out.b[2] = in.b[1]; - out.b[3] = in.b[0]; - return out.f; } -float LittleFloat (float l) -{ - return l; -} - - -#endif - - //======================================================= diff --git a/code/tools/asm/cmdlib.h b/code/tools/asm/cmdlib.h index 57f642a..c2e6dd8 100644 --- a/code/tools/asm/cmdlib.h +++ b/code/tools/asm/cmdlib.h @@ -115,14 +115,6 @@ void ExtractFileExtension( const char *path, char *dest ); int ParseNum (const char *str); -short BigShort (short l); -short LittleShort (short l); -int BigLong (int l); -int LittleLong (int l); -float BigFloat (float l); -float LittleFloat (float l); - - char *COM_Parse (char *data); extern char com_token[1024]; diff --git a/code/tools/asm/q3asm.c b/code/tools/asm/q3asm.c index 93af582..8926699 100644 --- a/code/tools/asm/q3asm.c +++ b/code/tools/asm/q3asm.c @@ -20,6 +20,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ +#include "../../qcommon/q_platform.h" #include "cmdlib.h" #include "mathlib.h" #include "../../qcommon/qfiles.h" @@ -1356,6 +1357,7 @@ void WriteVmFile( void ) { vmHeader_t header; FILE *f; int headerSize; + int i; report( "%i total errors\n", errorCount ); @@ -1400,6 +1402,13 @@ void WriteVmFile( void ) { report( "Writing to %s\n", imageName ); +#ifdef Q3_BIG_ENDIAN + // byte swap the header + for ( i = 0 ; i < sizeof( vmHeader_t ) / 4 ; i++ ) { + ((int *)&header)[i] = LittleLong( ((int *)&header)[i] ); + } +#endif + CreatePath( imageName ); f = SafeOpenWrite( imageName ); SafeWrite( f, &header, headerSize ); -- cgit v1.2.3