mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -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
|
||||
|
||||
static pa_cpu_x86_flag_t pa_cpu_x86_flags;
|
||||
|
||||
void pa_cpu_init_x86 (void) {
|
||||
#if defined (__i386__) || defined (__amd64__)
|
||||
uint32_t eax, ebx, ecx, edx;
|
||||
uint32_t level;
|
||||
pa_cpu_x86_flag_t flags = 0;
|
||||
|
||||
/* get standard level */
|
||||
get_cpuid (0x00000000, &level, &ebx, &ecx, &edx);
|
||||
|
|
@ -58,25 +57,25 @@ void pa_cpu_init_x86 (void) {
|
|||
get_cpuid (0x00000001, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
if (edx & (1<<23))
|
||||
pa_cpu_x86_flags |= PA_CPU_X86_MMX;
|
||||
flags |= PA_CPU_X86_MMX;
|
||||
|
||||
if (edx & (1<<25))
|
||||
pa_cpu_x86_flags |= PA_CPU_X86_SSE;
|
||||
flags |= PA_CPU_X86_SSE;
|
||||
|
||||
if (edx & (1<<26))
|
||||
pa_cpu_x86_flags |= PA_CPU_X86_SSE2;
|
||||
flags |= PA_CPU_X86_SSE2;
|
||||
|
||||
if (ecx & (1<<0))
|
||||
pa_cpu_x86_flags |= PA_CPU_X86_SSE3;
|
||||
flags |= PA_CPU_X86_SSE3;
|
||||
|
||||
if (ecx & (1<<9))
|
||||
pa_cpu_x86_flags |= PA_CPU_X86_SSSE3;
|
||||
flags |= PA_CPU_X86_SSSE3;
|
||||
|
||||
if (ecx & (1<<19))
|
||||
pa_cpu_x86_flags |= PA_CPU_X86_SSE4_1;
|
||||
flags |= PA_CPU_X86_SSE4_1;
|
||||
|
||||
if (ecx & (1<<20))
|
||||
pa_cpu_x86_flags |= PA_CPU_X86_SSE4_2;
|
||||
flags |= PA_CPU_X86_SSE4_2;
|
||||
}
|
||||
|
||||
/* get extended level */
|
||||
|
|
@ -85,38 +84,36 @@ void pa_cpu_init_x86 (void) {
|
|||
get_cpuid (0x80000001, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
if (edx & (1<<22))
|
||||
pa_cpu_x86_flags |= PA_CPU_X86_MMXEXT;
|
||||
flags |= PA_CPU_X86_MMXEXT;
|
||||
|
||||
if (edx & (1<<23))
|
||||
pa_cpu_x86_flags |= PA_CPU_X86_MMX;
|
||||
flags |= PA_CPU_X86_MMX;
|
||||
|
||||
if (edx & (1<<30))
|
||||
pa_cpu_x86_flags |= PA_CPU_X86_3DNOWEXT;
|
||||
flags |= PA_CPU_X86_3DNOWEXT;
|
||||
|
||||
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_cpu_x86_flags & PA_CPU_X86_MMX) ? "MMX " : "",
|
||||
(pa_cpu_x86_flags & PA_CPU_X86_SSE) ? "SSE " : "",
|
||||
(pa_cpu_x86_flags & PA_CPU_X86_SSE2) ? "SSE2 " : "",
|
||||
(pa_cpu_x86_flags & PA_CPU_X86_SSE3) ? "SSE3 " : "",
|
||||
(pa_cpu_x86_flags & PA_CPU_X86_SSSE3) ? "SSSE3 " : "",
|
||||
(pa_cpu_x86_flags & PA_CPU_X86_SSE4_1) ? "SSE4_1 " : "",
|
||||
(pa_cpu_x86_flags & PA_CPU_X86_SSE4_2) ? "SSE4_2 " : "",
|
||||
(pa_cpu_x86_flags & PA_CPU_X86_MMXEXT) ? "MMXEXT " : "",
|
||||
(pa_cpu_x86_flags & PA_CPU_X86_3DNOW) ? "3DNOW " : "",
|
||||
(pa_cpu_x86_flags & PA_CPU_X86_3DNOWEXT) ? "3DNOWEXT " : "");
|
||||
(flags & PA_CPU_X86_MMX) ? "MMX " : "",
|
||||
(flags & PA_CPU_X86_SSE) ? "SSE " : "",
|
||||
(flags & PA_CPU_X86_SSE2) ? "SSE2 " : "",
|
||||
(flags & PA_CPU_X86_SSE3) ? "SSE3 " : "",
|
||||
(flags & PA_CPU_X86_SSSE3) ? "SSSE3 " : "",
|
||||
(flags & PA_CPU_X86_SSE4_1) ? "SSE4_1 " : "",
|
||||
(flags & PA_CPU_X86_SSE4_2) ? "SSE4_2 " : "",
|
||||
(flags & PA_CPU_X86_MMXEXT) ? "MMXEXT " : "",
|
||||
(flags & PA_CPU_X86_3DNOW) ? "3DNOW " : "",
|
||||
(flags & PA_CPU_X86_3DNOWEXT) ? "3DNOWEXT " : "");
|
||||
|
||||
/* activate various optimisations */
|
||||
if (pa_cpu_x86_flags & PA_CPU_X86_MMX) {
|
||||
pa_volume_func_init_mmx (pa_cpu_x86_flags);
|
||||
if (flags & PA_CPU_X86_MMX) {
|
||||
pa_volume_func_init_mmx (flags);
|
||||
}
|
||||
if (pa_cpu_x86_flags & PA_CPU_X86_SSE) {
|
||||
pa_volume_func_init_sse (pa_cpu_x86_flags);
|
||||
if (flags & PA_CPU_X86_SSE) {
|
||||
pa_volume_func_init_sse (flags);
|
||||
}
|
||||
#else
|
||||
pa_cpu_x86_flags = 0;
|
||||
#endif
|
||||
#endif /* defined (__i386__) || defined (__amd64__) */
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue