This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
/
testplatform.c
213 lines (200 loc) · 5.2 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.
*/
13
14
static int
badsize(size_t sizeoftype, size_t hardcodetype)
15
16
17
18
{
return sizeoftype != hardcodetype;
}
19
20
int
TestTypes(SDL_bool verbose)
21
{
22
int error = 0;
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
if (badsize(sizeof(Uint8), 1)) {
if (verbose)
printf("sizeof(Uint8) != 1, instead = %ul\n", sizeof(Uint8));
++error;
}
if (badsize(sizeof(Uint16), 2)) {
if (verbose)
printf("sizeof(Uint16) != 2, instead = %ul\n", sizeof(Uint16));
++error;
}
if (badsize(sizeof(Uint32), 4)) {
if (verbose)
printf("sizeof(Uint32) != 4, instead = %ul\n", sizeof(Uint32));
++error;
}
39
#ifdef SDL_HAS_64BIT_TYPE
40
41
42
43
44
if (badsize(sizeof(Uint64), 8)) {
if (verbose)
printf("sizeof(Uint64) != 8, instead = %ul\n", sizeof(Uint64));
++error;
}
45
#else
46
47
48
if (verbose) {
printf("WARNING: No 64-bit datatype on this platform\n");
}
49
#endif
50
51
if (verbose && !error)
printf("All data types are the expected size.\n");
52
53
return (error ? 1 : 0);
54
55
}
56
57
int
TestEndian(SDL_bool verbose)
58
{
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
67
68
69
70
71
72
73
Uint64 value64, swapped64;
value64 = 0xEFBEADDE;
value64 <<= 32;
value64 |= 0xCDAB3412;
swapped64 = 0x1234ABCD;
swapped64 <<= 32;
swapped64 |= 0xDEADBEEF;
74
75
#endif
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
113
if (verbose) {
114
#ifdef _MSC_VER
115
116
printf("Value 64 = 0x%I64X, swapped = 0x%I64X\n", value64,
SDL_Swap64(value64));
117
#else
118
119
printf("Value 64 = 0x%llX, swapped = 0x%llX\n", value64,
SDL_Swap64(value64));
120
#endif
121
122
123
124
125
126
127
}
if (SDL_Swap64(value64) != swapped64) {
if (verbose) {
printf("64 bit value swapped incorrectly!\n");
}
++error;
}
128
#endif
129
return (error ? 1 : 0);
130
131
132
}
133
134
int
TestCPUInfo(SDL_bool verbose)
135
{
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);
148
149
}
150
151
int
main(int argc, char *argv[])
152
{
153
154
SDL_bool verbose = SDL_TRUE;
int status = 0;
155
156
157
158
159
160
if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) {
verbose = SDL_FALSE;
}
if (verbose) {
printf("This system is running %s\n",
161
#if __AIX__
162
"AIX"
163
#elif __BEOS__
164
"BeOS"
165
#elif __BSDI__
166
"BSDI"
167
#elif __DREAMCAST__
168
"Dreamcast"
169
#elif __FREEBSD__
170
"FreeBSD"
171
#elif __HPUX__
172
"HP-UX"
173
#elif __IRIX__
174
"Irix"
175
#elif __LINUX__
176
"Linux"
177
#elif __MINT__
178
"Atari MiNT"
179
#elif __MACOS__
180
"MacOS Classic"
181
#elif __MACOSX__
182
"Mac OS X"
183
#elif __NETBSD__
184
"NetBSD"
185
#elif __OPENBSD__
186
"OpenBSD"
187
#elif __OS2__
188
"OS/2"
189
#elif __OSF__
190
"OSF/1"
191
#elif __QNXNTO__
192
"QNX Neutrino"
193
#elif __RISCOS__
194
"RISC OS"
195
#elif __SOLARIS__
196
"Solaris"
197
198
#elif __WIN32__
#ifdef _WIN32_WCE
199
"Windows CE"
200
#else
201
"Windows"
202
203
#endif
#else
204
"an unknown operating system! (see SDL_platform.h)"
205
#endif
206
207
);
}
208
209
210
211
212
status += TestTypes(verbose);
status += TestEndian(verbose);
status += TestCPUInfo(verbose);
return status;
213
}