@@ -12,6 +12,7 @@ pub(crate) fn codegen_cpuid_call<'tcx>(
1212) -> ( Value , Value , Value , Value ) {
1313 let leaf_0 = fx. bcx . create_block ( ) ;
1414 let leaf_1 = fx. bcx . create_block ( ) ;
15+ let leaf_7 = fx. bcx . create_block ( ) ;
1516 let leaf_8000_0000 = fx. bcx . create_block ( ) ;
1617 let leaf_8000_0001 = fx. bcx . create_block ( ) ;
1718 let unsupported_leaf = fx. bcx . create_block ( ) ;
@@ -25,6 +26,7 @@ pub(crate) fn codegen_cpuid_call<'tcx>(
2526 let mut switch = cranelift_frontend:: Switch :: new ( ) ;
2627 switch. set_entry ( 0 , leaf_0) ;
2728 switch. set_entry ( 1 , leaf_1) ;
29+ switch. set_entry ( 7 , leaf_7) ;
2830 switch. set_entry ( 0x8000_0000 , leaf_8000_0000) ;
2931 switch. set_entry ( 0x8000_0001 , leaf_8000_0001) ;
3032 switch. emit ( & mut fx. bcx , leaf, unsupported_leaf) ;
@@ -43,6 +45,11 @@ pub(crate) fn codegen_cpuid_call<'tcx>(
4345 let edx_features = fx. bcx . ins ( ) . iconst ( types:: I32 , 1 << 25 /* sse */ | 1 << 26 /* sse2 */ ) ;
4446 fx. bcx . ins ( ) . jump ( dest, & [ cpu_signature, additional_information, ecx_features, edx_features] ) ;
4547
48+ fx. bcx . switch_to_block ( leaf_7) ;
49+ // This leaf technically has subleaves, but we just return zero for all subleaves.
50+ let zero = fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ;
51+ fx. bcx . ins ( ) . jump ( dest, & [ zero, zero, zero, zero] ) ;
52+
4653 fx. bcx . switch_to_block ( leaf_8000_0000) ;
4754 let extended_max_basic_leaf = fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ;
4855 let zero = fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ;
0 commit comments