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.