likely will generate an exception. So we have to take a side
exit at this point if the condition is false. */
if (condT != IRTemp_INVALID) {
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 01\n");
mk_skip_over_A32_if_cond_is_false( condT );
condT = IRTemp_INVALID;
}
likely will generate an exception. So we have to take a side
exit at this point if the condition is false. */
if (condT != IRTemp_INVALID) {
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 02\n");
mk_skip_over_A32_if_cond_is_false( condT );
condT = IRTemp_INVALID;
}
likely will generate an exception. So we have to take a side
exit at this point if the condition is false. */
if (condT != IRTemp_INVALID) {
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 03\n");
mk_skip_over_A32_if_cond_is_false( condT );
condT = IRTemp_INVALID;
}
UInt rM = INSN0(8,6);
UInt isLD = INSN0(11,11);
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 04\n");
mk_skip_over_T16_if_cond_is_false(condT);
condT = IRTemp_INVALID;
// now uncond
UInt rM = INSN0(8,6);
UInt isLD = INSN0(11,11);
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 05\n");
mk_skip_over_T16_if_cond_is_false(condT);
condT = IRTemp_INVALID;
// now uncond
UInt rN = INSN0(5,3);
UInt rM = INSN0(8,6);
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 06\n");
mk_skip_over_T16_if_cond_is_false(condT);
condT = IRTemp_INVALID;
// now uncond
UInt rN = INSN0(5,3);
UInt rM = INSN0(8,6);
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 07\n");
mk_skip_over_T16_if_cond_is_false(condT);
condT = IRTemp_INVALID;
// now uncond
UInt rM = INSN0(8,6);
UInt isLD = INSN0(11,11);
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 08\n");
mk_skip_over_T16_if_cond_is_false(condT);
condT = IRTemp_INVALID;
// now uncond
UInt imm8 = INSN0(7,0);
IRTemp ea = newTemp(Ity_I32);
- mk_skip_over_T16_if_cond_is_false(condT);
- condT = IRTemp_INVALID;
- // now uncond
-
assign(ea, binop(Iop_Add32,
binop(Iop_And32, getIRegT(15), mkU32(~3U)),
mkU32(imm8 * 4)));
put_ITSTATE(old_itstate); // backout
- putIRegT(rD, loadLE(Ity_I32, mkexpr(ea)),
- IRTemp_INVALID);
+ IRTemp tD = newTemp(Ity_I32);
+ loadGuardedLE( tD, ILGop_Ident32, mkexpr(ea), getIRegT(rD), condT );
+ putIRegT(rD, mkexpr(tD), IRTemp_INVALID);
put_ITSTATE(new_itstate); // restore
DIP("ldr r%u, [pc, #%u]\n", rD, imm8 * 4);
UInt imm5 = INSN0(10,6);
UInt isLD = INSN0(11,11);
- mk_skip_over_T16_if_cond_is_false(condT);
- condT = IRTemp_INVALID;
- // now uncond
-
IRExpr* ea = binop(Iop_Add32, getIRegT(rN), mkU32(imm5 * 4));
put_ITSTATE(old_itstate); // backout
if (isLD) {
- putIRegT(rD, loadLE(Ity_I32, ea), IRTemp_INVALID);
+ IRTemp tD = newTemp(Ity_I32);
+ loadGuardedLE( tD, ILGop_Ident32, ea, getIRegT(rD), condT );
+ putIRegT(rD, mkexpr(tD), IRTemp_INVALID);
} else {
- storeLE( ea, getIRegT(rD) );
+ storeGuardedLE( ea, getIRegT(rD), condT );
}
put_ITSTATE(new_itstate); // restore
UInt imm5 = INSN0(10,6);
UInt isLD = INSN0(11,11);
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 11\n");
mk_skip_over_T16_if_cond_is_false(condT);
condT = IRTemp_INVALID;
// now uncond
UInt imm5 = INSN0(10,6);
UInt isLD = INSN0(11,11);
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 12\n");
mk_skip_over_T16_if_cond_is_false(condT);
condT = IRTemp_INVALID;
// now uncond
UInt imm8 = INSN0(7,0);
UInt isLD = INSN0(11,11);
- mk_skip_over_T16_if_cond_is_false(condT);
- condT = IRTemp_INVALID;
- // now uncond
-
IRExpr* ea = binop(Iop_Add32, getIRegT(13), mkU32(imm8 * 4));
put_ITSTATE(old_itstate); // backout
if (isLD) {
- putIRegT(rD, loadLE(Ity_I32, ea), IRTemp_INVALID);
+ IRTemp tD = newTemp(Ity_I32);
+ loadGuardedLE( tD, ILGop_Ident32, ea, getIRegT(rD), condT );
+ putIRegT(rD, mkexpr(tD), IRTemp_INVALID);
} else {
- storeLE(ea, getIRegT(rD));
+ storeGuardedLE(ea, getIRegT(rD), condT);
}
put_ITSTATE(new_itstate); // restore
if (loadsPC)
gen_SIGILL_T_if_in_but_NLI_ITBlock(old_itstate, new_itstate);
// go uncond
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 14\n");
mk_skip_over_T32_if_cond_is_false(condT);
condT = IRTemp_INVALID;
// now uncond
if (loadsPC)
gen_SIGILL_T_if_in_but_NLI_ITBlock(old_itstate, new_itstate);
// go uncond
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 15\n");
mk_skip_over_T32_if_cond_is_false(condT);
condT = IRTemp_INVALID;
// now uncond
if (valid) {
// go uncond
+if (condT != IRTemp_INVALID) vex_printf("XXXX uncond 16\n");
mk_skip_over_T32_if_cond_is_false(condT);
condT = IRTemp_INVALID;
// now uncond