x86emul: work around gcc11 bug in SIMD tests
authorJan Beulich <jbeulich@suse.com>
Mon, 14 Feb 2022 09:08:17 +0000 (10:08 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 14 Feb 2022 09:08:17 +0000 (10:08 +0100)
Gcc11 looks to have trouble with conditional expressions used with
vector operands: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104497.
Replace two instances causing SEGV there in certain cases.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
tools/tests/x86_emulator/simd-sg.c
tools/tests/x86_emulator/simd.c

index 09228a4639d070c2019c1e5d5e0214fa656c15ec..36f2d63d492890aa744e26b05c06c1af32e932c2 100644 (file)
@@ -282,7 +282,7 @@ int sg_test(void)
 # if ELEM_SIZE == IDX_SIZE
     y = gather(x, array, idx, (idx & inv) != 0, ELEM_SIZE);
     for ( i = 0; i < ITEM_COUNT; ++i )
-        if ( y[i] != ((i + 1) & (ITEM_COUNT - i) ? idx : inv)[i] + 1 )
+        if ( y[i] != ((i + 1) & (ITEM_COUNT - i) ? idx[i] : inv[i]) + 1 )
             return __LINE__;
     for ( ; i < ELEM_COUNT; ++i )
         if ( y[i] )
index 995f4e36839e916e3ab6c45c4aa90932a1f70e3a..198f7b933e125d55a0bd56c646fdb467f8bec72c 100644 (file)
@@ -1727,8 +1727,8 @@ int simd_test(void)
     if ( !eq(x - src, (alt + 1) / 2) ) return __LINE__;
 #endif
 
-    for ( i = 0; i < ELEM_COUNT; ++i )
-        y[i] = (i & 1 ? inv : src)[i];
+    for ( y = src, i = 1; i < ELEM_COUNT; i += 2 )
+        y[i] = inv[i];
 
 #ifdef select
 # ifdef UINT_SIZE