Mercurial > hg > CbC > old > device
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 } |