e576bb | 2002-10-11 | Martin Nilsson | |
|
1b10db | 2002-10-08 | Martin Nilsson | |
|
aad99b | 2001-03-28 | Fredrik Hübinette (Hubbe) | | #include "global.h"
#include "pike_cpulib.h"
#include "svalue.h"
|
d6ea43 | 2010-10-17 | Martin Stjernholm | | #ifdef HAVE_X86_ASM
#if !defined (CL_X86_ASM_STYLE) && !defined (GCC_X86_ASM_STYLE)
#error Dont know how to inline assembler with this compiler
#endif
PMOD_EXPORT void x86_get_cpuid(int oper, INT32 *cpuid_ptr)
|
fb09e9 | 2015-09-28 | Martin Nilsson | | * edx -> cpuid_ptr[2]
* ecx -> cpuid_ptr[3] */
|
d6ea43 | 2010-10-17 | Martin Stjernholm | | {
#ifdef CL_X86_ASM_STYLE
|
e95ae2 | 2016-07-11 | Martin Nilsson | | __asm {
mov eax, oper;
mov edi, cpuid_ptr;
cpuid;
mov [edi], eax;
mov [edi+4], ebx;
mov [edi+8], edx;
mov [edi+12], ecx;
};
|
d6ea43 | 2010-10-17 | Martin Stjernholm | | #else /* GCC_X86_ASM_STYLE */
|
13bbbc | 2012-04-27 | Bill Welliver | |
|
945e9f | 2012-04-29 | Henrik Grubbström (Grubba) | | #if SIZEOF_CHAR_P == 4
|
e95ae2 | 2016-07-11 | Martin Nilsson | | __asm__ __volatile__("pushl %%ebx \n\t"
|
13bbbc | 2012-04-27 | Bill Welliver | | "cpuid \n\t"
"movl %%ebx, %1 \n\t"
"popl %%ebx \n\t"
|
13670c | 2015-05-25 | Martin Nilsson | | : "=a"(cpuid_ptr[0]),
"=r"(cpuid_ptr[1]),
|
fb09e9 | 2015-09-28 | Martin Nilsson | | "=d"(cpuid_ptr[2]),
"=c"(cpuid_ptr[3])
|
13bbbc | 2012-04-27 | Bill Welliver | | : "0"(oper)
: "cc");
|
945e9f | 2012-04-29 | Henrik Grubbström (Grubba) | | #else
|
e95ae2 | 2016-07-11 | Martin Nilsson | | __asm__ __volatile__("push %%rbx \n\t"
|
945e9f | 2012-04-29 | Henrik Grubbström (Grubba) | | "cpuid \n\t"
"movl %%ebx, %1 \n\t"
"pop %%rbx \n\t"
: "=a"(cpuid_ptr[0]),
"=r"(cpuid_ptr[1]),
|
fb09e9 | 2015-09-28 | Martin Nilsson | | "=d"(cpuid_ptr[2]),
"=c"(cpuid_ptr[3])
|
945e9f | 2012-04-29 | Henrik Grubbström (Grubba) | | : "0"(oper)
: "cc");
|
e95ae2 | 2016-07-11 | Martin Nilsson | | #endif /* SIZEOF_CHAR_P == 4 */
#endif /* CL_X86_ASM_STYLE */
|
d6ea43 | 2010-10-17 | Martin Stjernholm | | }
#endif /* HAVE_IA32_ASM */
|