@@ -1857,7 +1857,9 @@ pub unsafe fn _mm256_maskstore_epi64(mem_addr: *mut i64, mask: __m256i, a: __m25
18571857#[ cfg_attr( test, assert_instr( vpmaxsw) ) ]
18581858#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
18591859pub unsafe fn _mm256_max_epi16 ( a : __m256i , b : __m256i ) -> __m256i {
1860- transmute ( pmaxsw ( a. as_i16x16 ( ) , b. as_i16x16 ( ) ) )
1860+ let a = a. as_i16x16 ( ) ;
1861+ let b = b. as_i16x16 ( ) ;
1862+ transmute ( simd_select :: < i16x16 , _ > ( simd_gt ( a, b) , a, b) )
18611863}
18621864
18631865/// Compares packed 32-bit integers in `a` and `b`, and returns the packed
@@ -1869,7 +1871,9 @@ pub unsafe fn _mm256_max_epi16(a: __m256i, b: __m256i) -> __m256i {
18691871#[ cfg_attr( test, assert_instr( vpmaxsd) ) ]
18701872#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
18711873pub unsafe fn _mm256_max_epi32 ( a : __m256i , b : __m256i ) -> __m256i {
1872- transmute ( pmaxsd ( a. as_i32x8 ( ) , b. as_i32x8 ( ) ) )
1874+ let a = a. as_i32x8 ( ) ;
1875+ let b = b. as_i32x8 ( ) ;
1876+ transmute ( simd_select :: < i32x8 , _ > ( simd_gt ( a, b) , a, b) )
18731877}
18741878
18751879/// Compares packed 8-bit integers in `a` and `b`, and returns the packed
@@ -1881,7 +1885,9 @@ pub unsafe fn _mm256_max_epi32(a: __m256i, b: __m256i) -> __m256i {
18811885#[ cfg_attr( test, assert_instr( vpmaxsb) ) ]
18821886#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
18831887pub unsafe fn _mm256_max_epi8 ( a : __m256i , b : __m256i ) -> __m256i {
1884- transmute ( pmaxsb ( a. as_i8x32 ( ) , b. as_i8x32 ( ) ) )
1888+ let a = a. as_i8x32 ( ) ;
1889+ let b = b. as_i8x32 ( ) ;
1890+ transmute ( simd_select :: < i8x32 , _ > ( simd_gt ( a, b) , a, b) )
18851891}
18861892
18871893/// Compares packed unsigned 16-bit integers in `a` and `b`, and returns
@@ -1893,7 +1899,9 @@ pub unsafe fn _mm256_max_epi8(a: __m256i, b: __m256i) -> __m256i {
18931899#[ cfg_attr( test, assert_instr( vpmaxuw) ) ]
18941900#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
18951901pub unsafe fn _mm256_max_epu16 ( a : __m256i , b : __m256i ) -> __m256i {
1896- transmute ( pmaxuw ( a. as_u16x16 ( ) , b. as_u16x16 ( ) ) )
1902+ let a = a. as_u16x16 ( ) ;
1903+ let b = b. as_u16x16 ( ) ;
1904+ transmute ( simd_select :: < i16x16 , _ > ( simd_gt ( a, b) , a, b) )
18971905}
18981906
18991907/// Compares packed unsigned 32-bit integers in `a` and `b`, and returns
@@ -1905,7 +1913,9 @@ pub unsafe fn _mm256_max_epu16(a: __m256i, b: __m256i) -> __m256i {
19051913#[ cfg_attr( test, assert_instr( vpmaxud) ) ]
19061914#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
19071915pub unsafe fn _mm256_max_epu32 ( a : __m256i , b : __m256i ) -> __m256i {
1908- transmute ( pmaxud ( a. as_u32x8 ( ) , b. as_u32x8 ( ) ) )
1916+ let a = a. as_u32x8 ( ) ;
1917+ let b = b. as_u32x8 ( ) ;
1918+ transmute ( simd_select :: < i32x8 , _ > ( simd_gt ( a, b) , a, b) )
19091919}
19101920
19111921/// Compares packed unsigned 8-bit integers in `a` and `b`, and returns
@@ -1917,7 +1927,9 @@ pub unsafe fn _mm256_max_epu32(a: __m256i, b: __m256i) -> __m256i {
19171927#[ cfg_attr( test, assert_instr( vpmaxub) ) ]
19181928#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
19191929pub unsafe fn _mm256_max_epu8 ( a : __m256i , b : __m256i ) -> __m256i {
1920- transmute ( pmaxub ( a. as_u8x32 ( ) , b. as_u8x32 ( ) ) )
1930+ let a = a. as_u8x32 ( ) ;
1931+ let b = b. as_u8x32 ( ) ;
1932+ transmute ( simd_select :: < i8x32 , _ > ( simd_gt ( a, b) , a, b) )
19211933}
19221934
19231935/// Compares packed 16-bit integers in `a` and `b`, and returns the packed
@@ -1929,7 +1941,9 @@ pub unsafe fn _mm256_max_epu8(a: __m256i, b: __m256i) -> __m256i {
19291941#[ cfg_attr( test, assert_instr( vpminsw) ) ]
19301942#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
19311943pub unsafe fn _mm256_min_epi16 ( a : __m256i , b : __m256i ) -> __m256i {
1932- transmute ( pminsw ( a. as_i16x16 ( ) , b. as_i16x16 ( ) ) )
1944+ let a = a. as_i16x16 ( ) ;
1945+ let b = b. as_i16x16 ( ) ;
1946+ transmute ( simd_select :: < i16x16 , _ > ( simd_lt ( a, b) , a, b) )
19331947}
19341948
19351949/// Compares packed 32-bit integers in `a` and `b`, and returns the packed
@@ -1941,7 +1955,9 @@ pub unsafe fn _mm256_min_epi16(a: __m256i, b: __m256i) -> __m256i {
19411955#[ cfg_attr( test, assert_instr( vpminsd) ) ]
19421956#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
19431957pub unsafe fn _mm256_min_epi32 ( a : __m256i , b : __m256i ) -> __m256i {
1944- transmute ( pminsd ( a. as_i32x8 ( ) , b. as_i32x8 ( ) ) )
1958+ let a = a. as_i32x8 ( ) ;
1959+ let b = b. as_i32x8 ( ) ;
1960+ transmute ( simd_select :: < i32x8 , _ > ( simd_lt ( a, b) , a, b) )
19451961}
19461962
19471963/// Compares packed 8-bit integers in `a` and `b`, and returns the packed
@@ -1953,7 +1969,9 @@ pub unsafe fn _mm256_min_epi32(a: __m256i, b: __m256i) -> __m256i {
19531969#[ cfg_attr( test, assert_instr( vpminsb) ) ]
19541970#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
19551971pub unsafe fn _mm256_min_epi8 ( a : __m256i , b : __m256i ) -> __m256i {
1956- transmute ( pminsb ( a. as_i8x32 ( ) , b. as_i8x32 ( ) ) )
1972+ let a = a. as_i8x32 ( ) ;
1973+ let b = b. as_i8x32 ( ) ;
1974+ transmute ( simd_select :: < i8x32 , _ > ( simd_lt ( a, b) , a, b) )
19571975}
19581976
19591977/// Compares packed unsigned 16-bit integers in `a` and `b`, and returns
@@ -1965,7 +1983,9 @@ pub unsafe fn _mm256_min_epi8(a: __m256i, b: __m256i) -> __m256i {
19651983#[ cfg_attr( test, assert_instr( vpminuw) ) ]
19661984#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
19671985pub unsafe fn _mm256_min_epu16 ( a : __m256i , b : __m256i ) -> __m256i {
1968- transmute ( pminuw ( a. as_u16x16 ( ) , b. as_u16x16 ( ) ) )
1986+ let a = a. as_u16x16 ( ) ;
1987+ let b = b. as_u16x16 ( ) ;
1988+ transmute ( simd_select :: < i16x16 , _ > ( simd_lt ( a, b) , a, b) )
19691989}
19701990
19711991/// Compares packed unsigned 32-bit integers in `a` and `b`, and returns
@@ -1977,7 +1997,9 @@ pub unsafe fn _mm256_min_epu16(a: __m256i, b: __m256i) -> __m256i {
19771997#[ cfg_attr( test, assert_instr( vpminud) ) ]
19781998#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
19791999pub unsafe fn _mm256_min_epu32 ( a : __m256i , b : __m256i ) -> __m256i {
1980- transmute ( pminud ( a. as_u32x8 ( ) , b. as_u32x8 ( ) ) )
2000+ let a = a. as_u32x8 ( ) ;
2001+ let b = b. as_u32x8 ( ) ;
2002+ transmute ( simd_select :: < i32x8 , _ > ( simd_lt ( a, b) , a, b) )
19812003}
19822004
19832005/// Compares packed unsigned 8-bit integers in `a` and `b`, and returns
@@ -1989,7 +2011,9 @@ pub unsafe fn _mm256_min_epu32(a: __m256i, b: __m256i) -> __m256i {
19892011#[ cfg_attr( test, assert_instr( vpminub) ) ]
19902012#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
19912013pub unsafe fn _mm256_min_epu8 ( a : __m256i , b : __m256i ) -> __m256i {
1992- transmute ( pminub ( a. as_u8x32 ( ) , b. as_u8x32 ( ) ) )
2014+ let a = a. as_u8x32 ( ) ;
2015+ let b = b. as_u8x32 ( ) ;
2016+ transmute ( simd_select :: < i8x32 , _ > ( simd_lt ( a, b) , a, b) )
19932017}
19942018
19952019/// Creates mask from the most significant bit of each 8-bit element in `a`,
@@ -3620,30 +3644,6 @@ extern "C" {
36203644 fn maskstoreq ( mem_addr : * mut i8 , mask : i64x2 , a : i64x2 ) ;
36213645 #[ link_name = "llvm.x86.avx2.maskstore.q.256" ]
36223646 fn maskstoreq256 ( mem_addr : * mut i8 , mask : i64x4 , a : i64x4 ) ;
3623- #[ link_name = "llvm.x86.avx2.pmaxs.w" ]
3624- fn pmaxsw ( a : i16x16 , b : i16x16 ) -> i16x16 ;
3625- #[ link_name = "llvm.x86.avx2.pmaxs.d" ]
3626- fn pmaxsd ( a : i32x8 , b : i32x8 ) -> i32x8 ;
3627- #[ link_name = "llvm.x86.avx2.pmaxs.b" ]
3628- fn pmaxsb ( a : i8x32 , b : i8x32 ) -> i8x32 ;
3629- #[ link_name = "llvm.x86.avx2.pmaxu.w" ]
3630- fn pmaxuw ( a : u16x16 , b : u16x16 ) -> u16x16 ;
3631- #[ link_name = "llvm.x86.avx2.pmaxu.d" ]
3632- fn pmaxud ( a : u32x8 , b : u32x8 ) -> u32x8 ;
3633- #[ link_name = "llvm.x86.avx2.pmaxu.b" ]
3634- fn pmaxub ( a : u8x32 , b : u8x32 ) -> u8x32 ;
3635- #[ link_name = "llvm.x86.avx2.pmins.w" ]
3636- fn pminsw ( a : i16x16 , b : i16x16 ) -> i16x16 ;
3637- #[ link_name = "llvm.x86.avx2.pmins.d" ]
3638- fn pminsd ( a : i32x8 , b : i32x8 ) -> i32x8 ;
3639- #[ link_name = "llvm.x86.avx2.pmins.b" ]
3640- fn pminsb ( a : i8x32 , b : i8x32 ) -> i8x32 ;
3641- #[ link_name = "llvm.x86.avx2.pminu.w" ]
3642- fn pminuw ( a : u16x16 , b : u16x16 ) -> u16x16 ;
3643- #[ link_name = "llvm.x86.avx2.pminu.d" ]
3644- fn pminud ( a : u32x8 , b : u32x8 ) -> u32x8 ;
3645- #[ link_name = "llvm.x86.avx2.pminu.b" ]
3646- fn pminub ( a : u8x32 , b : u8x32 ) -> u8x32 ;
36473647 #[ link_name = "llvm.x86.avx2.mpsadbw" ]
36483648 fn mpsadbw ( a : u8x32 , b : u8x32 , imm8 : i32 ) -> u16x16 ;
36493649 #[ link_name = "llvm.x86.avx2.pmulhu.w" ]
0 commit comments