diff mc-codegen.c @ 388:245c6033683d

*** empty log message ***
author kono
date Tue, 24 Aug 2004 15:10:16 +0900 (2004-08-24)
parents c7abd48191b3
children 33a09aa401ba
line wrap: on
line diff
--- a/mc-codegen.c	Sat Jul 31 01:03:04 2004 +0900
+++ b/mc-codegen.c	Tue Aug 24 15:10:16 2004 +0900
@@ -422,7 +422,7 @@
 	if (caddr(e1)) {
 	    b_expr(cadr(e1),0,e2,0);
 	    g_expr0(caddr(e1));
-	} else {
+	} else {  // gcc extenstion  a?:DEF 
 	    bexpr(cadr(e1),0,e2); // value used
 	}
 	t = code_get_fixed_creg(USE_CREG,d);
@@ -1879,9 +1879,12 @@
 cond(int t,int e1,int e2,int e3)
 {
     if(car(e1)==CONST) {
-	if(cadr(e1)) {type=t;return e2;} else return e3;
+	if(cadr(e1)) {type=t;return e2?e2:e1;} else return e3;
     }
 #if FLOAT_CODE
+    if(car(e1)==DCONST) {
+	if(dcadr(e1)) {type=t;return e2?e2:e1;} else return e3;
+    }
     if(type==DOUBLE||t==DOUBLE) {
 	e3=double_value(e3);
 	type = t; if (e2) e2=double_value(e2);
@@ -1894,6 +1897,9 @@
     }
 #endif
 #if LONGLONG_CODE
+    if(car(e1)==LCONST) {
+	if(lcadr(e1)) {type=t;return e2?e2:e1;} else return e3;
+    }
     if(type==LONGLONG||t==LONGLONG) {
 	e3=longlong_value(e3);
 	type = t; if (e2) e2=longlong_value(e2);