This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
/
testplatform.c
168 lines (155 loc) · 4.36 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
if (badsize(sizeof(Uint8), 1)) {
if (verbose)
26
printf("sizeof(Uint8) != 1, instead = %lu\n", sizeof(Uint8));
27
28
29
30
++error;
}
if (badsize(sizeof(Uint16), 2)) {
if (verbose)
31
printf("sizeof(Uint16) != 2, instead = %lu\n", sizeof(Uint16));
32
33
34
35
++error;
}
if (badsize(sizeof(Uint32), 4)) {
if (verbose)
36
printf("sizeof(Uint32) != 4, instead = %lu\n", sizeof(Uint32));
37
38
++error;
}
39
#ifdef SDL_HAS_64BIT_TYPE
40
41
if (badsize(sizeof(Uint64), 8)) {
if (verbose)
42
printf("sizeof(Uint64) != 8, instead = %lu\n", sizeof(Uint64));
43
44
++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
if (verbose) {
137
printf("CPU count: %d\n", SDL_GetCPUCount());
138
139
140
141
142
143
144
145
146
147
148
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);
149
150
}
151
152
int
main(int argc, char *argv[])
153
{
154
155
SDL_bool verbose = SDL_TRUE;
int status = 0;
156
157
158
159
160
if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) {
verbose = SDL_FALSE;
}
if (verbose) {
161
printf("This system is running %s\n", SDL_GetPlatform());
162
}
163
164
165
166
167
status += TestTypes(verbose);
status += TestEndian(verbose);
status += TestCPUInfo(verbose);
return status;
168
}