about summary refs log tree commit diff
path: root/library/stdarch
diff options
context:
space:
mode:
Diffstat (limited to 'library/stdarch')
-rw-r--r--library/stdarch/crates/core_arch/src/x86/avx512bw.rs50
1 files changed, 24 insertions, 26 deletions
diff --git a/library/stdarch/crates/core_arch/src/x86/avx512bw.rs b/library/stdarch/crates/core_arch/src/x86/avx512bw.rs
index b8916cd43b4..85f17594c0f 100644
--- a/library/stdarch/crates/core_arch/src/x86/avx512bw.rs
+++ b/library/stdarch/crates/core_arch/src/x86/avx512bw.rs
@@ -1630,7 +1630,9 @@ pub unsafe fn _mm_maskz_mullo_epi16(k: __mmask8, a: __m128i, b: __m128i) -> __m1
 #[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
 #[cfg_attr(test, assert_instr(vpmaxuw))]
 pub unsafe fn _mm512_max_epu16(a: __m512i, b: __m512i) -> __m512i {
-    transmute(vpmaxuw(a.as_u16x32(), b.as_u16x32()))
+    let a = a.as_u16x32();
+    let b = b.as_u16x32();
+    transmute(simd_select::<i16x32, _>(simd_gt(a, b), a, b))
 }
 
 /// Compare packed unsigned 16-bit integers in a and b, and store packed maximum values in dst using writemask k (elements are copied from src when the corresponding mask bit is not set).
@@ -1716,7 +1718,9 @@ pub unsafe fn _mm_maskz_max_epu16(k: __mmask8, a: __m128i, b: __m128i) -> __m128
 #[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
 #[cfg_attr(test, assert_instr(vpmaxub))]
 pub unsafe fn _mm512_max_epu8(a: __m512i, b: __m512i) -> __m512i {
-    transmute(vpmaxub(a.as_u8x64(), b.as_u8x64()))
+    let a = a.as_u8x64();
+    let b = b.as_u8x64();
+    transmute(simd_select::<i8x64, _>(simd_gt(a, b), a, b))
 }
 
 /// Compare packed unsigned 8-bit integers in a and b, and store packed maximum values in dst using writemask k (elements are copied from src when the corresponding mask bit is not set).
@@ -1802,7 +1806,9 @@ pub unsafe fn _mm_maskz_max_epu8(k: __mmask16, a: __m128i, b: __m128i) -> __m128
 #[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
 #[cfg_attr(test, assert_instr(vpmaxsw))]
 pub unsafe fn _mm512_max_epi16(a: __m512i, b: __m512i) -> __m512i {
-    transmute(vpmaxsw(a.as_i16x32(), b.as_i16x32()))
+    let a = a.as_i16x32();
+    let b = b.as_i16x32();
+    transmute(simd_select::<i16x32, _>(simd_gt(a, b), a, b))
 }
 
 /// Compare packed signed 16-bit integers in a and b, and store packed maximum values in dst using writemask k (elements are copied from src when the corresponding mask bit is not set).
@@ -1888,7 +1894,9 @@ pub unsafe fn _mm_maskz_max_epi16(k: __mmask8, a: __m128i, b: __m128i) -> __m128
 #[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
 #[cfg_attr(test, assert_instr(vpmaxsb))]
 pub unsafe fn _mm512_max_epi8(a: __m512i, b: __m512i) -> __m512i {
-    transmute(vpmaxsb(a.as_i8x64(), b.as_i8x64()))
+    let a = a.as_i8x64();
+    let b = b.as_i8x64();
+    transmute(simd_select::<i8x64, _>(simd_gt(a, b), a, b))
 }
 
 /// Compare packed signed 8-bit integers in a and b, and store packed maximum values in dst using writemask k (elements are copied from src when the corresponding mask bit is not set).
@@ -1974,7 +1982,9 @@ pub unsafe fn _mm_maskz_max_epi8(k: __mmask16, a: __m128i, b: __m128i) -> __m128
 #[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
 #[cfg_attr(test, assert_instr(vpminuw))]
 pub unsafe fn _mm512_min_epu16(a: __m512i, b: __m512i) -> __m512i {
-    transmute(vpminuw(a.as_u16x32(), b.as_u16x32()))
+    let a = a.as_u16x32();
+    let b = b.as_u16x32();
+    transmute(simd_select::<i16x32, _>(simd_lt(a, b), a, b))
 }
 
 /// Compare packed unsigned 16-bit integers in a and b, and store packed minimum values in dst using writemask k (elements are copied from src when the corresponding mask bit is not set).
@@ -2060,7 +2070,9 @@ pub unsafe fn _mm_maskz_min_epu16(k: __mmask8, a: __m128i, b: __m128i) -> __m128
 #[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
 #[cfg_attr(test, assert_instr(vpminub))]
 pub unsafe fn _mm512_min_epu8(a: __m512i, b: __m512i) -> __m512i {
-    transmute(vpminub(a.as_u8x64(), b.as_u8x64()))
+    let a = a.as_u8x64();
+    let b = b.as_u8x64();
+    transmute(simd_select::<i8x64, _>(simd_lt(a, b), a, b))
 }
 
 /// Compare packed unsigned 8-bit integers in a and b, and store packed minimum values in dst using writemask k (elements are copied from src when the corresponding mask bit is not set).
@@ -2146,7 +2158,9 @@ pub unsafe fn _mm_maskz_min_epu8(k: __mmask16, a: __m128i, b: __m128i) -> __m128
 #[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
 #[cfg_attr(test, assert_instr(vpminsw))]
 pub unsafe fn _mm512_min_epi16(a: __m512i, b: __m512i) -> __m512i {
-    transmute(vpminsw(a.as_i16x32(), b.as_i16x32()))
+    let a = a.as_i16x32();
+    let b = b.as_i16x32();
+    transmute(simd_select::<i16x32, _>(simd_lt(a, b), a, b))
 }
 
 /// Compare packed signed 16-bit integers in a and b, and store packed minimum values in dst using writemask k (elements are copied from src when the corresponding mask bit is not set).
@@ -2232,7 +2246,9 @@ pub unsafe fn _mm_maskz_min_epi16(k: __mmask8, a: __m128i, b: __m128i) -> __m128
 #[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
 #[cfg_attr(test, assert_instr(vpminsb))]
 pub unsafe fn _mm512_min_epi8(a: __m512i, b: __m512i) -> __m512i {
-    transmute(vpminsb(a.as_i8x64(), b.as_i8x64()))
+    let a = a.as_i8x64();
+    let b = b.as_i8x64();
+    transmute(simd_select::<i8x64, _>(simd_lt(a, b), a, b))
 }
 
 /// Compare packed signed 8-bit integers in a and b, and store packed minimum values in dst using writemask k (elements are copied from src when the corresponding mask bit is not set).
@@ -10504,24 +10520,6 @@ extern "C" {
     #[link_name = "llvm.x86.avx512.mask.cmp.b.128"]
     fn vpcmpb128(a: i8x16, b: i8x16, op: i32, mask: u16) -> u16;
 
-    #[link_name = "llvm.x86.avx512.mask.pmaxu.w.512"]
-    fn vpmaxuw(a: u16x32, b: u16x32) -> u16x32;
-    #[link_name = "llvm.x86.avx512.mask.pmaxu.b.512"]
-    fn vpmaxub(a: u8x64, b: u8x64) -> u8x64;
-    #[link_name = "llvm.x86.avx512.mask.pmaxs.w.512"]
-    fn vpmaxsw(a: i16x32, b: i16x32) -> i16x32;
-    #[link_name = "llvm.x86.avx512.mask.pmaxs.b.512"]
-    fn vpmaxsb(a: i8x64, b: i8x64) -> i8x64;
-
-    #[link_name = "llvm.x86.avx512.mask.pminu.w.512"]
-    fn vpminuw(a: u16x32, b: u16x32) -> u16x32;
-    #[link_name = "llvm.x86.avx512.mask.pminu.b.512"]
-    fn vpminub(a: u8x64, b: u8x64) -> u8x64;
-    #[link_name = "llvm.x86.avx512.mask.pmins.w.512"]
-    fn vpminsw(a: i16x32, b: i16x32) -> i16x32;
-    #[link_name = "llvm.x86.avx512.mask.pmins.b.512"]
-    fn vpminsb(a: i8x64, b: i8x64) -> i8x64;
-
     #[link_name = "llvm.x86.avx512.pmaddw.d.512"]
     fn vpmaddwd(a: i16x32, b: i16x32) -> i32x16;
     #[link_name = "llvm.x86.avx512.pmaddubs.w.512"]