Mercurial > hg > CbC > old > device
comparison mc-codegen.c @ 108:69e2e763cce5 powerpc-asm-first-try
object assemble first try.
author | kono |
---|---|
date | Tue, 18 Mar 2003 20:50:37 +0900 |
parents | 06f72222d6b5 |
children | e09f9de6f5d3 |
comparison
equal
deleted
inserted
replaced
107:06f72222d6b5 | 108:69e2e763cce5 |
---|---|
153 g_expr0(e2); code_neg(creg); | 153 g_expr0(e2); code_neg(creg); |
154 return INT; | 154 return INT; |
155 case DMINUS: | 155 case DMINUS: |
156 g_expr0(e2); code_dneg(freg); | 156 g_expr0(e2); code_dneg(freg); |
157 return DOUBLE; | 157 return DOUBLE; |
158 case I2D: | 158 case CONV: |
159 g_expr0(e2); code_i2d(creg,freg); | 159 g_expr0(e2); |
160 return DOUBLE; | 160 switch(caddr(e1)) { |
161 case D2I: | 161 case I2D: |
162 g_expr0(e2); code_d2i(freg,creg); | 162 code_i2d(creg,freg); |
163 return INT; | 163 return DOUBLE; |
164 case U2D: | 164 case D2I: |
165 g_expr0(e2); code_u2d(creg,freg); | 165 code_d2i(freg,creg); |
166 return DOUBLE; | 166 return INT; |
167 case D2U: | 167 case U2D: |
168 g_expr0(e2); code_d2u(freg,creg); | 168 code_u2d(creg,freg); |
169 return UNSIGNED; | 169 return DOUBLE; |
170 case D2U: | |
171 code_d2u(freg,creg); | |
172 return UNSIGNED; | |
173 default: | |
174 error(-1); return INT; | |
175 } | |
170 case BNOT: /* ~ */ | 176 case BNOT: /* ~ */ |
171 g_expr0(e2); code_not(creg); | 177 g_expr0(e2); code_not(creg); |
172 return INT; | 178 return INT; |
173 case LNOT: /* ! */ | 179 case LNOT: /* ! */ |
174 g_expr0(e2); code_lnot(creg); | 180 g_expr0(e2); code_lnot(creg); |
217 dmachinop(e1); | 223 dmachinop(e1); |
218 return DOUBLE; | 224 return DOUBLE; |
219 case COND: | 225 case COND: |
220 e2=fwdlabel(); | 226 e2=fwdlabel(); |
221 b_expr(cadr(e1),0,e2,0); | 227 b_expr(cadr(e1),0,e2,0); |
222 code_set_fixed_creg(0); | 228 code_set_fixed_creg(0,INT); |
223 g_expr0(caddr(e1)); | 229 t = g_expr0(caddr(e1)); |
224 code_set_fixed_creg(1); | 230 code_set_fixed_creg(1,t); |
225 jmp(e3=fwdlabel()); | 231 jmp(e3=fwdlabel()); |
226 fwddef(e2); | 232 fwddef(e2); |
227 code_set_fixed_creg(0); | 233 code_set_fixed_creg(0,INT); |
228 t = g_expr0(cadddr(e1)); | 234 t = g_expr0(cadddr(e1)); |
229 code_set_fixed_creg(1); | 235 code_set_fixed_creg(1,t); |
236 fwddef(e3); | |
237 return t; | |
238 case DCOND: | |
239 e2=fwdlabel(); | |
240 b_expr(cadr(e1),0,e2,0); | |
241 code_set_fixed_creg(0,DOUBLE); | |
242 t = g_expr0(caddr(e1)); | |
243 code_set_fixed_creg(1,t); | |
244 jmp(e3=fwdlabel()); | |
245 fwddef(e2); | |
246 code_set_fixed_creg(0,DOUBLE); | |
247 t = g_expr0(cadddr(e1)); | |
248 code_set_fixed_creg(1,t); | |
230 fwddef(e3); | 249 fwddef(e3); |
231 return t; | 250 return t; |
232 case SASS: | 251 case SASS: |
233 sassign(e1); | 252 sassign(e1); |
234 return RSTRUCT; | 253 return RSTRUCT; |
453 regv[n->dsp]= 1; | 472 regv[n->dsp]= 1; |
454 regs[n->dsp]= INPUT_REG; | 473 regs[n->dsp]= INPUT_REG; |
455 reg_var++; | 474 reg_var++; |
456 cadddr(args)=size_of_int; /* why we need this? */ | 475 cadddr(args)=size_of_int; /* why we need this? */ |
457 } | 476 } |
458 } else if ((type==FLOAT||type==DOUBLE)&&stmode==REGISTER) { | 477 } else if (type==FLOAT||type==DOUBLE) { |
459 if(freg_var<max_input_fregister_var) { | 478 if(freg_var<max_input_fregister_var) { |
460 n->sc = DREGISTER; | 479 n->sc = DREGISTER; |
461 n->dsp = cadr(get_input_fregister_var(freg_var,n)); | 480 n->dsp = cadr(get_input_fregister_var(freg_var,n)); |
462 fregv[n->dsp]= 1; | 481 fregv[n->dsp]= 1; |
463 fregs[n->dsp]= INPUT_REG; | 482 fregs[n->dsp]= INPUT_REG; |