Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
1905 serge 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