|
@@ -54,12 +54,18 @@ int platform_testTypes(void *arg)
|
|
|
int platform_testEndianessAndSwap(void *arg)
|
|
|
{
|
|
|
int real_byteorder;
|
|
|
+ int real_floatwordorder = 0;
|
|
|
Uint16 value = 0x1234;
|
|
|
Uint16 value16 = 0xCDAB;
|
|
|
Uint16 swapped16 = 0xABCD;
|
|
|
Uint32 value32 = 0xEFBEADDE;
|
|
|
Uint32 swapped32 = 0xDEADBEEF;
|
|
|
|
|
|
+ union {
|
|
|
+ double d;
|
|
|
+ Uint32 ui32[2];
|
|
|
+ } value_double;
|
|
|
+
|
|
|
Uint64 value64, swapped64;
|
|
|
value64 = 0xEFBEADDE;
|
|
|
value64 <<= 32;
|
|
@@ -67,6 +73,7 @@ int platform_testEndianessAndSwap(void *arg)
|
|
|
swapped64 = 0x1234ABCD;
|
|
|
swapped64 <<= 32;
|
|
|
swapped64 |= 0xDEADBEEF;
|
|
|
+ value_double.d = 3.141593;
|
|
|
|
|
|
if ((*((char *) &value) >> 4) == 0x1) {
|
|
|
real_byteorder = SDL_BIG_ENDIAN;
|
|
@@ -80,6 +87,18 @@ int platform_testEndianessAndSwap(void *arg)
|
|
|
(SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big",
|
|
|
(real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big" );
|
|
|
|
|
|
+ if (value_double.ui32[0] == 0x82c2bd7f && value_double.ui32[1] == 0x400921fb) {
|
|
|
+ real_floatwordorder = SDL_LIL_ENDIAN;
|
|
|
+ } else if (value_double.ui32[0] == 0x400921fb && value_double.ui32[1] == 0x82c2bd7f) {
|
|
|
+ real_floatwordorder = SDL_BIG_ENDIAN;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Test endianness. */
|
|
|
+ SDLTest_AssertCheck( real_floatwordorder == SDL_FLOATWORDORDER,
|
|
|
+ "Machine detected as having %s endian float word order, appears to be %s endian.",
|
|
|
+ (SDL_FLOATWORDORDER == SDL_LIL_ENDIAN) ? "little" : "big",
|
|
|
+ (real_floatwordorder == SDL_LIL_ENDIAN) ? "little" : (real_floatwordorder == SDL_BIG_ENDIAN) ? "big" : "unknown" );
|
|
|
+
|
|
|
/* Test 16 swap. */
|
|
|
SDLTest_AssertCheck( SDL_Swap16(value16) == swapped16,
|
|
|
"SDL_Swap16(): 16 bit swapped: 0x%X => 0x%X",
|