]> git.proxmox.com Git - qemu.git/commitdiff
Workaround dyngen problems with m68k conditional branch ops.
authorpbrook <pbrook@c046a42c-6fe2-441c-8c8c-71466251a162>
Sat, 9 Jun 2007 20:50:01 +0000 (20:50 +0000)
committerpbrook <pbrook@c046a42c-6fe2-441c-8c8c-71466251a162>
Sat, 9 Jun 2007 20:50:01 +0000 (20:50 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2968 c046a42c-6fe2-441c-8c8c-71466251a162

target-m68k/op-hacks.h
target-m68k/op.c

index 01a158d83ebce61a547f611cd64941d98e4db3e0..7bf345c2c93092fc8c8ad1b1dee20f04142e15ad 100644 (file)
@@ -103,3 +103,28 @@ static inline void gen_op_goto_tb(int dummy, int n, long tb)
         gen_op_goto_tb1(TBPARAM(tb));
     }
 }
+
+static inline void gen_op_jmp_z32(int val, int label)
+{
+    gen_op_set_T0_z32(val);
+    gen_op_jmp_T0(label);
+}
+
+static inline void gen_op_jmp_nz32(int val, int label)
+{
+    gen_op_set_T0_nz32(val);
+    gen_op_jmp_T0(label);
+}
+
+static inline void gen_op_jmp_s32(int val, int label)
+{
+    gen_op_set_T0_s32(val);
+    gen_op_jmp_T0(label);
+}
+
+static inline void gen_op_jmp_ns32(int val, int label)
+{
+    gen_op_set_T0_ns32(val);
+    gen_op_jmp_T0(label);
+}
+
index 466fdc23426b01d584b9643cb89fad24b67fa2a1..e5e39c2fdee0e02b9fd64380f1fce9c8615cc31d 100644 (file)
@@ -487,37 +487,38 @@ OP(jmp)
     GOTO_LABEL_PARAM(1);
 }
 
-/* These ops involve a function call, which probably requires a stack frame
-   and breaks things on some hosts.  */
-OP(jmp_z32)
+OP(set_T0_z32)
 {
     uint32_t arg = get_op(PARAM1);
-    if (arg == 0)
-        GOTO_LABEL_PARAM(2);
+    T0 = (arg == 0);
     FORCE_RET();
 }
 
-OP(jmp_nz32)
+OP(set_T0_nz32)
 {
     uint32_t arg = get_op(PARAM1);
-    if (arg != 0)
-        GOTO_LABEL_PARAM(2);
+    T0 = (arg != 0);
     FORCE_RET();
 }
 
-OP(jmp_s32)
+OP(set_T0_s32)
 {
     int32_t arg = get_op(PARAM1);
-    if (arg < 0)
-        GOTO_LABEL_PARAM(2);
+    T0 = (arg > 0);
     FORCE_RET();
 }
 
-OP(jmp_ns32)
+OP(set_T0_ns32)
 {
     int32_t arg = get_op(PARAM1);
-    if (arg >= 0)
-        GOTO_LABEL_PARAM(2);
+    T0 = (arg >= 0);
+    FORCE_RET();
+}
+
+OP(jmp_T0)
+{
+    if (T0)
+        GOTO_LABEL_PARAM(1);
     FORCE_RET();
 }