aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--target-arm/op.c5
-rw-r--r--target-arm/translate.c3
2 files changed, 7 insertions, 1 deletions
diff --git a/target-arm/op.c b/target-arm/op.c
index 813c285b56..561883457d 100644
--- a/target-arm/op.c
+++ b/target-arm/op.c
@@ -105,6 +105,11 @@ void OPPROTO op_movl_T1_im(void)
T1 = PARAM1;
}
+void OPPROTO op_mov_CF_T1(void)
+{
+ env->CF = ((uint32_t)T1) >> 31;
+}
+
void OPPROTO op_movl_T2_im(void)
{
T2 = PARAM1;
diff --git a/target-arm/translate.c b/target-arm/translate.c
index e2c5b8fc09..7223242136 100644
--- a/target-arm/translate.c
+++ b/target-arm/translate.c
@@ -536,7 +536,8 @@ static void disas_arm_insn(DisasContext *s)
if (shift)
val = (val >> shift) | (val << (32 - shift));
gen_op_movl_T1_im(val);
- /* XXX: is CF modified ? */
+ if (logic_cc && shift)
+ gen_op_mov_CF_T1();
} else {
/* register */
rm = (insn) & 0xf;