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<