Skip to content

Commit 48abcfb

Browse files
committed
x86/avx: Workaround for GCC ICE on loongarch64
This works around two similar instances of ICE of GCC 14: test/x86/avx512/range.cpp: In function ‘int test_simde_mm256_maskz_range_ps()’: test/x86/avx512/range.cpp:702:1: error: unrecognizable insn: 702 | } | ^ (insn 191 190 192 2 (set (reg:V8SF 446 [ r_$f32_514 ]) (vec_merge:V8SF (vec_duplicate:V8SF (const_double:SF 0.0 [0x0.0p+0])) (reg:V8SF 446 [ r_$f32_514 ]) (const_int 1 [0x1]))) "../test/x86/avx512/../../../simde/x86/avx.h":1041:17 -1 (nil)) [...] The similar workaround is already present in simde_mm256_set_ps. Link: https://gcc.gnu.org/pipermail/gcc-patches/2026-January/706166.html Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117575
1 parent cd7cdf4 commit 48abcfb

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

simde/x86/avx.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,15 +1028,15 @@ simde_mm256_set_ps (simde_float32 e7, simde_float32 e6, simde_float32 e5, simde_
10281028
simde_float32 e3, simde_float32 e2, simde_float32 e1, simde_float32 e0) {
10291029
#if defined(SIMDE_X86_AVX_NATIVE)
10301030
return _mm256_set_ps(e7, e6, e5, e4, e3, e2, e1, e0);
1031+
#elif defined(SIMDE_ARCH_LOONGARCH)
1032+
simde__m256 tmp_ = { e0, e1, e2, e3, e4, e5, e6, e7 };
1033+
return tmp_;
10311034
#else
10321035
simde__m256_private r_;
10331036

10341037
#if SIMDE_NATURAL_VECTOR_SIZE_LE(128)
10351038
r_.m128[0] = simde_mm_set_ps(e3, e2, e1, e0);
10361039
r_.m128[1] = simde_mm_set_ps(e7, e6, e5, e4);
1037-
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
1038-
SIMDE_ALIGN_LIKE_32(__m256) simde_float32 data[8] = { e0, e1, e2, e3, e4, e5, e6, e7 };
1039-
r_.i256 = __lasx_xvld(data, 0);
10401040
#else
10411041
r_.f32[0] = e0;
10421042
r_.f32[1] = e1;
@@ -1062,6 +1062,9 @@ simde__m256d
10621062
simde_mm256_set_pd (simde_float64 e3, simde_float64 e2, simde_float64 e1, simde_float64 e0) {
10631063
#if defined(SIMDE_X86_AVX_NATIVE)
10641064
return _mm256_set_pd(e3, e2, e1, e0);
1065+
#elif defined(SIMDE_ARCH_LOONGARCH)
1066+
simde__m256d tmp_ = { e0, e1, e2, e3 };
1067+
return tmp_;
10651068
#else
10661069
simde__m256d_private r_;
10671070

0 commit comments

Comments
 (0)