diff options
| author | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2007-10-13 12:03:47 +0000 | 
|---|---|---|
| committer | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2007-10-13 12:03:47 +0000 | 
| commit | 6fb749991268c5ce6a8b7aa7c6fb1611e814e740 (patch) | |
| tree | 4825f827431857d0c132fc4b326f1402d7e37a27 | |
| parent | 40f6961fff934d6a7422fe2333abb33436f7196b (diff) | |
| download | ioquake3-aero-6fb749991268c5ce6a8b7aa7c6fb1611e814e740.tar.gz ioquake3-aero-6fb749991268c5ce6a8b7aa7c6fb1611e814e740.zip  | |
* Fix to qvm compilation on big endian architectures
git-svn-id: svn://svn.icculus.org/quake3/trunk@1197 edf5b092-35ff-0310-97b2-ce42778d08ea
| -rw-r--r-- | Makefile | 8 | ||||
| -rw-r--r-- | code/tools/asm/cmdlib.c | 101 | ||||
| -rw-r--r-- | code/tools/asm/cmdlib.h | 8 | ||||
| -rw-r--r-- | code/tools/asm/q3asm.c | 9 | 
4 files changed, 23 insertions, 103 deletions
@@ -44,12 +44,12 @@ PLATFORM=$(COMPILE_PLATFORM)  endif  export PLATFORM -ifndef ARCH -ARCH=$(COMPILE_ARCH) +ifeq ($(COMPILE_ARCH),powerpc) +  COMPILE_ARCH=ppc  endif -ifeq ($(ARCH),powerpc) -  ARCH=ppc +ifndef ARCH +ARCH=$(COMPILE_ARCH)  endif  export ARCH 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 );  | 
