--- target-arm/op.c +++ target-arm/op.c @@ -98,6 +98,12 @@ T1 = PARAM1; } +void OPPROTO op_movl_T1_im_cc(void) +{ + T1 = PARAM1; + env->CF = PARAM1 >> 31; +} + void OPPROTO op_movl_T2_im(void) { T2 = PARAM1; --- target-arm/translate.c +++ target-arm/translate.c @@ -350,7 +350,11 @@ shift = ((insn >> 8) & 0xf) * 2; if (shift) val = (val >> shift) | (val << (32 - shift)); - gen_op_movl_T1_im(val); + if (logic_cc && shift) + gen_op_movl_T1_im_cc(val); + else + gen_op_movl_T1_im(val); + /* XXX: is CF modified ? */ } else { /* register */