www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 21037] New: AVX code sometimes fails to set VEX prefix

https://issues.dlang.org/show_bug.cgi?id=21037

          Issue ID: 21037
           Summary: AVX code sometimes fails to set VEX prefix
           Product: D
           Version: D2
          Hardware: x86_64
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: bugzilla digitalmars.com

Suddenly this started failing in the test suite. The failing code is extracted
from runnable/testxmm.d:

------------------------------------
import core.simd;
import core.stdc.string;
import core.stdc.stdio;

version (D_AVX)
{
    void foo_byte32(byte t, byte s)
    {
        byte32 f = s;  (***)
        auto p = cast(byte*)&f;
        foreach (i; 0 .. 32)
        {
            printf("[%d]: %d\n", i, p[i]);
            assert(p[i] == s);
        }
    }

    void main()
    {
        foo_byte32(5, -10);
    }
}

The (***) is where the problem is, the MOVDQA instruction generated should be
VMOVDQA.

--
Jul 11 2020