comparison mc-code-mips.c @ 142:de272ad4ddce

mips continue
author kono
date Sun, 18 May 2003 21:03:39 +0900
parents b70018bb3c0e
children 66ddda268ac5
comparison
equal deleted inserted replaced
141:b70018bb3c0e 142:de272ad4ddce
2284 printf("\tjal fptodp\n"); 2284 printf("\tjal fptodp\n");
2285 set_freg(RET_DREGISTER,0); 2285 set_freg(RET_DREGISTER,0);
2286 } 2286 }
2287 2287
2288 void code_f2i(int freg,int creg) { 2288 void code_f2i(int freg,int creg) {
2289 printf("\ttrunc.w.s %s,%s,%s\n",freg,freg,creg);
2289 } 2290 }
2290 2291
2291 void code_f2u(int freg,int creg) { 2292 void code_f2u(int freg,int creg) {
2293 printf("\ttrunc.w.s %s,%s,%s\n",freg,freg,creg);
2292 } 2294 }
2293 2295
2294 void code_i2f(int creg,int freg) { 2296 void code_i2f(int creg,int freg) {
2297 printf("\tcvt.s.w %s,%s\n",freg,freg);
2295 } 2298 }
2296 2299
2297 void code_u2f(int creg,int freg) { 2300 void code_u2f(int creg,int freg) {
2301 printf("\tcvt.s.w %s,%s\n",freg,freg);
2298 } 2302 }
2299 2303
2300 void code_drgvar(int e2,int d,int freg) 2304 void code_drgvar(int e2,int d,int freg)
2301 { 2305 {
2302 char *nm = ((NMTBL*)cadr(e2))->nm; 2306 char *nm = ((NMTBL*)cadr(e2))->nm;
2410 case DDIV: dtosop0("dpdiv",e1,1,0); return; 2414 case DDIV: dtosop0("dpdiv",e1,1,0); return;
2411 case FMUL: dtosop0("fadd",e1,0,0); return; 2415 case FMUL: dtosop0("fadd",e1,0,0); return;
2412 case DMUL: dtosop0("dpmul",e1,1,0); return; 2416 case DMUL: dtosop0("dpmul",e1,1,0); return;
2413 case DCMPGE: 2417 case DCMPGE:
2414 case DCMP: dtosop0("dpcmp",e1,1,1); return; 2418 case DCMP: dtosop0("dpcmp",e1,1,1); return;
2415 case FCMPGE: 2419 case FCMPGE: dtosop0("c.le.s",e1,0,1); return;
2416 case FCMP: dtosop0("c.eq.s",e1,0,1); return; 2420 case FCMP: dtosop0("c.eq.s",e1,0,1); return;
2417 default: 2421 default:
2418 error(-1); return; 2422 error(-1); return;
2419 } 2423 }
2420 } 2424 }
2534 } 2538 }
2535 2539
2536 void 2540 void
2537 drexpr(int e1, int e2,int l1, int op) 2541 drexpr(int e1, int e2,int l1, int op)
2538 { 2542 {
2539 g_expr(list3(((op==DOP+GE)?DCMPGE:DCMP),e1,e2)); 2543 g_expr(list3(((op==FOP+EQ||op==FOP+NEQ)?DCMP:FCMPGE),e1,e2));
2540 switch(op) { 2544 switch(op) {
2541 case DOP+GE: 2545 case DOP+GE:
2542 case FOP+GE:
2543 printf("\tbgez\tL_%d\n",l1); 2546 printf("\tbgez\tL_%d\n",l1);
2544 break; 2547 break;
2545 case DOP+GT: 2548 case DOP+GT:
2546 case FOP+GT:
2547 printf("\tbltz\tL_%d\n",l1); 2549 printf("\tbltz\tL_%d\n",l1);
2548 break; 2550 break;
2549 case DOP+EQ: 2551 case DOP+EQ:
2550 case FOP+EQ:
2551 printf("\tbeq\tL_%d\n",l1); 2552 printf("\tbeq\tL_%d\n",l1);
2552 break; 2553 break;
2553 case DOP+NEQ: 2554 case DOP+NEQ:
2555 printf("\tbne\tL_%d\n",l1);
2556 break;
2557 case FOP+GE:
2558 printf("\tbc1tl\tL_%d\n",l1);
2559 break;
2560 case FOP+GT:
2561 printf("\tbc1tl\tL_%d\n",l1);
2562 break;
2563 case FOP+EQ:
2564 printf("\tbc1f\tL_%d\n",l1);
2565 break;
2554 case FOP+NEQ: 2566 case FOP+NEQ:
2555 printf("\tbne\tL_%d\n",l1); 2567 printf("\tbc1f\tL_%d\n",l1);
2556 break; 2568 break;
2557 } 2569 }
2558 } 2570 }
2559 2571
2560 int emit_dpop(int d) 2572 int emit_dpop(int d)
2561 { 2573 {
2562 int xreg,reg; 2574 int xreg,reg;
2563 xreg=pop_fregister(); 2575 xreg=pop_fregister();
2564 if (xreg<= -REG_LVAR_OFFSET) { 2576 if (xreg<= -REG_LVAR_OFFSET) {
2565 reg = get_dregister(d); 2577 reg = get_dregister(d);
2566 code_drlvar(REG_LVAR_OFFSET+xreg,1,reg); 2578 code_drlvar(REG_LVAR_OFFSET+xreg,d,reg);
2567 free_lvar(REG_LVAR_OFFSET+xreg); 2579 free_lvar(REG_LVAR_OFFSET+xreg);
2568 fregv[reg]=1; xreg=reg; 2580 fregv[reg]=1; xreg=reg;
2569 } 2581 }
2570 return xreg; 2582 return xreg;
2571 } 2583 }