mirror of
https://github.com/ioquake/ioq3.git
synced 2024-11-10 07:11:46 +00:00
* Fix to qvm compilation on big endian architectures
This commit is contained in:
parent
8f43965e13
commit
6dffd08e74
4 changed files with 24 additions and 104 deletions
8
Makefile
8
Makefile
|
@ -44,12 +44,12 @@ PLATFORM=$(COMPILE_PLATFORM)
|
||||||
endif
|
endif
|
||||||
export PLATFORM
|
export PLATFORM
|
||||||
|
|
||||||
ifndef ARCH
|
ifeq ($(COMPILE_ARCH),powerpc)
|
||||||
ARCH=$(COMPILE_ARCH)
|
COMPILE_ARCH=ppc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(ARCH),powerpc)
|
ifndef ARCH
|
||||||
ARCH=ppc
|
ARCH=$(COMPILE_ARCH)
|
||||||
endif
|
endif
|
||||||
export ARCH
|
export ARCH
|
||||||
|
|
||||||
|
|
|
@ -975,13 +975,7 @@ int ParseNum (const char *str)
|
||||||
============================================================================
|
============================================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef _SGI_SOURCE
|
short ShortSwap (short l)
|
||||||
#define __BIG_ENDIAN__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __BIG_ENDIAN__
|
|
||||||
|
|
||||||
short LittleShort (short l)
|
|
||||||
{
|
{
|
||||||
byte b1,b2;
|
byte b1,b2;
|
||||||
|
|
||||||
|
@ -991,13 +985,7 @@ short LittleShort (short l)
|
||||||
return (b1<<8) + b2;
|
return (b1<<8) + b2;
|
||||||
}
|
}
|
||||||
|
|
||||||
short BigShort (short l)
|
int LongSwap (int l)
|
||||||
{
|
|
||||||
return l;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int LittleLong (int l)
|
|
||||||
{
|
{
|
||||||
byte b1,b2,b3,b4;
|
byte b1,b2,b3,b4;
|
||||||
|
|
||||||
|
@ -1009,89 +997,20 @@ int LittleLong (int l)
|
||||||
return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4;
|
return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BigLong (int l)
|
typedef union {
|
||||||
{
|
float f;
|
||||||
return l;
|
unsigned int i;
|
||||||
}
|
} _FloatByteUnion;
|
||||||
|
|
||||||
|
float FloatSwap (const float *f) {
|
||||||
|
_FloatByteUnion out;
|
||||||
|
|
||||||
|
out.f = *f;
|
||||||
|
out.i = LongSwap(out.i);
|
||||||
|
|
||||||
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;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int BigLong (int l)
|
|
||||||
{
|
|
||||||
byte b1,b2,b3,b4;
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
//=======================================================
|
//=======================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -115,14 +115,6 @@ void ExtractFileExtension( const char *path, char *dest );
|
||||||
|
|
||||||
int ParseNum (const char *str);
|
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);
|
char *COM_Parse (char *data);
|
||||||
|
|
||||||
extern char com_token[1024];
|
extern char com_token[1024];
|
||||||
|
|
|
@ -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 "cmdlib.h"
|
||||||
#include "mathlib.h"
|
#include "mathlib.h"
|
||||||
#include "../../qcommon/qfiles.h"
|
#include "../../qcommon/qfiles.h"
|
||||||
|
@ -1356,6 +1357,7 @@ void WriteVmFile( void ) {
|
||||||
vmHeader_t header;
|
vmHeader_t header;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
int headerSize;
|
int headerSize;
|
||||||
|
int i;
|
||||||
|
|
||||||
report( "%i total errors\n", errorCount );
|
report( "%i total errors\n", errorCount );
|
||||||
|
|
||||||
|
@ -1400,6 +1402,13 @@ void WriteVmFile( void ) {
|
||||||
|
|
||||||
report( "Writing to %s\n", imageName );
|
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 );
|
CreatePath( imageName );
|
||||||
f = SafeOpenWrite( imageName );
|
f = SafeOpenWrite( imageName );
|
||||||
SafeWrite( f, &header, headerSize );
|
SafeWrite( f, &header, headerSize );
|
||||||
|
|
Loading…
Reference in a new issue