aboutsummaryrefslogtreecommitdiffstats
path: root/code/tools/asm
diff options
context:
space:
mode:
authortma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea>2007-10-13 12:03:47 +0000
committertma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea>2007-10-13 12:03:47 +0000
commit6fb749991268c5ce6a8b7aa7c6fb1611e814e740 (patch)
tree4825f827431857d0c132fc4b326f1402d7e37a27 /code/tools/asm
parent40f6961fff934d6a7422fe2333abb33436f7196b (diff)
downloadioquake3-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
Diffstat (limited to 'code/tools/asm')
-rw-r--r--code/tools/asm/cmdlib.c101
-rw-r--r--code/tools/asm/cmdlib.h8
-rw-r--r--code/tools/asm/q3asm.c9
3 files changed, 19 insertions, 99 deletions
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 );