diff mc-codegen.c @ 286:179e22f166ef register-assop

register assop fix
author kono
date Wed, 02 Jun 2004 13:19:13 +0900
parents 912b54949344
children a0779a414855
line wrap: on
line diff
--- a/mc-codegen.c	Tue Jun 01 12:42:36 2004 +0900
+++ b/mc-codegen.c	Wed Jun 02 13:19:13 2004 +0900
@@ -1554,23 +1554,28 @@
     e3 = caddr(e1);
     op = cadddr(e1);
 
-    if (code_lassop_p && car(e2)==LREGISTER) {
+    if (car(e2)==LREGISTER) {
         if (code_lconst_op_p(op,e3)) {
             loprtc(op,cadr(e2),e3);
-        } else {
+	    if (use) {
+		code_lregister(cadr(e2),USE_CREG);
+	    }
+	    return;
+	}
+        if (code_lassop_p) {
             g_expr(e3);
 	    emit_lpush();
             code_register_lassop(cadr(e2),op);
+	    if (use) {
+		code_lregister(cadr(e2),USE_CREG);
+	    }
+	    return;
         }
-        if (use) {
-            code_lregister(cadr(e2),USE_CREG);
-        }
-        return;
     }
     if (!code_lassop_p||car(e3)==LCONST) {
 	/*  e2 = e2 op e3; */
 	t = long_sign(op);
-	if (car(e2)==LVAR||car(e2)==GVAR) {
+	if (car(e2)==LREGISTER||car(e2)==LVAR||car(e2)==GVAR) {
 	    g_expr(assign_expr0(e2,list3(op,rvalue_t(e2,t),e3),t,t));
 	    return;
 	}
@@ -1584,6 +1589,13 @@
     }
 
     g_expr(e3);
+    if (car(e2)==LREGISTER) {
+        emit_lpush();
+        code_register_lassop(cadr(e2),op);
+        if (use)
+            code_lregister(cadr(e2),USE_CREG);
+        return;
+    }
     emit_lpush();
     g_expr(e2);
     code_lassop(op,USE_CREG);