switch (i->Xin.CMov32.src->tag) {
case Xrm_Reg:
+ /* Big sigh. This is movl E -> G ... */
*p++ = 0x89;
- p = doAMode_R(p, i->Xin.CMov32.dst,
- i->Xin.CMov32.src->Xrm.Reg.reg);
+ p = doAMode_R(p, i->Xin.CMov32.src->Xrm.Reg.reg,
+ i->Xin.CMov32.dst);
break;
case Xrm_Mem:
+ /* ... whereas this is movl G -> E. That's why the args
+ to doAMode_R appear to be the wrong way round in the
+ Xrm_Reg case. */
*p++ = 0x8B;
p = doAMode_M(p, i->Xin.CMov32.dst,
i->Xin.CMov32.src->Xrm.Mem.am);