Mercurial > hg > CbC > old > device
comparison mc-code-mips.c @ 583:421be86892b3
ia32 reorganization
author | kono |
---|---|
date | Tue, 17 Jan 2006 23:38:57 +0900 |
parents | dbde3b869a0f |
children | c991b82e6849 |
comparison
equal
deleted
inserted
replaced
582:3f60e599cc04 | 583:421be86892b3 |
---|---|
1572 printf("\tsw %s,%d(%s)\n",drn,offset,trn); | 1572 printf("\tsw %s,%d(%s)\n",drn,offset,trn); |
1573 break; | 1573 break; |
1574 default: | 1574 default: |
1575 if (length <0) { | 1575 if (length <0) { |
1576 if (length > -MAX_COPY_LEN) { | 1576 if (length > -MAX_COPY_LEN) { |
1577 free_register(dreg); dreg = 0; | |
1577 for(;length<=-4;length+=4,offset-=4) | 1578 for(;length<=-4;length+=4,offset-=4) |
1578 emit_copy(from,to,-4,offset-4,0,det); | 1579 emit_copy(from,to,-4,offset-4,0,det); |
1579 for(;length<=-2;length+=2,offset-=2) | 1580 for(;length<=-2;length+=2,offset-=2) |
1580 emit_copy(from,to,-2,offset-2,0,det); | 1581 emit_copy(from,to,-2,offset-2,0,det); |
1581 if(length<0) | 1582 if(length<0) |
1582 emit_copy(from,to,length,offset-1,0,det); | 1583 emit_copy(from,to,length,offset-1,0,det); |
1583 break; | 1584 break; |
1584 } | 1585 } |
1585 } else if (length <=MAX_COPY_LEN) { | 1586 } else if (length <=MAX_COPY_LEN) { |
1587 free_register(dreg); dreg = 0; | |
1586 for(;length>=4;length-=4,offset+=4) | 1588 for(;length>=4;length-=4,offset+=4) |
1587 emit_copy(from,to,4,offset,0,det); | 1589 emit_copy(from,to,4,offset,0,det); |
1588 for(;length>=2;length-=2,offset+=2) | 1590 for(;length>=2;length-=2,offset+=2) |
1589 emit_copy(from,to,2,offset,0,det); | 1591 emit_copy(from,to,2,offset,0,det); |
1590 if(length>0) | 1592 if(length>0) |
1617 if(creg!=to) { | 1619 if(creg!=to) { |
1618 free_register(to); | 1620 free_register(to); |
1619 // set_ireg(to,1); | 1621 // set_ireg(to,1); |
1620 } | 1622 } |
1621 } | 1623 } |
1622 free_register(dreg); | 1624 if (dreg) free_register(dreg); |
1623 } | 1625 } |
1624 | 1626 |
1625 int | 1627 int |
1626 push_struct(int e4,int t,int arg) | 1628 push_struct(int e4,int t,int arg) |
1627 { | 1629 { |
2484 tosop(op,e2,reg); | 2486 tosop(op,e2,reg); |
2485 } | 2487 } |
2486 | 2488 |
2487 void | 2489 void |
2488 code_assop(int op,int creg, int byte,int sign) { | 2490 code_assop(int op,int creg, int byte,int sign) { |
2489 char *xrn,*crn,*drn; | 2491 char *crn,*drn; |
2490 int xreg; | 2492 int xreg; |
2491 int edx = get_register(); if(!edx) error(-1); | 2493 int edx = get_register(); if(!edx) error(-1); |
2492 // (*creg) op = pop() | 2494 // (*creg) op = pop() |
2493 | 2495 |
2494 use_int(creg); | 2496 use_int(creg); |
2495 xrn = register_name(xreg = emit_pop(0)); /* pop e3 value */ | 2497 xreg = emit_pop(0); /* pop e3 value */ |
2496 #if 1 | 2498 #if 1 |
2497 set_ireg(edx,0); | 2499 set_ireg(edx,0); |
2498 ld_indexx(byte,0,creg,ireg,sign); | 2500 ld_indexx(byte,0,creg,ireg,sign); |
2499 tosop(op,ireg,xreg); | 2501 tosop(op,ireg,xreg); |
2500 crn = register_name(ireg); | 2502 crn = register_name(ireg); |