From 39b1e4a204932de24d62aab2b6d24c958cbd1c37 Mon Sep 17 00:00:00 2001 From: Vsevolod Livinskiy Date: Thu, 6 Nov 2014 13:34:22 +0400 Subject: [PATCH] masked_load/store_i16 was added --- examples/intrinsics/knc.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/examples/intrinsics/knc.h b/examples/intrinsics/knc.h index 7a4a282c..3bc86e6e 100644 --- a/examples/intrinsics/knc.h +++ b/examples/intrinsics/knc.h @@ -2020,13 +2020,30 @@ __scatter_base_offsets32_i8(uint8_t *b, uint32_t scale, __vec16_i32 offsets, _MM_HINT_NONE); } + +static FORCEINLINE void __masked_store_i16(void *p, const __vec16_i16 &val, __vec16_i1 mask) { + __vec16_i32 tmp = _mm512_extload_epi32(&val, _MM_UPCONV_EPI32_SINT16, _MM_BROADCAST32_NONE, _MM_HINT_NONE); + _mm512_mask_extstore_epi32(p, mask, tmp, _MM_DOWNCONV_EPI32_SINT16,_MM_HINT_NONE); +} + +static FORCEINLINE __vec16_i16 __masked_load_i16(void *p, __vec16_i1 mask) { + __vec16_i16 ret; + __vec16_i32 tmp = _mm512_mask_extload_epi32(_mm512_undefined_epi32(),mask,p, + _MM_UPCONV_EPI32_SINT16, + _MM_BROADCAST32_NONE, _MM_HINT_NONE); + _mm512_extstore_epi32(&ret, tmp, _MM_DOWNCONV_EPI32_SINT16,_MM_HINT_NONE); + return ret; +} + template static FORCEINLINE __vec16_i16 __load(const __vec16_i16 *p) { return *p; } + template static FORCEINLINE void __store(__vec16_i16 *p, __vec16_i16 v) { *p = v; } + static FORCEINLINE void __masked_store_i32(void *p, __vec16_i32 val, __vec16_i1 mask) { #ifdef ISPC_FORCE_ALIGNED_MEMORY _mm512_mask_store_epi32(p, mask, val.v);