diff --git a/examples/intrinsics/knc.h b/examples/intrinsics/knc.h index bbfe0a80..c775d29b 100644 --- a/examples/intrinsics/knc.h +++ b/examples/intrinsics/knc.h @@ -1385,6 +1385,10 @@ static FORCEINLINE __vec16_i1 __unordered_float(__vec16_f a, __vec16_f b) { return _mm512_cmpunord_ps_mask(a, b); } +static FORCEINLINE __vec16_i1 __unordered_float_and_mask(__vec16_f a, __vec16_f b, __vec16_i1 mask) { + return _mm512_mask_cmpunord_ps_mask(mask, a, b); +} + static FORCEINLINE __vec16_f __select(__vec16_i1 mask, __vec16_f a, __vec16_f b) { return _mm512_mask_mov_ps(b, mask, a); } @@ -1727,6 +1731,15 @@ static FORCEINLINE __vec16_i1 __unordered_double(__vec16_d a, __vec16_d b) { return _mm512_kmovlhb(ret1, ret2); } +static FORCEINLINE __vec16_i1 __unordered_double_and_mask(__vec16_d a, __vec16_d b, __vec16_i1 mask) { + __vec16_i1 ret1; + __vec16_i1 ret2; + __vec16_i1 tmp_m = mask; + ret1 = _mm512_mask_cmpunord_pd_mask(mask, a.v1, b.v1); + ret2 = _mm512_mask_cmpunord_pd_mask(_mm512_kswapb(tmp_m, tmp_m), a.v2, b.v2); + return _mm512_kmovlhb(ret1, ret2); +} + static FORCEINLINE __vec16_d __select(__vec16_i1 mask, __vec16_d a, __vec16_d b) { __vec16_d ret; __vec16_i1 tmp_m = mask;