forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| x86 settings.
 | |
| """
 | |
| from __future__ import absolute_import
 | |
| from cdsl.settings import SettingGroup, BoolSetting, Preset
 | |
| from cdsl.predicates import And
 | |
| import base.settings as shared
 | |
| from .defs import ISA
 | |
| 
 | |
| ISA.settings = SettingGroup('x86', parent=shared.group)
 | |
| 
 | |
| # The has_* settings here correspond to CPUID bits.
 | |
| 
 | |
| # CPUID.01H:ECX
 | |
| has_sse3 = BoolSetting("SSE3: CPUID.01H:ECX.SSE3[bit 0]")
 | |
| has_ssse3 = BoolSetting("SSSE3: CPUID.01H:ECX.SSSE3[bit 9]")
 | |
| has_sse41 = BoolSetting("SSE4.1: CPUID.01H:ECX.SSE4_1[bit 19]")
 | |
| has_sse42 = BoolSetting("SSE4.2: CPUID.01H:ECX.SSE4_2[bit 20]")
 | |
| has_popcnt = BoolSetting("POPCNT: CPUID.01H:ECX.POPCNT[bit 23]")
 | |
| has_avx = BoolSetting("AVX: CPUID.01H:ECX.AVX[bit 28]")
 | |
| 
 | |
| # CPUID.(EAX=07H, ECX=0H):EBX
 | |
| has_bmi1 = BoolSetting("BMI1: CPUID.(EAX=07H, ECX=0H):EBX.BMI1[bit 3]")
 | |
| has_bmi2 = BoolSetting("BMI2: CPUID.(EAX=07H, ECX=0H):EBX.BMI2[bit 8]")
 | |
| 
 | |
| # CPUID.EAX=80000001H:ECX
 | |
| has_lzcnt = BoolSetting("LZCNT: CPUID.EAX=80000001H:ECX.LZCNT[bit 5]")
 | |
| 
 | |
| 
 | |
| # The use_* settings here are used to determine if a feature can be used.
 | |
| 
 | |
| use_sse41 = And(has_sse41)
 | |
| use_sse42 = And(has_sse42, use_sse41)
 | |
| use_popcnt = And(has_popcnt, has_sse42)
 | |
| use_bmi1 = And(has_bmi1)
 | |
| use_lzcnt = And(has_lzcnt)
 | |
| 
 | |
| # Presets corresponding to x86 CPUs.
 | |
| 
 | |
| baseline = Preset()
 | |
| 
 | |
| nehalem = Preset(
 | |
|         has_sse3, has_ssse3, has_sse41, has_sse42, has_popcnt)
 | |
| haswell = Preset(nehalem, has_bmi1, has_bmi2, has_lzcnt)
 | |
| broadwell = Preset(haswell)
 | |
| skylake = Preset(broadwell)
 | |
| cannonlake = Preset(skylake)
 | |
| icelake = Preset(cannonlake)
 | |
| 
 | |
| znver1 = Preset(
 | |
|         has_sse3, has_ssse3, has_sse41, has_sse42, has_popcnt,
 | |
|         has_bmi1, has_bmi2, has_lzcnt)
 | |
| 
 | |
| ISA.settings.close(globals())
 | 
