1*a58d3d2aSXin Li #include <stdio.h>
main()2*a58d3d2aSXin Li int main() {
3*a58d3d2aSXin Li unsigned int CPUInfo0;
4*a58d3d2aSXin Li unsigned int CPUInfo1;
5*a58d3d2aSXin Li unsigned int CPUInfo2;
6*a58d3d2aSXin Li unsigned int CPUInfo3;
7*a58d3d2aSXin Li unsigned int InfoType;
8*a58d3d2aSXin Li #if defined(__i386__) && defined(__PIC__)
9*a58d3d2aSXin Li /* %ebx is PIC register in 32-bit, so mustn't clobber it. */
10*a58d3d2aSXin Li __asm__ __volatile__ (
11*a58d3d2aSXin Li "xchg %%ebx, %1\n"
12*a58d3d2aSXin Li "cpuid\n"
13*a58d3d2aSXin Li "xchg %%ebx, %1\n":
14*a58d3d2aSXin Li "=a" (CPUInfo0),
15*a58d3d2aSXin Li "=r" (CPUInfo1),
16*a58d3d2aSXin Li "=c" (CPUInfo2),
17*a58d3d2aSXin Li "=d" (CPUInfo3) :
18*a58d3d2aSXin Li "0" (InfoType), "2" (0)
19*a58d3d2aSXin Li );
20*a58d3d2aSXin Li #else
21*a58d3d2aSXin Li __asm__ __volatile__ (
22*a58d3d2aSXin Li "cpuid":
23*a58d3d2aSXin Li "=a" (CPUInfo0),
24*a58d3d2aSXin Li "=b" (CPUInfo1),
25*a58d3d2aSXin Li "=c" (CPUInfo2),
26*a58d3d2aSXin Li "=d" (CPUInfo3) :
27*a58d3d2aSXin Li "0" (InfoType), "2" (0)
28*a58d3d2aSXin Li );
29*a58d3d2aSXin Li #endif
30*a58d3d2aSXin Li return 0;
31*a58d3d2aSXin Li }
32