Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
167 lines (154 loc) · 4.31 KB

testplatform.c

File metadata and controls

167 lines (154 loc) · 4.31 KB
 
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include "SDL.h"
#include "SDL_endian.h"
#include "SDL_cpuinfo.h"
/*
* Watcom C flags these as Warning 201: "Unreachable code" if you just
* compare them directly, so we push it through a function to keep the
* compiler quiet. --ryan.
*/
Jul 10, 2006
Jul 10, 2006
13
14
static int
badsize(size_t sizeoftype, size_t hardcodetype)
15
16
17
18
{
return sizeoftype != hardcodetype;
}
Jul 10, 2006
Jul 10, 2006
19
20
int
TestTypes(SDL_bool verbose)
Jul 10, 2006
Jul 10, 2006
22
int error = 0;
Jul 10, 2006
Jul 10, 2006
24
25
if (badsize(sizeof(Uint8), 1)) {
if (verbose)
Sep 26, 2009
Sep 26, 2009
26
printf("sizeof(Uint8) != 1, instead = %lu\n", sizeof(Uint8));
Jul 10, 2006
Jul 10, 2006
27
28
29
30
++error;
}
if (badsize(sizeof(Uint16), 2)) {
if (verbose)
Sep 26, 2009
Sep 26, 2009
31
printf("sizeof(Uint16) != 2, instead = %lu\n", sizeof(Uint16));
Jul 10, 2006
Jul 10, 2006
32
33
34
35
++error;
}
if (badsize(sizeof(Uint32), 4)) {
if (verbose)
Sep 26, 2009
Sep 26, 2009
36
printf("sizeof(Uint32) != 4, instead = %lu\n", sizeof(Uint32));
Jul 10, 2006
Jul 10, 2006
37
38
++error;
}
39
#ifdef SDL_HAS_64BIT_TYPE
Jul 10, 2006
Jul 10, 2006
40
41
if (badsize(sizeof(Uint64), 8)) {
if (verbose)
Sep 26, 2009
Sep 26, 2009
42
printf("sizeof(Uint64) != 8, instead = %lu\n", sizeof(Uint64));
Jul 10, 2006
Jul 10, 2006
43
44
++error;
}
Jul 10, 2006
Jul 10, 2006
46
47
48
if (verbose) {
printf("WARNING: No 64-bit datatype on this platform\n");
}
Jul 10, 2006
Jul 10, 2006
50
51
if (verbose && !error)
printf("All data types are the expected size.\n");
Jul 10, 2006
Jul 10, 2006
53
return (error ? 1 : 0);
Jul 10, 2006
Jul 10, 2006
56
57
int
TestEndian(SDL_bool verbose)
Jul 10, 2006
Jul 10, 2006
59
60
61
62
63
64
65
int error = 0;
Uint16 value = 0x1234;
int real_byteorder;
Uint16 value16 = 0xCDAB;
Uint16 swapped16 = 0xABCD;
Uint32 value32 = 0xEFBEADDE;
Uint32 swapped32 = 0xDEADBEEF;
66
#ifdef SDL_HAS_64BIT_TYPE
Jul 10, 2006
Jul 10, 2006
67
68
69
70
71
72
73
Uint64 value64, swapped64;
value64 = 0xEFBEADDE;
value64 <<= 32;
value64 |= 0xCDAB3412;
swapped64 = 0x1234ABCD;
swapped64 <<= 32;
swapped64 |= 0xDEADBEEF;
Jul 10, 2006
Jul 10, 2006
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
if (verbose) {
printf("Detected a %s endian machine.\n",
(SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big");
}
if ((*((char *) &value) >> 4) == 0x1) {
real_byteorder = SDL_BIG_ENDIAN;
} else {
real_byteorder = SDL_LIL_ENDIAN;
}
if (real_byteorder != SDL_BYTEORDER) {
if (verbose) {
printf("Actually a %s endian machine!\n",
(real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big");
}
++error;
}
if (verbose) {
printf("Value 16 = 0x%X, swapped = 0x%X\n", value16,
SDL_Swap16(value16));
}
if (SDL_Swap16(value16) != swapped16) {
if (verbose) {
printf("16 bit value swapped incorrectly!\n");
}
++error;
}
if (verbose) {
printf("Value 32 = 0x%X, swapped = 0x%X\n", value32,
SDL_Swap32(value32));
}
if (SDL_Swap32(value32) != swapped32) {
if (verbose) {
printf("32 bit value swapped incorrectly!\n");
}
++error;
}
112
#ifdef SDL_HAS_64BIT_TYPE
Jul 10, 2006
Jul 10, 2006
113
if (verbose) {
Mar 31, 2006
Mar 31, 2006
114
#ifdef _MSC_VER
Jul 10, 2006
Jul 10, 2006
115
116
printf("Value 64 = 0x%I64X, swapped = 0x%I64X\n", value64,
SDL_Swap64(value64));
Mar 31, 2006
Mar 31, 2006
117
#else
Jul 10, 2006
Jul 10, 2006
118
119
printf("Value 64 = 0x%llX, swapped = 0x%llX\n", value64,
SDL_Swap64(value64));
Mar 31, 2006
Mar 31, 2006
120
#endif
Jul 10, 2006
Jul 10, 2006
121
122
123
124
125
126
127
}
if (SDL_Swap64(value64) != swapped64) {
if (verbose) {
printf("64 bit value swapped incorrectly!\n");
}
++error;
}
Jul 10, 2006
Jul 10, 2006
129
return (error ? 1 : 0);
Jul 10, 2006
Jul 10, 2006
133
134
int
TestCPUInfo(SDL_bool verbose)
Jul 10, 2006
Jul 10, 2006
136
137
138
139
140
141
142
143
144
145
146
147
if (verbose) {
printf("RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected");
printf("MMX %s\n", SDL_HasMMX()? "detected" : "not detected");
printf("MMX Ext %s\n", SDL_HasMMXExt()? "detected" : "not detected");
printf("3DNow %s\n", SDL_Has3DNow()? "detected" : "not detected");
printf("3DNow Ext %s\n",
SDL_Has3DNowExt()? "detected" : "not detected");
printf("SSE %s\n", SDL_HasSSE()? "detected" : "not detected");
printf("SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected");
printf("AltiVec %s\n", SDL_HasAltiVec()? "detected" : "not detected");
}
return (0);
Jul 10, 2006
Jul 10, 2006
150
151
int
main(int argc, char *argv[])
Jul 10, 2006
Jul 10, 2006
153
154
SDL_bool verbose = SDL_TRUE;
int status = 0;
Jul 10, 2006
Jul 10, 2006
156
157
158
159
if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) {
verbose = SDL_FALSE;
}
if (verbose) {
Sep 26, 2009
Sep 26, 2009
160
printf("This system is running %s\n", SDL_GetPlatform());
Jul 10, 2006
Jul 10, 2006
161
}
Jul 10, 2006
Jul 10, 2006
163
164
165
166
status += TestTypes(verbose);
status += TestEndian(verbose);
status += TestCPUInfo(verbose);
return status;