Lines 86-91
Link Here
|
86 |
"\n\txor %%esi, %%esi" // clear %%esi = result register |
86 |
"\n\txor %%esi, %%esi" // clear %%esi = result register |
87 |
// check if 'cpuid' instructions is available by toggling eflags bit 21 |
87 |
// check if 'cpuid' instructions is available by toggling eflags bit 21 |
88 |
|
88 |
|
|
|
89 |
"\n\tpushl %%ebx" |
89 |
"\n\tpushf" // save eflags to stack |
90 |
"\n\tpushf" // save eflags to stack |
90 |
"\n\tpop %%eax" // load eax from stack (with eflags) |
91 |
"\n\tpop %%eax" // load eax from stack (with eflags) |
91 |
"\n\tmovl %%eax, %%ecx" // save the original eflags values to ecx |
92 |
"\n\tmovl %%eax, %%ecx" // save the original eflags values to ecx |
Lines 130-140
Link Here
|
130 |
|
131 |
|
131 |
"\n\tend:" |
132 |
"\n\tend:" |
132 |
|
133 |
|
|
|
134 |
"\n\tpopl %%ebx" |
133 |
"\n\tmov %%esi, %0" |
135 |
"\n\tmov %%esi, %0" |
134 |
|
136 |
|
135 |
: "=rm" (res) |
137 |
: "=rm" (res) |
136 |
: /* no inputs */ |
138 |
: /* no inputs */ |
137 |
: "%edx", "%eax", "%ecx", "%ebx", "%esi" ); |
139 |
: "%edx", "%eax", "%ecx", "%esi" ); |
138 |
|
140 |
|
139 |
return res & ~_dwDisabledISA; |
141 |
return res & ~_dwDisabledISA; |
140 |
#endif |
142 |
#endif |