Mercurial > sdl-ios-xcode
comparison src/cpuinfo/SDL_cpuinfo.c @ 1426:ef9a9064bff2
*** empty log message ***
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 24 Feb 2006 10:23:49 +0000 |
parents | d910939febfa |
children | e3242177fe4a |
comparison
equal
deleted
inserted
replaced
1425:aea151eb97b8 | 1426:ef9a9064bff2 |
---|---|
53 { | 53 { |
54 longjmp(jmpbuf, 1); | 54 longjmp(jmpbuf, 1); |
55 } | 55 } |
56 #endif /* HAVE_SETJMP */ | 56 #endif /* HAVE_SETJMP */ |
57 | 57 |
58 static __inline__ int CPU_haveCPUID() | 58 static __inline__ int CPU_haveCPUID(void) |
59 { | 59 { |
60 int has_CPUID = 0; | 60 int has_CPUID = 0; |
61 #if defined(__GNUC__) && defined(i386) | 61 #if defined(__GNUC__) && defined(i386) |
62 __asm__ ( | 62 __asm__ ( |
63 " pushfl # Get original EFLAGS \n" | 63 " pushfl # Get original EFLAGS \n" |
143 ); | 143 ); |
144 #endif | 144 #endif |
145 return has_CPUID; | 145 return has_CPUID; |
146 } | 146 } |
147 | 147 |
148 static __inline__ int CPU_getCPUIDFeatures() | 148 static __inline__ int CPU_getCPUIDFeatures(void) |
149 { | 149 { |
150 int features = 0; | 150 int features = 0; |
151 #if defined(__GNUC__) && ( defined(i386) || defined(__x86_64__) ) | 151 #if defined(__GNUC__) && ( defined(i386) || defined(__x86_64__) ) |
152 __asm__ ( | 152 __asm__ ( |
153 " movl %%ebx,%%edi\n" | 153 " movl %%ebx,%%edi\n" |
196 " movl %edi,%ebx\n" ); | 196 " movl %edi,%ebx\n" ); |
197 #endif | 197 #endif |
198 return features; | 198 return features; |
199 } | 199 } |
200 | 200 |
201 static __inline__ int CPU_getCPUIDFeaturesExt() | 201 static __inline__ int CPU_getCPUIDFeaturesExt(void) |
202 { | 202 { |
203 int features = 0; | 203 int features = 0; |
204 #if defined(__GNUC__) && (defined(i386) || defined (__x86_64__) ) | 204 #if defined(__GNUC__) && (defined(i386) || defined (__x86_64__) ) |
205 __asm__ ( | 205 __asm__ ( |
206 " movl %%ebx,%%edi\n" | 206 " movl %%ebx,%%edi\n" |
247 ); | 247 ); |
248 #endif | 248 #endif |
249 return features; | 249 return features; |
250 } | 250 } |
251 | 251 |
252 static __inline__ int CPU_haveRDTSC() | 252 static __inline__ int CPU_haveRDTSC(void) |
253 { | 253 { |
254 if ( CPU_haveCPUID() ) { | 254 if ( CPU_haveCPUID() ) { |
255 return (CPU_getCPUIDFeatures() & 0x00000010); | 255 return (CPU_getCPUIDFeatures() & 0x00000010); |
256 } | 256 } |
257 return 0; | 257 return 0; |
258 } | 258 } |
259 | 259 |
260 static __inline__ int CPU_haveMMX() | 260 static __inline__ int CPU_haveMMX(void) |
261 { | 261 { |
262 if ( CPU_haveCPUID() ) { | 262 if ( CPU_haveCPUID() ) { |
263 return (CPU_getCPUIDFeatures() & 0x00800000); | 263 return (CPU_getCPUIDFeatures() & 0x00800000); |
264 } | 264 } |
265 return 0; | 265 return 0; |
266 } | 266 } |
267 | 267 |
268 static __inline__ int CPU_haveMMXExt() | 268 static __inline__ int CPU_haveMMXExt(void) |
269 { | 269 { |
270 if ( CPU_haveCPUID() ) { | 270 if ( CPU_haveCPUID() ) { |
271 return (CPU_getCPUIDFeaturesExt() & 0x00400000); | 271 return (CPU_getCPUIDFeaturesExt() & 0x00400000); |
272 } | 272 } |
273 return 0; | 273 return 0; |
274 } | 274 } |
275 | 275 |
276 static __inline__ int CPU_have3DNow() | 276 static __inline__ int CPU_have3DNow(void) |
277 { | 277 { |
278 if ( CPU_haveCPUID() ) { | 278 if ( CPU_haveCPUID() ) { |
279 return (CPU_getCPUIDFeaturesExt() & 0x80000000); | 279 return (CPU_getCPUIDFeaturesExt() & 0x80000000); |
280 } | 280 } |
281 return 0; | 281 return 0; |
282 } | 282 } |
283 | 283 |
284 static __inline__ int CPU_have3DNowExt() | 284 static __inline__ int CPU_have3DNowExt(void) |
285 { | 285 { |
286 if ( CPU_haveCPUID() ) { | 286 if ( CPU_haveCPUID() ) { |
287 return (CPU_getCPUIDFeaturesExt() & 0x40000000); | 287 return (CPU_getCPUIDFeaturesExt() & 0x40000000); |
288 } | 288 } |
289 return 0; | 289 return 0; |
290 } | 290 } |
291 | 291 |
292 static __inline__ int CPU_haveSSE() | 292 static __inline__ int CPU_haveSSE(void) |
293 { | 293 { |
294 if ( CPU_haveCPUID() ) { | 294 if ( CPU_haveCPUID() ) { |
295 return (CPU_getCPUIDFeatures() & 0x02000000); | 295 return (CPU_getCPUIDFeatures() & 0x02000000); |
296 } | 296 } |
297 return 0; | 297 return 0; |
298 } | 298 } |
299 | 299 |
300 static __inline__ int CPU_haveSSE2() | 300 static __inline__ int CPU_haveSSE2(void) |
301 { | 301 { |
302 if ( CPU_haveCPUID() ) { | 302 if ( CPU_haveCPUID() ) { |
303 return (CPU_getCPUIDFeatures() & 0x04000000); | 303 return (CPU_getCPUIDFeatures() & 0x04000000); |
304 } | 304 } |
305 return 0; | 305 return 0; |
306 } | 306 } |
307 | 307 |
308 static __inline__ int CPU_haveAltiVec() | 308 static __inline__ int CPU_haveAltiVec(void) |
309 { | 309 { |
310 volatile int altivec = 0; | 310 volatile int altivec = 0; |
311 #ifdef __MACOSX__ | 311 #ifdef __MACOSX__ |
312 int selectors[2] = { CTL_HW, HW_VECTORUNIT }; | 312 int selectors[2] = { CTL_HW, HW_VECTORUNIT }; |
313 int hasVectorUnit = 0; | 313 int hasVectorUnit = 0; |
330 return altivec; | 330 return altivec; |
331 } | 331 } |
332 | 332 |
333 static Uint32 SDL_CPUFeatures = 0xFFFFFFFF; | 333 static Uint32 SDL_CPUFeatures = 0xFFFFFFFF; |
334 | 334 |
335 static Uint32 SDL_GetCPUFeatures() | 335 static Uint32 SDL_GetCPUFeatures(void) |
336 { | 336 { |
337 if ( SDL_CPUFeatures == 0xFFFFFFFF ) { | 337 if ( SDL_CPUFeatures == 0xFFFFFFFF ) { |
338 SDL_CPUFeatures = 0; | 338 SDL_CPUFeatures = 0; |
339 if ( CPU_haveRDTSC() ) { | 339 if ( CPU_haveRDTSC() ) { |
340 SDL_CPUFeatures |= CPU_HAS_RDTSC; | 340 SDL_CPUFeatures |= CPU_HAS_RDTSC; |
362 } | 362 } |
363 } | 363 } |
364 return SDL_CPUFeatures; | 364 return SDL_CPUFeatures; |
365 } | 365 } |
366 | 366 |
367 SDL_bool SDL_HasRDTSC() | 367 SDL_bool SDL_HasRDTSC(void) |
368 { | 368 { |
369 if ( SDL_GetCPUFeatures() & CPU_HAS_RDTSC ) { | 369 if ( SDL_GetCPUFeatures() & CPU_HAS_RDTSC ) { |
370 return SDL_TRUE; | 370 return SDL_TRUE; |
371 } | 371 } |
372 return SDL_FALSE; | 372 return SDL_FALSE; |
373 } | 373 } |
374 | 374 |
375 SDL_bool SDL_HasMMX() | 375 SDL_bool SDL_HasMMX(void) |
376 { | 376 { |
377 if ( SDL_GetCPUFeatures() & CPU_HAS_MMX ) { | 377 if ( SDL_GetCPUFeatures() & CPU_HAS_MMX ) { |
378 return SDL_TRUE; | 378 return SDL_TRUE; |
379 } | 379 } |
380 return SDL_FALSE; | 380 return SDL_FALSE; |
381 } | 381 } |
382 | 382 |
383 SDL_bool SDL_HasMMXExt() | 383 SDL_bool SDL_HasMMXExt(void) |
384 { | 384 { |
385 if ( SDL_GetCPUFeatures() & CPU_HAS_MMXEXT ) { | 385 if ( SDL_GetCPUFeatures() & CPU_HAS_MMXEXT ) { |
386 return SDL_TRUE; | 386 return SDL_TRUE; |
387 } | 387 } |
388 return SDL_FALSE; | 388 return SDL_FALSE; |
389 } | 389 } |
390 | 390 |
391 SDL_bool SDL_Has3DNow() | 391 SDL_bool SDL_Has3DNow(void) |
392 { | 392 { |
393 if ( SDL_GetCPUFeatures() & CPU_HAS_3DNOW ) { | 393 if ( SDL_GetCPUFeatures() & CPU_HAS_3DNOW ) { |
394 return SDL_TRUE; | 394 return SDL_TRUE; |
395 } | 395 } |
396 return SDL_FALSE; | 396 return SDL_FALSE; |
397 } | 397 } |
398 | 398 |
399 SDL_bool SDL_Has3DNowExt() | 399 SDL_bool SDL_Has3DNowExt(void) |
400 { | 400 { |
401 if ( SDL_GetCPUFeatures() & CPU_HAS_3DNOWEXT ) { | 401 if ( SDL_GetCPUFeatures() & CPU_HAS_3DNOWEXT ) { |
402 return SDL_TRUE; | 402 return SDL_TRUE; |
403 } | 403 } |
404 return SDL_FALSE; | 404 return SDL_FALSE; |
405 } | 405 } |
406 | 406 |
407 SDL_bool SDL_HasSSE() | 407 SDL_bool SDL_HasSSE(void) |
408 { | 408 { |
409 if ( SDL_GetCPUFeatures() & CPU_HAS_SSE ) { | 409 if ( SDL_GetCPUFeatures() & CPU_HAS_SSE ) { |
410 return SDL_TRUE; | 410 return SDL_TRUE; |
411 } | 411 } |
412 return SDL_FALSE; | 412 return SDL_FALSE; |
413 } | 413 } |
414 | 414 |
415 SDL_bool SDL_HasSSE2() | 415 SDL_bool SDL_HasSSE2(void) |
416 { | 416 { |
417 if ( SDL_GetCPUFeatures() & CPU_HAS_SSE2 ) { | 417 if ( SDL_GetCPUFeatures() & CPU_HAS_SSE2 ) { |
418 return SDL_TRUE; | 418 return SDL_TRUE; |
419 } | 419 } |
420 return SDL_FALSE; | 420 return SDL_FALSE; |
421 } | 421 } |
422 | 422 |
423 SDL_bool SDL_HasAltiVec() | 423 SDL_bool SDL_HasAltiVec(void) |
424 { | 424 { |
425 if ( SDL_GetCPUFeatures() & CPU_HAS_ALTIVEC ) { | 425 if ( SDL_GetCPUFeatures() & CPU_HAS_ALTIVEC ) { |
426 return SDL_TRUE; | 426 return SDL_TRUE; |
427 } | 427 } |
428 return SDL_FALSE; | 428 return SDL_FALSE; |