comparison mc-codegen.c @ 388:245c6033683d

*** empty log message ***
author kono
date Tue, 24 Aug 2004 15:10:16 +0900
parents c7abd48191b3
children 33a09aa401ba
comparison
equal deleted inserted replaced
387:dc50ca364922 388:245c6033683d
420 car(e1)==COND?INT:car(e1)==DCOND?DOUBLE:FLOAT); 420 car(e1)==COND?INT:car(e1)==DCOND?DOUBLE:FLOAT);
421 e2=fwdlabel(); 421 e2=fwdlabel();
422 if (caddr(e1)) { 422 if (caddr(e1)) {
423 b_expr(cadr(e1),0,e2,0); 423 b_expr(cadr(e1),0,e2,0);
424 g_expr0(caddr(e1)); 424 g_expr0(caddr(e1));
425 } else { 425 } else { // gcc extenstion a?:DEF
426 bexpr(cadr(e1),0,e2); // value used 426 bexpr(cadr(e1),0,e2); // value used
427 } 427 }
428 t = code_get_fixed_creg(USE_CREG,d); 428 t = code_get_fixed_creg(USE_CREG,d);
429 jmp(e3=fwdlabel()); 429 jmp(e3=fwdlabel());
430 fwddef(e2); 430 fwddef(e2);
1877 1877
1878 extern int 1878 extern int
1879 cond(int t,int e1,int e2,int e3) 1879 cond(int t,int e1,int e2,int e3)
1880 { 1880 {
1881 if(car(e1)==CONST) { 1881 if(car(e1)==CONST) {
1882 if(cadr(e1)) {type=t;return e2;} else return e3; 1882 if(cadr(e1)) {type=t;return e2?e2:e1;} else return e3;
1883 } 1883 }
1884 #if FLOAT_CODE 1884 #if FLOAT_CODE
1885 if(car(e1)==DCONST) {
1886 if(dcadr(e1)) {type=t;return e2?e2:e1;} else return e3;
1887 }
1885 if(type==DOUBLE||t==DOUBLE) { 1888 if(type==DOUBLE||t==DOUBLE) {
1886 e3=double_value(e3); 1889 e3=double_value(e3);
1887 type = t; if (e2) e2=double_value(e2); 1890 type = t; if (e2) e2=double_value(e2);
1888 return(list4(DCOND,e1,e2,e3)); 1891 return(list4(DCOND,e1,e2,e3));
1889 } 1892 }
1892 type = t; if (e2) e2=float_value(e2); 1895 type = t; if (e2) e2=float_value(e2);
1893 return(list4(FCOND,e1,e2,e3)); 1896 return(list4(FCOND,e1,e2,e3));
1894 } 1897 }
1895 #endif 1898 #endif
1896 #if LONGLONG_CODE 1899 #if LONGLONG_CODE
1900 if(car(e1)==LCONST) {
1901 if(lcadr(e1)) {type=t;return e2?e2:e1;} else return e3;
1902 }
1897 if(type==LONGLONG||t==LONGLONG) { 1903 if(type==LONGLONG||t==LONGLONG) {
1898 e3=longlong_value(e3); 1904 e3=longlong_value(e3);
1899 type = t; if (e2) e2=longlong_value(e2); 1905 type = t; if (e2) e2=longlong_value(e2);
1900 return(list4(LCOND,e1,e2,e3)); 1906 return(list4(LCOND,e1,e2,e3));
1901 } 1907 }