@@ -121,7 +121,29 @@ impl IntrinsicTypeDefinition for X86IntrinsicType {
121
121
122
122
/// Determines the get lane function for this type.
123
123
fn get_lane_function ( & self ) -> String {
124
- todo ! ( "get_lane_function for X86IntrinsicType needs to be implemented!" ) ;
124
+ let total_vector_bits: Option < u32 > = self
125
+ . vec_len
126
+ . zip ( self . bit_len )
127
+ . and_then ( |( vec_len, bit_len) | Some ( vec_len * bit_len) ) ;
128
+
129
+ match ( self . bit_len , total_vector_bits) {
130
+ ( Some ( 8 ) , Some ( 128 ) ) => String :: from ( "_mm_extract_epi8" ) ,
131
+ ( Some ( 16 ) , Some ( 128 ) ) => String :: from ( "_mm_extract_epi16" ) ,
132
+ ( Some ( 32 ) , Some ( 128 ) ) => String :: from ( "_mm_extract_epi32" ) ,
133
+ ( Some ( 64 ) , Some ( 128 ) ) => String :: from ( "_mm_extract_epi64" ) ,
134
+ ( Some ( 8 ) , Some ( 256 ) ) => String :: from ( "_mm256_extract_epi8" ) ,
135
+ ( Some ( 16 ) , Some ( 256 ) ) => String :: from ( "_mm256_extract_epi16" ) ,
136
+ ( Some ( 32 ) , Some ( 256 ) ) => String :: from ( "_mm256_extract_epi32" ) ,
137
+ ( Some ( 64 ) , Some ( 256 ) ) => String :: from ( "_mm256_extract_epi64" ) ,
138
+ ( Some ( 8 ) , Some ( 512 ) ) => String :: from ( "_mm512_extract_intrinsic_test_epi8" ) ,
139
+ ( Some ( 16 ) , Some ( 512 ) ) => String :: from ( "_mm512_extract_intrinsic_test_epi16" ) ,
140
+ ( Some ( 32 ) , Some ( 512 ) ) => String :: from ( "_mm512_extract_intrinsic_test_epi32" ) ,
141
+ ( Some ( 64 ) , Some ( 512 ) ) => String :: from ( "_mm512_extract_intrinsic_test_epi64" ) ,
142
+ _ => unreachable ! (
143
+ "invalid length for vector argument: {:?}, {:?}" ,
144
+ self . bit_len, self . vec_len
145
+ ) ,
146
+ }
125
147
}
126
148
}
127
149
0 commit comments