x86: keep the cpu flags local

This commit is contained in:
Wim Taymans 2009-08-19 19:50:42 +02:00
parent 370016c0e7
commit 078bde1b49

View file

@ -45,12 +45,11 @@ get_cpuid (uint32_t op, uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d)
} }
#endif #endif
static pa_cpu_x86_flag_t pa_cpu_x86_flags;
void pa_cpu_init_x86 (void) { void pa_cpu_init_x86 (void) {
#if defined (__i386__) || defined (__amd64__) #if defined (__i386__) || defined (__amd64__)
uint32_t eax, ebx, ecx, edx; uint32_t eax, ebx, ecx, edx;
uint32_t level; uint32_t level;
pa_cpu_x86_flag_t flags = 0;
/* get standard level */ /* get standard level */
get_cpuid (0x00000000, &level, &ebx, &ecx, &edx); get_cpuid (0x00000000, &level, &ebx, &ecx, &edx);
@ -58,25 +57,25 @@ void pa_cpu_init_x86 (void) {
get_cpuid (0x00000001, &eax, &ebx, &ecx, &edx); get_cpuid (0x00000001, &eax, &ebx, &ecx, &edx);
if (edx & (1<<23)) if (edx & (1<<23))
pa_cpu_x86_flags |= PA_CPU_X86_MMX; flags |= PA_CPU_X86_MMX;
if (edx & (1<<25)) if (edx & (1<<25))
pa_cpu_x86_flags |= PA_CPU_X86_SSE; flags |= PA_CPU_X86_SSE;
if (edx & (1<<26)) if (edx & (1<<26))
pa_cpu_x86_flags |= PA_CPU_X86_SSE2; flags |= PA_CPU_X86_SSE2;
if (ecx & (1<<0)) if (ecx & (1<<0))
pa_cpu_x86_flags |= PA_CPU_X86_SSE3; flags |= PA_CPU_X86_SSE3;
if (ecx & (1<<9)) if (ecx & (1<<9))
pa_cpu_x86_flags |= PA_CPU_X86_SSSE3; flags |= PA_CPU_X86_SSSE3;
if (ecx & (1<<19)) if (ecx & (1<<19))
pa_cpu_x86_flags |= PA_CPU_X86_SSE4_1; flags |= PA_CPU_X86_SSE4_1;
if (ecx & (1<<20)) if (ecx & (1<<20))
pa_cpu_x86_flags |= PA_CPU_X86_SSE4_2; flags |= PA_CPU_X86_SSE4_2;
} }
/* get extended level */ /* get extended level */
@ -85,38 +84,36 @@ void pa_cpu_init_x86 (void) {
get_cpuid (0x80000001, &eax, &ebx, &ecx, &edx); get_cpuid (0x80000001, &eax, &ebx, &ecx, &edx);
if (edx & (1<<22)) if (edx & (1<<22))
pa_cpu_x86_flags |= PA_CPU_X86_MMXEXT; flags |= PA_CPU_X86_MMXEXT;
if (edx & (1<<23)) if (edx & (1<<23))
pa_cpu_x86_flags |= PA_CPU_X86_MMX; flags |= PA_CPU_X86_MMX;
if (edx & (1<<30)) if (edx & (1<<30))
pa_cpu_x86_flags |= PA_CPU_X86_3DNOWEXT; flags |= PA_CPU_X86_3DNOWEXT;
if (edx & (1<<31)) if (edx & (1<<31))
pa_cpu_x86_flags |= PA_CPU_X86_3DNOW; flags |= PA_CPU_X86_3DNOW;
} }
pa_log_info ("CPU flags: %s%s%s%s%s%s%s%s%s%s", pa_log_info ("CPU flags: %s%s%s%s%s%s%s%s%s%s",
(pa_cpu_x86_flags & PA_CPU_X86_MMX) ? "MMX " : "", (flags & PA_CPU_X86_MMX) ? "MMX " : "",
(pa_cpu_x86_flags & PA_CPU_X86_SSE) ? "SSE " : "", (flags & PA_CPU_X86_SSE) ? "SSE " : "",
(pa_cpu_x86_flags & PA_CPU_X86_SSE2) ? "SSE2 " : "", (flags & PA_CPU_X86_SSE2) ? "SSE2 " : "",
(pa_cpu_x86_flags & PA_CPU_X86_SSE3) ? "SSE3 " : "", (flags & PA_CPU_X86_SSE3) ? "SSE3 " : "",
(pa_cpu_x86_flags & PA_CPU_X86_SSSE3) ? "SSSE3 " : "", (flags & PA_CPU_X86_SSSE3) ? "SSSE3 " : "",
(pa_cpu_x86_flags & PA_CPU_X86_SSE4_1) ? "SSE4_1 " : "", (flags & PA_CPU_X86_SSE4_1) ? "SSE4_1 " : "",
(pa_cpu_x86_flags & PA_CPU_X86_SSE4_2) ? "SSE4_2 " : "", (flags & PA_CPU_X86_SSE4_2) ? "SSE4_2 " : "",
(pa_cpu_x86_flags & PA_CPU_X86_MMXEXT) ? "MMXEXT " : "", (flags & PA_CPU_X86_MMXEXT) ? "MMXEXT " : "",
(pa_cpu_x86_flags & PA_CPU_X86_3DNOW) ? "3DNOW " : "", (flags & PA_CPU_X86_3DNOW) ? "3DNOW " : "",
(pa_cpu_x86_flags & PA_CPU_X86_3DNOWEXT) ? "3DNOWEXT " : ""); (flags & PA_CPU_X86_3DNOWEXT) ? "3DNOWEXT " : "");
/* activate various optimisations */ /* activate various optimisations */
if (pa_cpu_x86_flags & PA_CPU_X86_MMX) { if (flags & PA_CPU_X86_MMX) {
pa_volume_func_init_mmx (pa_cpu_x86_flags); pa_volume_func_init_mmx (flags);
} }
if (pa_cpu_x86_flags & PA_CPU_X86_SSE) { if (flags & PA_CPU_X86_SSE) {
pa_volume_func_init_sse (pa_cpu_x86_flags); pa_volume_func_init_sse (flags);
} }
#else #endif /* defined (__i386__) || defined (__amd64__) */
pa_cpu_x86_flags = 0;
#endif
} }