DIP("j%s-32 0x%llx\n", name_AMD64Condcode(opc - 0x80), d64);
break;
-//.. /* =-=-=-=-=-=-=-=-=- RDTSC -=-=-=-=-=-=-=-=-=-=-= */
-//..
-//.. case 0x31: /* RDTSC */
-//.. if (0) vex_printf("vex x86->IR: kludged rdtsc\n");
-//.. putIReg(4, R_EAX, mkU32(0));
-//.. putIReg(4, R_EDX, mkU32(0));
-//..
+ /* =-=-=-=-=-=-=-=-=- RDTSC -=-=-=-=-=-=-=-=-=-=-= */
+
+ case 0x31: /* RDTSC */
+ if (1) vex_printf("vex amd64->IR: kludged rdtsc\n");
+ putIRegR( PFX_EMPTY, 4, R_RAX, mkU32(0));
+ putIRegR( PFX_EMPTY, 4, R_RDX, mkU32(0));
+
//.. //-- t1 = newTemp(cb);
//.. //-- t2 = newTemp(cb);
//.. //-- t3 = newTemp(cb);
//.. //-- uInstr1(cb, POP, 4, TempReg, t3);
//.. //-- uInstr2(cb, PUT, 4, TempReg, t3, ArchReg, R_EAX);
//.. //-- uInstr0(cb, CALLM_E, 0);
-//.. DIP("rdtsc\n");
-//.. break;
-//..
+ DIP("rdtsc\n");
+ break;
+
//.. /* =-=-=-=-=-=-=-=-=- PUSH/POP Sreg =-=-=-=-=-=-=-=-=-= */
//..
//.. case 0xA1: /* POP %FS */
i->Ain.Alu64R.dst);
goto done;
case Armi_Mem:
-vassert(0);
+ *p++ = rexAMode_M( i->Ain.Alu64R.dst,
+ i->Ain.Alu64R.src->Armi.Mem.am);
*p++ = opc;
p = doAMode_M(p, i->Ain.Alu64R.dst,
i->Ain.Alu64R.src->Armi.Mem.am);
aluOp = Aalu_SUB; break;
case Iop_And8: case Iop_And16: case Iop_And32: case Iop_And64:
aluOp = Aalu_AND; break;
-//.. case Iop_Or8: case Iop_Or16: case Iop_Or32:
-//.. aluOp = Xalu_OR; break;
+ case Iop_Or8: case Iop_Or16: case Iop_Or32: case Iop_Or64:
+ aluOp = Aalu_OR; break;
//.. case Iop_Xor8: case Iop_Xor16: case Iop_Xor32:
//.. aluOp = Xalu_XOR; break;
//.. case Iop_Mul16: case Iop_Mul32:
IRType tyd = typeOfIRExpr(env->type_env, stmt->Ist.STle.data);
vassert(tya == Ity_I64);
am = iselIntExpr_AMode(env, stmt->Ist.STle.addr);
-//.. if (tyd == Ity_I32) {
-//.. X86RI* ri = iselIntExpr_RI(env, stmt->Ist.STle.data);
-//.. addInstr(env, X86Instr_Alu32M(Xalu_MOV,ri,am));
-//.. return;
-//.. }
+ if (tyd == Ity_I64) {
+ AMD64RI* ri = iselIntExpr_RI(env, stmt->Ist.STle.data);
+ addInstr(env, AMD64Instr_Alu64M(Aalu_MOV,ri,am));
+ return;
+ }
if (tyd == Ity_I8 || tyd == Ity_I16 || tyd == Ity_I32) {
HReg r = iselIntExpr_R(env, stmt->Ist.STle.data);
addInstr(env, AMD64Instr_Store(tyd==Ity_I8 ? 1 : (tyd==Ity_I16 ? 2 : 4),