mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-12-19 08:57:00 -05:00
x86: keep the cpu flags local
This commit is contained in:
parent
370016c0e7
commit
078bde1b49
1 changed files with 27 additions and 30 deletions
|
|
@ -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
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue