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 |