Subversion Repositories Kolibri OS

Rev

Rev 1905 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.         getcpucpuflags: get cpuflags for ia32
  3.  
  4.         copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1
  5.         see COPYING and AUTHORS files in distribution or http:#mpg123.org
  6.         initially written by KIMURA Takuhiro (for 3DNow!)
  7.         extended for general use by Thomas Orgis
  8. */
  9.  
  10. #ifndef MPG123_H_GETCPUFLAGS
  11. #define MPG123_H_GETCPUFLAGS
  12.  
  13. /* standard level flags part 1 (ECX)*/
  14. #define FLAG_SSE3      0x00000001
  15.  
  16. /* standard level flags part 2 (EDX) */
  17. #define FLAG2_MMX       0x00800000
  18. #define FLAG2_SSE       0x02000000
  19. #define FLAG2_SSE2      0x04000000
  20. #define FLAG2_FPU       0x00000001
  21. /* cpuid extended level 1 (AMD) */
  22. #define XFLAG_MMX      0x00800000
  23. #define XFLAG_3DNOW    0x80000000
  24. #define XFLAG_3DNOWEXT 0x40000000
  25.  
  26. struct cpuflags
  27. {
  28.         unsigned int id;
  29.         unsigned int std;
  30.         unsigned int std2;
  31.         unsigned int ext;
  32. };
  33.  
  34. unsigned int getcpuflags(struct cpuflags* cf);
  35.  
  36. /* checks the family */
  37. #define cpu_i586(s) ( ((s.id & 0xf00)>>8) == 0 || ((s.id & 0xf00)>>8) > 4 )
  38. /* checking some flags... */
  39. #define cpu_fpu(s) (FLAG2_FPU & s.std2)
  40. #define cpu_mmx(s) (FLAG2_MMX & s.std2 || XFLAG_MMX & s.ext)
  41. #define cpu_3dnow(s) (XFLAG_3DNOW & s.ext)
  42. #define cpu_3dnowext(s) (XFLAG_3DNOWEXT & s.ext)
  43. #define cpu_sse(s) (FLAG2_SSE & s.std2)
  44. #define cpu_sse2(s) (FLAG2_SSE2 & s.std2)
  45. #define cpu_sse3(s) (FLAG_SSE3 & s.std)
  46.  
  47. #endif
  48.