comparison mc-code-powerpc.c @ 127:eb4d8975926c

Intel float fix
author kono
date Tue, 01 Apr 2003 10:31:40 +0900
parents 1d1612fe705a
children d497c39add36
comparison
equal deleted inserted replaced
126:1d1612fe705a 127:eb4d8975926c
127 127
128 f0 return value etc. 128 f0 return value etc.
129 f1-r8 input register 129 f1-r8 input register
130 f24-f31 saved register variable 130 f24-f31 saved register variable
131 131
132 function call stack frame
132 <------r1_offset------------------------------> 133 <------r1_offset------------------------------>
133 <------------lvar_offset-------> 134 <------------lvar_offset------->
134 r+ +------------+---+---------------+----------+--------------+----+ - 135 r+ +------------+---+---------------+----------+--------------+----+ -
135 callee arg xx register save local caller arg xx 136 callee arg xx register save local caller arg xx
136 reg_save disp max_func_args*size_of_int 137 reg_save disp max_func_args*size_of_int
137 lvar>0 lvar<0 lvar>0x1000 0000 138 lvar>0 lvar<0 lvar>0x1000 0000
139
140 code segment stack frame
141
142 * gotoを呼び出した関数のr1 ! r1(goto前のr1)
143 # * r30 <---------------r1_offset---------------> r1
144 r+ +----------+--+----------+----------------+-----------+----------+----+
145 cousin arg xx reg save !callee arg !code local caller arg xx
146 r20-r29 lvar>0 lvar<0 lvar>0x1000 000
147 f20-f31 <-my_func_args--><--disp-----><-max_func_arg->
148 *size_of_int *size_of_int
149
138 */ 150 */
139 int arg_offset = 24; int arg_offset1 = 24; int disp_offset = -12; 151 int arg_offset = 24; int arg_offset1 = 24; int disp_offset = -12;
140 #define func_disp_offset 60 152 #define func_disp_offset 60
141 #define r1_offset func_disp_offset+12 153 #define r1_offset func_disp_offset+12
142 int code_disp_offset = 0; int jump_offset = 0; 154 int code_disp_offset = 0; int jump_offset = 0;
591 int ptcptr=ptr_cache; 603 int ptcptr=ptr_cache;
592 int g = (int)nptr; 604 int g = (int)nptr;
593 int p,p1; 605 int p,p1;
594 char *rrn; 606 char *rrn;
595 607
608 p1 = ptcptr; p = cadr(p1); /* unnecesary, if ptcptr is initialized */
596 while(ptcptr) { 609 while(ptcptr) {
597 if(car(ptcptr)==g) return caddr(ptcptr); 610 if(car(ptcptr)==g) return caddr(ptcptr);
598 p1=p; p=ptcptr; 611 p1=p; p=ptcptr;
599 ptcptr=cadr(ptcptr); 612 ptcptr=cadr(ptcptr);
600 } 613 }
602 cadr(p) = ptr_cache; /* connect current queue to the last one */ 615 cadr(p) = ptr_cache; /* connect current queue to the last one */
603 ptr_cache = p; /* now the last one is the top */ 616 ptr_cache = p; /* now the last one is the top */
604 if (!caddr(p)) { 617 if (!caddr(p)) {
605 if((r=get_register())) { 618 if((r=get_register())) {
606 caddr(p)=r; regs[r]=PTRC_REG; 619 caddr(p)=r; regs[r]=PTRC_REG;
607 } else 620 } else {
621 error(-1);
608 r=creg; /* this can't happen */ 622 r=creg; /* this can't happen */
623 }
609 car(p)=g; 624 car(p)=g;
625 } else {
626 r = caddr(p);
610 } 627 }
611 rrn = register_name(r); 628 rrn = register_name(r);
612 if (nptr->sc==STATIC) { 629 if (nptr->sc==STATIC) {
613 printf("\taddis %s,r31,ha16(_%s-L_%d)\n", 630 printf("\taddis %s,r31,ha16(_%s-L_%d)\n",
614 rrn,nptr->nm,code_base); 631 rrn,nptr->nm,code_base);
1291 function(int e1) 1308 function(int e1)
1292 { 1309 {
1293 int e2,e3,e4,e5,nargs,t,r0,r1; 1310 int e2,e3,e4,e5,nargs,t,r0,r1;
1294 int arg,reg_arg,freg_arg,arg_assign; 1311 int arg,reg_arg,freg_arg,arg_assign;
1295 int reg_arg_list=0,ret_type,special_lvar; 1312 int reg_arg_list=0,ret_type,special_lvar;
1296 NMTBL *fn; 1313 NMTBL *fn = 0;
1297 int jmp = 0; 1314 int jmp = 0;
1298 char *jrn; 1315 char *jrn;
1299 1316
1300 special_lvar = -1; 1317 special_lvar = -1;
1301 ret_type = cadddr(e1); 1318 ret_type = cadddr(e1);
2448 fregv[freg]=0; 2465 fregv[freg]=0;
2449 } 2466 }
2450 2467
2451 void dtosop(int op,int e1) 2468 void dtosop(int op,int e1)
2452 { 2469 {
2453 char *opn; 2470 char *opn="";
2454 char *frn=fregister_name(freg); 2471 char *frn=fregister_name(freg);
2455 char *grn=fregister_name(e1); 2472 char *grn=fregister_name(e1);
2456 fregv[freg]=1; 2473 fregv[freg]=1;
2457 switch(op) { 2474 switch(op) {
2458 case DADD: opn="fadd"; break; 2475 case DADD: opn="fadd"; break;