author | Markus Bröker <mbroeker@largo.dyndns.tv> |
Thu, 16 Apr 2009 12:49:11 +0200 | |
changeset 40 | be3f5582b839 |
parent 6 | c3dc3eb3b541 |
child 77 | 49e0babccb23 |
permissions | -rw-r--r-- |
6
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
1 |
/* |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
2 |
* cpuinfo.c |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
3 |
*/ |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
4 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
5 |
#include <cpuid.h> |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
6 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
7 |
char *get_cpu_brand (int function) |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
8 |
{ |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
9 |
ULONG brand[4]; |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
10 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
11 |
static char s[48]; |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
12 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
13 |
__asm__ ("cpuid":"=a" (brand[0]), "=b" (brand[1]), "=c" (brand[2]), "=d" (brand[3]) |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
14 |
: "a" (function) |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
15 |
); |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
16 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
17 |
memcpy (s, brand, sizeof (brand)); |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
18 |
return s; |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
19 |
} |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
20 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
21 |
char *get_cpu_vendor () |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
22 |
{ |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
23 |
ULONG vendor[3]; |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
24 |
static char s[15]; |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
25 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
26 |
*s = 0; |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
27 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
28 |
__asm__ ("cpuid":"=b" (vendor[0]), "=d" (vendor[1]), "=c" (vendor[2]) |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
29 |
: "a" (0) |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
30 |
); |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
31 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
32 |
memcpy (s, vendor, sizeof (vendor)); |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
33 |
return s; |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
34 |
} |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
35 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
36 |
ULONG get_cpu_function (ULONG function, ULONG * ax, ULONG * bx, ULONG * cx, ULONG * dx) |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
37 |
{ |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
38 |
__asm__ ("cpuid":"=a" (*ax), "=b" (*bx), "=c" (*cx), "=d" (*dx) |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
39 |
: "a" (function) |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
40 |
); |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
41 |
|
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
42 |
return (ULONG) (*ax); |
c3dc3eb3b541
a small libtool demo added to the demo distribution
Markus Bröker <mbroeker@largo.dyndns.tv>
parents:
diff
changeset
|
43 |
} |