From 3f607ade1435e058899708bc4ef988b1117463de Mon Sep 17 00:00:00 2001 From: Anton Mitrokhin Date: Fri, 26 Dec 2014 01:12:14 +0300 Subject: [PATCH] add cast_sext plus shl/ashr function fix --- examples/intrinsics/knc.h | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/examples/intrinsics/knc.h b/examples/intrinsics/knc.h index d42c7dda..2c079959 100644 --- a/examples/intrinsics/knc.h +++ b/examples/intrinsics/knc.h @@ -963,8 +963,9 @@ static FORCEINLINE __vec16_i64 __shl(__vec16_i64 a, __vec16_i64 b) { } static FORCEINLINE __vec16_i64 __shl(__vec16_i64 a, unsigned long long b) { - __vec16_i32 hi = _mm512_or_epi32(_mm512_slli_epi32(a.v_hi, b), - _mm512_srli_epi32(a.v_lo, 32-b)); + __vec16_i32 hi; + if (b <= 32) hi = _mm512_or_epi32(_mm512_slli_epi32(a.v_hi, b), _mm512_srli_epi32(a.v_lo, 32-b)); + else hi = _mm512_slli_epi32(a.v_lo, b - 32); __vec16_i32 lo = _mm512_slli_epi32(a.v_lo, b); return __vec16_i64(lo, hi); } @@ -1006,10 +1007,9 @@ static FORCEINLINE __vec16_i64 __ashr(__vec16_i64 a, __vec16_i64 b) { } static FORCEINLINE __vec16_i64 __ashr(__vec16_i64 a, unsigned long long b) { - __vec16_i32 xfer - = _mm512_slli_epi32(_mm512_and_epi32(a.v_hi, - _mm512_set1_epi32((1<