marked as dead. */
void store_reg(DisasContext *s, int reg, TCGv_i32 var)
{
+ uint32_t mask = 0;
+
if (reg == 15) {
- /* In Thumb mode, we must ignore bit 0.
+ /*
+ * In Thumb mode, we must ignore bit 0.
* In ARM mode, for ARMv4 and ARMv5, it is UNPREDICTABLE if bits [1:0]
* are not 0b00, but for ARMv6 and above, we must ignore bits [1:0].
* We choose to ignore [1:0] in ARM mode for all architecture versions.
*/
- tcg_gen_andi_i32(var, var, s->thumb ? ~1 : ~3);
+ mask = s->thumb ? 1 : 3;
s->base.is_jmp = DISAS_JUMP;
s->pc_save = -1;
} else if (reg == 13 && arm_dc_feature(s, ARM_FEATURE_M)) {
/* For M-profile SP bits [1:0] are always zero */
- tcg_gen_andi_i32(var, var, ~3);
+ mask = 3;
}
- tcg_gen_mov_i32(cpu_R[reg], var);
+ tcg_gen_andi_i32(cpu_R[reg], var, ~mask);
}
/*