mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -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