qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [4588] Fix signed/unsigned issues of immediate version of b


From: Fabrice Bellard
Subject: [Qemu-devel] [4588] Fix signed/unsigned issues of immediate version of brcond (malc)
Date: Mon, 26 May 2008 19:11:08 +0000

Revision: 4588
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4588
Author:   bellard
Date:     2008-05-26 19:11:07 +0000 (Mon, 26 May 2008)

Log Message:
-----------
Fix signed/unsigned issues of immediate version of brcond (malc)

Modified Paths:
--------------
    trunk/tcg/ppc/tcg-target.c

Modified: trunk/tcg/ppc/tcg-target.c
===================================================================
--- trunk/tcg/ppc/tcg-target.c  2008-05-26 17:53:41 UTC (rev 4587)
+++ trunk/tcg/ppc/tcg-target.c  2008-05-26 19:11:07 UTC (rev 4588)
@@ -866,18 +866,55 @@
     int imm;
     uint32_t op;
 
-    imm = const_arg2 ? ((int16_t) arg2 == arg2) : 0;
     switch (cond) {
-    case TCG_COND_EQ: op = imm ? CMPLI : CMPL; break;
-    case TCG_COND_NE: op = imm ? CMPLI : CMPL; break;
-    case TCG_COND_LT: op = imm ? CMPI : CMP; break;
-    case TCG_COND_GE: op = imm ? CMPI : CMP; break;
-    case TCG_COND_LE: op = imm ? CMPI : CMP; break;
-    case TCG_COND_GT: op = imm ? CMPI : CMP; break;
-    case TCG_COND_LTU: op = imm ? CMPLI : CMPL; break;
-    case TCG_COND_GEU: op = imm ? CMPLI : CMPL; break;
-    case TCG_COND_LEU: op = imm ? CMPLI : CMPL; break;
-    case TCG_COND_GTU: op = imm ? CMPLI : CMPL; break;
+    case TCG_COND_EQ:
+    case TCG_COND_NE:
+        if (const_arg2) {
+            if ((int16_t) arg2 == arg2) {
+                op = CMPI;
+                imm = 1;
+                break;
+            }
+            else if ((uint16_t) arg2 == arg2) {
+                op = CMPLI;
+                imm = 1;
+                break;
+            }
+        }
+        op = CMPL;
+        imm = 0;
+        break;
+
+    case TCG_COND_LT:
+    case TCG_COND_GE:
+    case TCG_COND_LE:
+    case TCG_COND_GT:
+        if (const_arg2) {
+            if ((int16_t) arg2 == arg2) {
+                op = CMPI;
+                imm = 1;
+                break;
+            }
+        }
+        op = CMP;
+        imm = 0;
+        break;
+
+    case TCG_COND_LTU:
+    case TCG_COND_GEU:
+    case TCG_COND_LEU:
+    case TCG_COND_GTU:
+        if (const_arg2) {
+            if ((uint16_t) arg2 == arg2) {
+                op = CMPLI;
+                imm = 1;
+                break;
+            }
+        }
+        op = CMPL;
+        imm = 0;
+        break;
+
     default:
         tcg_abort ();
     }






reply via email to

[Prev in Thread] Current Thread [Next in Thread]