Add 64 bit AVX512f le and ge comparisons
This commit is contained in:
parent
f4cdbb3005
commit
e0d2a25d24
2 changed files with 156 additions and 0 deletions
|
|
@ -136,6 +136,48 @@ pub unsafe fn _mm512_mask_cmpgt_epu64_mask(m: __mmask8, a: __m512i, b: __m512i)
|
|||
_mm512_cmpgt_epu64_mask(a, b) & m
|
||||
}
|
||||
|
||||
/// Compare packed unsigned 64-bit integers in a and b for less-than, and store the results in a mask vector.
|
||||
///
|
||||
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=727,1063,4909,1062,1062&text=_mm512_cmple_epu64)
|
||||
#[inline]
|
||||
#[target_feature(enable = "avx512f")]
|
||||
#[cfg_attr(test, assert_instr(vpcmp))]
|
||||
pub unsafe fn _mm512_cmple_epu64_mask(a: __m512i, b: __m512i) -> __mmask8 {
|
||||
_mm512_cmpgt_epu64_mask(b, a)
|
||||
}
|
||||
|
||||
///Compare packed unsigned 64-bit integers in a and b for less-than, and store the results in a mask vector k
|
||||
/// using zeromask m (elements are zeroed out when the corresponding mask bit is not set).
|
||||
///
|
||||
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=727,1063,4909,1062,1062,1063&text=_mm512_mask_cmple_epu64)
|
||||
#[inline]
|
||||
#[target_feature(enable = "avx512f")]
|
||||
#[cfg_attr(test, assert_instr(vpcmp))]
|
||||
pub unsafe fn _mm512_mask_cmple_epu64_mask(m: __mmask8, a: __m512i, b: __m512i) -> __mmask8 {
|
||||
_mm512_cmpgt_epu64_mask(b, a) & m
|
||||
}
|
||||
|
||||
/// Compare packed unsigned 64-bit integers in a and b for less-than, and store the results in a mask vector.
|
||||
///
|
||||
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=727,1063,4909,1062,1062&text=_mm512_cmpge_epu64)
|
||||
#[inline]
|
||||
#[target_feature(enable = "avx512f")]
|
||||
#[cfg_attr(test, assert_instr(vpcmp))]
|
||||
pub unsafe fn _mm512_cmpge_epu64_mask(a: __m512i, b: __m512i) -> __mmask8 {
|
||||
_mm512_cmplt_epu64_mask(b, a)
|
||||
}
|
||||
|
||||
///Compare packed unsigned 64-bit integers in a and b for less-than, and store the results in a mask vector k
|
||||
/// using zeromask m (elements are zeroed out when the corresponding mask bit is not set).
|
||||
///
|
||||
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=727,1063,4909,1062,1062,1063&text=_mm512_mask_cmpge_epu64)
|
||||
#[inline]
|
||||
#[target_feature(enable = "avx512f")]
|
||||
#[cfg_attr(test, assert_instr(vpcmp))]
|
||||
pub unsafe fn _mm512_mask_cmpge_epu64_mask(m: __mmask8, a: __m512i, b: __m512i) -> __mmask8 {
|
||||
_mm512_cmplt_epu64_mask(b, a) & m
|
||||
}
|
||||
|
||||
/// Compare packed unsigned 64-bit integers in a and b for less-than, and store the results in a mask vector.
|
||||
///
|
||||
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=727,1063,4909,1062,1062&text=_mm512_cmpeq_epu64)
|
||||
|
|
@ -199,6 +241,48 @@ pub unsafe fn _mm512_mask_cmpgt_epi64_mask(m: __mmask8, a: __m512i, b: __m512i)
|
|||
_mm512_cmpgt_epi64_mask(a, b) & m
|
||||
}
|
||||
|
||||
/// Compare packed unsigned 64-bit integers in a and b for less-than, and store the results in a mask vector.
|
||||
///
|
||||
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=727,1063,4909,1062,1062&text=_mm512_cmple_epi64)
|
||||
#[inline]
|
||||
#[target_feature(enable = "avx512f")]
|
||||
#[cfg_attr(test, assert_instr(vpcmp))]
|
||||
pub unsafe fn _mm512_cmple_epi64_mask(a: __m512i, b: __m512i) -> __mmask8 {
|
||||
_mm512_cmpgt_epi64_mask(b, a)
|
||||
}
|
||||
|
||||
///Compare packed unsigned 64-bit integers in a and b for less-than, and store the results in a mask vector k
|
||||
/// using zeromask m (elements are zeroed out when the corresponding mask bit is not set).
|
||||
///
|
||||
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=727,1063,4909,1062,1062,1063&text=_mm512_mask_cmple_epi64)
|
||||
#[inline]
|
||||
#[target_feature(enable = "avx512f")]
|
||||
#[cfg_attr(test, assert_instr(vpcmp))]
|
||||
pub unsafe fn _mm512_mask_cmple_epi64_mask(m: __mmask8, a: __m512i, b: __m512i) -> __mmask8 {
|
||||
_mm512_cmpgt_epi64_mask(b, a) & m
|
||||
}
|
||||
|
||||
/// Compare packed unsigned 64-bit integers in a and b for less-than, and store the results in a mask vector.
|
||||
///
|
||||
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=727,1063,4909,1062,1062&text=_mm512_cmpge_epi64)
|
||||
#[inline]
|
||||
#[target_feature(enable = "avx512f")]
|
||||
#[cfg_attr(test, assert_instr(vpcmp))]
|
||||
pub unsafe fn _mm512_cmpge_epi64_mask(a: __m512i, b: __m512i) -> __mmask8 {
|
||||
_mm512_cmplt_epi64_mask(b, a)
|
||||
}
|
||||
|
||||
///Compare packed unsigned 64-bit integers in a and b for less-than, and store the results in a mask vector k
|
||||
/// using zeromask m (elements are zeroed out when the corresponding mask bit is not set).
|
||||
///
|
||||
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=727,1063,4909,1062,1062,1063&text=_mm512_mask_cmpge_epi64)
|
||||
#[inline]
|
||||
#[target_feature(enable = "avx512f")]
|
||||
#[cfg_attr(test, assert_instr(vpcmp))]
|
||||
pub unsafe fn _mm512_mask_cmpge_epi64_mask(m: __mmask8, a: __m512i, b: __m512i) -> __mmask8 {
|
||||
_mm512_cmplt_epi64_mask(b, a) & m
|
||||
}
|
||||
|
||||
/// Compare packed unsigned 64-bit integers in a and b for less-than, and store the results in a mask vector.
|
||||
///
|
||||
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=727,1063,4909,1062,1062&text=_mm512_cmpeq_epi64)
|
||||
|
|
|
|||
|
|
@ -83,6 +83,42 @@ mod tests {
|
|||
assert_eq!(r, 0b01001010);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "avx512f")]
|
||||
unsafe fn test_mm512_cmple_epu64_mask() {
|
||||
let a = _mm512_set_epi64(0, 1, -1, u64::MAX as i64, i64::MAX, i64::MIN, 100, -100);
|
||||
let b = _mm512_set1_epi64(-1);
|
||||
assert_eq!(_mm512_cmple_epu64_mask(a, b), _mm512_cmpgt_epu64_mask(b, a))
|
||||
}
|
||||
|
||||
#[simd_test(enable = "avx512f")]
|
||||
unsafe fn test_mm512_mask_cmple_epu64_mask() {
|
||||
let a = _mm512_set_epi64(0, 1, -1, u64::MAX as i64, i64::MAX, i64::MIN, 100, -100);
|
||||
let b = _mm512_set1_epi64(-1);
|
||||
let mask = 0b01111010;
|
||||
assert_eq!(
|
||||
_mm512_mask_cmple_epu64_mask(mask, a, b),
|
||||
_mm512_mask_cmpgt_epu64_mask(mask, b, a)
|
||||
);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "avx512f")]
|
||||
unsafe fn test_mm512_cmpge_epu64_mask() {
|
||||
let a = _mm512_set_epi64(0, 1, -1, u64::MAX as i64, i64::MAX, i64::MIN, 100, -100);
|
||||
let b = _mm512_set1_epi64(-1);
|
||||
assert_eq!(_mm512_cmpge_epu64_mask(a, b), _mm512_cmplt_epu64_mask(b, a))
|
||||
}
|
||||
|
||||
#[simd_test(enable = "avx512f")]
|
||||
unsafe fn test_mm512_mask_cmpge_epu64_mask() {
|
||||
let a = _mm512_set_epi64(0, 1, -1, u64::MAX as i64, i64::MAX, i64::MIN, 100, -100);
|
||||
let b = _mm512_set1_epi64(-1);
|
||||
let mask = 0b01111010;
|
||||
assert_eq!(
|
||||
_mm512_mask_cmpge_epu64_mask(mask, a, b),
|
||||
_mm512_mask_cmplt_epu64_mask(mask, b, a)
|
||||
);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "avx512f")]
|
||||
unsafe fn test_mm512_cmpeq_epu64_mask() {
|
||||
let a = _mm512_set_epi64(0, 1, -1, u64::MAX as i64, i64::MAX, i64::MIN, 100, -100);
|
||||
|
|
@ -134,6 +170,42 @@ mod tests {
|
|||
assert_eq!(r, 0b00000100);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "avx512f")]
|
||||
unsafe fn test_mm512_cmple_epi64_mask() {
|
||||
let a = _mm512_set_epi64(0, 1, -1, u64::MAX as i64, i64::MAX, i64::MIN, 100, -100);
|
||||
let b = _mm512_set1_epi64(-1);
|
||||
assert_eq!(_mm512_cmple_epi64_mask(a, b), _mm512_cmpgt_epi64_mask(b, a))
|
||||
}
|
||||
|
||||
#[simd_test(enable = "avx512f")]
|
||||
unsafe fn test_mm512_mask_cmple_epi64_mask() {
|
||||
let a = _mm512_set_epi64(0, 1, -1, u64::MAX as i64, i64::MAX, i64::MIN, 100, -100);
|
||||
let b = _mm512_set1_epi64(-1);
|
||||
let mask = 0b01111010;
|
||||
assert_eq!(
|
||||
_mm512_mask_cmple_epi64_mask(mask, a, b),
|
||||
_mm512_mask_cmpgt_epi64_mask(mask, b, a)
|
||||
);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "avx512f")]
|
||||
unsafe fn test_mm512_cmpge_epi64_mask() {
|
||||
let a = _mm512_set_epi64(0, 1, -1, u64::MAX as i64, i64::MAX, i64::MIN, 100, -100);
|
||||
let b = _mm512_set1_epi64(-1);
|
||||
assert_eq!(_mm512_cmpge_epi64_mask(a, b), _mm512_cmplt_epi64_mask(b, a))
|
||||
}
|
||||
|
||||
#[simd_test(enable = "avx512f")]
|
||||
unsafe fn test_mm512_mask_cmpge_epi64_mask() {
|
||||
let a = _mm512_set_epi64(0, 1, -1, u64::MAX as i64, i64::MAX, i64::MIN, 100, -100);
|
||||
let b = _mm512_set1_epi64(-1);
|
||||
let mask = 0b01111010;
|
||||
assert_eq!(
|
||||
_mm512_mask_cmpge_epi64_mask(mask, a, b),
|
||||
_mm512_mask_cmplt_epi64_mask(mask, b, a)
|
||||
);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "avx512f")]
|
||||
unsafe fn test_mm512_cmpeq_epi64_mask() {
|
||||
let a = _mm512_set_epi64(0, 1, -1, 13, i64::MAX, i64::MIN, 100, -100);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue