update
[qemu] / target-arm / op.c
index 08afa2f..8a82def 100644 (file)
@@ -805,6 +805,23 @@ void OPPROTO op_subl_T0_T1_saturate(void)
   FORCE_RET();
 }
 
+void OPPROTO op_double_T1_saturate(void)
+{
+  int32_t val;
+
+  val = T1;
+  if (val >= 0x40000000) {
+      T1 = 0x7fffffff;
+      env->QF = 1;
+  } else if (val <= (int32_t)0xc0000000) {
+      T1 = 0x80000000;
+      env->QF = 1;
+  } else {
+      T1 = val << 1;
+  }
+  FORCE_RET();
+}
+
 /* thumb shift by immediate */
 void OPPROTO op_shll_T0_im_thumb(void)
 {
@@ -824,12 +841,13 @@ void OPPROTO op_shrl_T0_im_thumb(void)
 
     shift = PARAM1;
     if (shift == 0) {
-       env->CF = 0;
+       env->CF = ((uint32_t)shift) >> 31;
        T0 = 0;
     } else {
        env->CF = (T0 >> (shift - 1)) & 1;
        T0 = T0 >> shift;
     }
+    env->NZF = T0;
     FORCE_RET();
 }