CpuArch.c (p7zip_15.14.1_src_all) | : | CpuArch.c (p7zip_16.02_src_all) | ||
---|---|---|---|---|
/* CpuArch.c -- CPU specific code | /* CpuArch.c -- CPU specific code | |||
2015-03-25: Igor Pavlov : Public domain */ | 2016-02-25: Igor Pavlov : Public domain */ | |||
#include "Precomp.h" | #include "Precomp.h" | |||
#include "CpuArch.h" | #include "CpuArch.h" | |||
#ifdef _7ZIP_ASM | #ifdef _7ZIP_ASM | |||
#ifdef MY_CPU_X86_OR_AMD64 | #ifdef MY_CPU_X86_OR_AMD64 | |||
#if (defined(_MSC_VER) && !defined(MY_CPU_AMD64)) || defined(__GNUC__) | #if (defined(_MSC_VER) && !defined(MY_CPU_AMD64)) || defined(__GNUC__) | |||
#define USE_ASM | #define USE_ASM | |||
skipping to change at line 49 | skipping to change at line 49 | |||
"movl %%EAX,%%EDX\n\t" | "movl %%EAX,%%EDX\n\t" | |||
"xorl %0,%%EAX\n\t" | "xorl %0,%%EAX\n\t" | |||
"push %%EAX\n\t" | "push %%EAX\n\t" | |||
"popf\n\t" | "popf\n\t" | |||
"pushf\n\t" | "pushf\n\t" | |||
"pop %%EAX\n\t" | "pop %%EAX\n\t" | |||
"xorl %%EDX,%%EAX\n\t" | "xorl %%EDX,%%EAX\n\t" | |||
"push %%EDX\n\t" | "push %%EDX\n\t" | |||
"popf\n\t" | "popf\n\t" | |||
"andl %%EAX, %0\n\t": | "andl %%EAX, %0\n\t": | |||
"=c" (flag) : "c" (flag)); | "=c" (flag) : "c" (flag) : | |||
"%eax", "%edx"); | ||||
#endif | #endif | |||
return flag; | return flag; | |||
} | } | |||
#define CHECK_CPUID_IS_SUPPORTED if (CheckFlag(1 << 18) == 0 || CheckFlag(1 << 2 1) == 0) return False; | #define CHECK_CPUID_IS_SUPPORTED if (CheckFlag(1 << 18) == 0 || CheckFlag(1 << 2 1) == 0) return False; | |||
#else | #else | |||
#define CHECK_CPUID_IS_SUPPORTED | #define CHECK_CPUID_IS_SUPPORTED | |||
#endif | #endif | |||
void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d) | void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d) | |||
{ | { | |||
skipping to change at line 83 | skipping to change at line 84 | |||
__asm mov d2, EDX; | __asm mov d2, EDX; | |||
*a = a2; | *a = a2; | |||
*b = b2; | *b = b2; | |||
*c = c2; | *c = c2; | |||
*d = d2; | *d = d2; | |||
#else | #else | |||
__asm__ __volatile__ ( | __asm__ __volatile__ ( | |||
#if defined(MY_CPU_X86) && defined(__PIC__) | #if defined(MY_CPU_AMD64) && defined(__PIC__) | |||
"mov %%rbx, %%rdi;" | ||||
"cpuid;" | ||||
"xchg %%rbx, %%rdi;" | ||||
: "=a" (*a) , | ||||
"=D" (*b) , | ||||
#elif defined(MY_CPU_X86) && defined(__PIC__) | ||||
"mov %%ebx, %%edi;" | "mov %%ebx, %%edi;" | |||
"cpuid;" | "cpuid;" | |||
"xchgl %%ebx, %%edi;" | "xchgl %%ebx, %%edi;" | |||
: "=a" (*a) , | : "=a" (*a) , | |||
"=D" (*b) , | "=D" (*b) , | |||
#else | #else | |||
"cpuid" | "cpuid" | |||
: "=a" (*a) , | : "=a" (*a) , | |||
"=b" (*b) , | "=b" (*b) , | |||
#endif | #endif | |||
End of changes. 3 change blocks. | ||||
3 lines changed or deleted | 10 lines changed or added |