Commit 77e1543c authored by Evan Nemerson's avatar Evan Nemerson

clmul: don't use __builtin_shufflevector on XLC

XL C/C++ supports __builtin_shufflevector, but only when using AltiVec
types, not on GCC-style vector extensions.  We could add alternate
implementations which use the same code but (for example) altivec_f32
instead of f32, but that introduces a lot of bloat into the code for
a compiler very few use *and* rewards IBM for a stupid decision which
breaks compatibility with *lots* of code.
parent 181dc616
......@@ -251,7 +251,7 @@ simde_mm256_clmulepi64_epi128 (simde__m256i a, simde__m256i b, const int imm8)
#else
simde__m128i_private a_lo_, b_lo_, r_lo_, a_hi_, b_hi_, r_hi_;
#if HEDLEY_HAS_BUILTIN(__builtin_shufflevector)
#if HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && !defined(HEDLEY_IBM_VERSION)
switch (imm8 & 0x01) {
case 0x00:
a_lo_.u64 = __builtin_shufflevector(a_.u64, a_.u64, 0, 2);
......@@ -286,7 +286,7 @@ simde_mm256_clmulepi64_epi128 (simde__m256i a, simde__m256i b, const int imm8)
r_hi_.u64[i] = simde_x_bitreverse_u64(r_hi_.u64[i]) >> 1;
}
#if HEDLEY_HAS_BUILTIN(__builtin_shufflevector)
#if HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && !defined(HEDLEY_IBM_VERSION)
r_.u64 = __builtin_shufflevector(r_lo_.u64, r_hi_.u64, 0, 2, 1, 3);
#elif defined(SIMDE_SHUFFLE_VECTOR_)
r_ = simde__m256i_to_private(simde_mm256_set_m128i(simde__m128i_from_private(r_hi_), simde__m128i_from_private(r_lo_)));
......@@ -379,7 +379,7 @@ simde_mm512_clmulepi64_epi128 (simde__m512i a, simde__m512i b, const int imm8)
r_hi_.u64[i] = simde_x_bitreverse_u64(r_hi_.u64[i]) >> 1;
}
#if HEDLEY_HAS_BUILTIN(__builtin_shufflevector)
#if HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && !defined(HEDLEY_IBM_VERSION)
r_.u64 = __builtin_shufflevector(r_lo_.u64, r_hi_.u64, 0, 4, 1, 5, 2, 6, 3, 7);
#else
r_.u64[0] = r_lo_.u64[0];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment