www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 12873] New: Valgrind unhandled instruction bytes 0x48 0xDB


          Issue ID: 12873
           Summary: Valgrind unhandled instruction bytes 0x48 0xDB
                    (redundant REX_W prefix on x87 load)
           Product: D
           Version: D1 & D2
          Hardware: x86_64
                OS: All
            Status: NEW
          Severity: major
          Priority: P1
         Component: DMD
          Assignee: yebblies gmail.com
          Reporter: yebblies gmail.com

This code, compiled with 2.066 master, fails to run under valgrind

module complex;

struct complex_t
    real re = 0;
    real im = 0;

    int opEquals(complex_t y) { return re == y.re && im == y.im; }

void main()
    auto x = complex_t(0);
    assert(x == x);

Gives (among other messages)

vex amd64->IR: unhandled instruction bytes: 0x48 0xDB 0x6B 0x70 0x48 0x83

This is a bug in valgrind, where it doesn't accept the redundant 0x48 (REX_W)
prefix on the fld instruction.

We can work around this by not emitting the REX_W prefix on this instruction.

Jun 06 2014