@@ -3743,14 +3743,9 @@ pub unsafe fn _mm256_xor_si256(a: __m256i, b: __m256i) -> __m256i {
37433743// This intrinsic has no corresponding instruction.
37443744#[ rustc_args_required_const( 1 ) ]
37453745#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
3746- pub unsafe fn _mm256_extract_epi8 ( a : __m256i , imm8 : i32 ) -> i32 {
3747- let a = a. as_u8x32 ( ) ;
3748- macro_rules! call {
3749- ( $imm5: expr) => {
3750- simd_extract:: <_, u8 >( a, $imm5) as i32
3751- } ;
3752- }
3753- constify_imm5 ! ( imm8, call)
3746+ pub unsafe fn _mm256_extract_epi8 ( a : __m256i , imm8 : i32 ) -> i8 {
3747+ let imm8 = ( imm8 & 31 ) as u32 ;
3748+ simd_extract ( a. as_i8x32 ( ) , imm8 as u32 )
37543749}
37553750
37563751/// Extracts a 16-bit integer from `a`, selected with `imm8`. Returns a 32-bit
@@ -3764,14 +3759,9 @@ pub unsafe fn _mm256_extract_epi8(a: __m256i, imm8: i32) -> i32 {
37643759// This intrinsic has no corresponding instruction.
37653760#[ rustc_args_required_const( 1 ) ]
37663761#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
3767- pub unsafe fn _mm256_extract_epi16 ( a : __m256i , imm8 : i32 ) -> i32 {
3768- let a = a. as_u16x16 ( ) ;
3769- macro_rules! call {
3770- ( $imm4: expr) => {
3771- simd_extract:: <_, u16 >( a, $imm4) as i32
3772- } ;
3773- }
3774- constify_imm4 ! ( ( imm8 & 15 ) , call)
3762+ pub unsafe fn _mm256_extract_epi16 ( a : __m256i , imm8 : i32 ) -> i16 {
3763+ let imm8 = ( imm8 & 15 ) as u32 ;
3764+ simd_extract ( a. as_i16x16 ( ) , imm8)
37753765}
37763766
37773767/// Extracts a 32-bit integer from `a`, selected with `imm8`.
@@ -6130,7 +6120,7 @@ mod tests {
61306120 ) ;
61316121 let r1 = _mm256_extract_epi8 ( a, 0 ) ;
61326122 let r2 = _mm256_extract_epi8 ( a, 35 ) ;
6133- assert_eq ! ( r1, 0xFF ) ;
6123+ assert_eq ! ( r1, - 1 ) ;
61346124 assert_eq ! ( r2, 3 ) ;
61356125 }
61366126
@@ -6143,7 +6133,7 @@ mod tests {
61436133 ) ;
61446134 let r1 = _mm256_extract_epi16 ( a, 0 ) ;
61456135 let r2 = _mm256_extract_epi16 ( a, 19 ) ;
6146- assert_eq ! ( r1, 0xFFFF ) ;
6136+ assert_eq ! ( r1, - 1 ) ;
61476137 assert_eq ! ( r2, 3 ) ;
61486138 }
61496139
0 commit comments