https://bugs.kde.org/show_bug.cgi?id=499183

--- Comment #2 from Paul Floyd <pjfl...@wanadoo.fr> ---
I think that I see the problem.

GEN_test_RandM(VMOVQ_XMM_to_XMM_LOW_LOW_HIGH,
               "vmovq %%xmm0, %%xmm7; vmovq %%xmm8, %%xmm0",
               "vmovq %%xmm0, (%%rsi); vmovq %%xmm9, %%xmm0")

I think that the intent here is to use xmm0 as a temporary to copy xmm7 to xmm8
and *rsi to xmm9. But the order of the registers is wrong.

For the 'reg' part
xmm0 (contiaing junk) gets copied to xmm7
xmm8 gets copied to xmm0 (and then not used in the output). The result is that
the top 48 bytes of the first line of the block contain (as expected) but the
bottom 16 bytes contain jumk.

Same sort of thing for the 'mem' part but this time because xmm0 got filled
with something from 'block' it's no longer random and the results are
deterministic.

This should fix it:
diff --git a/none/tests/amd64/avx-vmovq.c b/none/tests/amd64/avx-vmovq.c
index da8a1959b..3512aa53b 100644
--- a/none/tests/amd64/avx-vmovq.c
+++ b/none/tests/amd64/avx-vmovq.c
@@ -6,8 +6,8 @@ GEN_test_RandM(VMOVQ_XMM_to_XMM_LOW_HIGH,

 // xmm0 is scratch
 GEN_test_RandM(VMOVQ_XMM_to_XMM_LOW_LOW_HIGH,
-               "vmovq %%xmm0, %%xmm7; vmovq %%xmm8, %%xmm0",
-               "vmovq %%xmm0, (%%rsi); vmovq %%xmm9, %%xmm0")
+               "vmovq %%xmm7, %%xmm0; vmovq %%xmm0, %%xmm8",
+               "vmovq (%%rsi), %%xmm0; vmovq %%xmm0, %%xmm9")

 int main ( void )
 {

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to