From 7e39ed115de24c7c51bd80e82dbfaff9f65260d8 Mon Sep 17 00:00:00 2001 From: Vsevolod Livinskiy Date: Thu, 27 Nov 2014 14:46:51 +0400 Subject: [PATCH] Fix for shuffle2_double --- examples/intrinsics/knc.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/examples/intrinsics/knc.h b/examples/intrinsics/knc.h index 64d7b448..f1a5a136 100644 --- a/examples/intrinsics/knc.h +++ b/examples/intrinsics/knc.h @@ -1550,6 +1550,17 @@ static FORCEINLINE __vec16_d __broadcast_double(__vec16_d v, int index) { return ret; } +static FORCEINLINE __vec16_d __shuffle2_double(__vec16_d v0, __vec16_d v1, __vec16_i32 index) { + __vec16_d ret; + for (int i = 0; i < 16; ++i){ + if (__extract_element(index, i) < 16) + __insert_element(&ret, i, __extract_element(v0, __extract_element(index, i) & 0xF)); + else + __insert_element(&ret, i, __extract_element(v1, __extract_element(index, i) & 0xF)); + } + return ret; +} + template static FORCEINLINE __vec16_d __load(const __vec16_d *p) { __vec16_d ret; ret.v1 = _mm512_extloadunpacklo_pd(ret.v1, p, _MM_UPCONV_PD_NONE, _MM_HINT_NONE);