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;