Mercurial > hg > CbC > old > device
comparison mc-code-ia32.c @ 243:c311c26e006a
*** empty log message ***
author | kono |
---|---|
date | Thu, 06 May 2004 00:01:40 +0900 |
parents | c68f618b71f9 |
children | 39e28d6cfa56 |
comparison
equal
deleted
inserted
replaced
242:c68f618b71f9 | 243:c311c26e006a |
---|---|
376 | 376 |
377 void | 377 void |
378 free_all_register(void) | 378 free_all_register(void) |
379 { | 379 { |
380 int i; | 380 int i; |
381 for(i=0;i<MAX_REGISTER+REAL_MAX_REGISTER;i++) { | 381 for(i=0;i<MAX_REGISTER+REAL_MAX_LREGISTER;i++) { |
382 regs[i]=regv[i]=0; | 382 regs[i]=regv[i]=0; |
383 } | 383 } |
384 creg = get_register(); | 384 creg = get_register(); |
385 dreg = get_register(); | 385 dreg = get_register(); |
386 reg_var = 0; | 386 reg_var = 0; |
1162 } else { | 1162 } else { |
1163 free_register(save); | 1163 free_register(save); |
1164 } | 1164 } |
1165 regv[save]=0; | 1165 regv[save]=0; |
1166 if (ret_type==DOUBLE||ret_type==FLOAT) { | 1166 if (ret_type==DOUBLE||ret_type==FLOAT) { |
1167 fregv[freg]=1; regv[creg]=0; | |
1168 } else if (ret_type==LONGLONG||ret_type==ULONGLONG) { | 1167 } else if (ret_type==LONGLONG||ret_type==ULONGLONG) { |
1169 fregv[freg]=0; regv[creg]=0; | 1168 use_longlong0(USE_CREG); |
1169 regv[creg]=1; | |
1170 } else if (ret_type==VOID) { | 1170 } else if (ret_type==VOID) { |
1171 fregv[freg]=0; regv[creg]=0; | 1171 regv[freg]=0; regv[creg]=0; |
1172 } else { | 1172 } else { |
1173 use_register(creg,REG_EAX,0); | |
1173 fregv[freg]=0; regv[creg]=1; | 1174 fregv[freg]=0; regv[creg]=1; |
1174 } | 1175 } |
1175 return ret_type; | 1176 return ret_type; |
1176 } | 1177 } |
1177 | 1178 |
1741 | 1742 |
1742 void | 1743 void |
1743 code_set_return_register(int mode) { | 1744 code_set_return_register(int mode) { |
1744 if (fnptr->ty==DOUBLE||fnptr->ty==FLOAT) { | 1745 if (fnptr->ty==DOUBLE||fnptr->ty==FLOAT) { |
1745 } else if (fnptr->ty==LONGLONG||fnptr->ty==ULONGLONG) { | 1746 } else if (fnptr->ty==LONGLONG||fnptr->ty==ULONGLONG) { |
1747 use_longlong0(USE_CREG); | |
1746 } else { | 1748 } else { |
1747 use_register(creg,REG_EAX,mode); | 1749 use_register(creg,REG_EAX,mode); |
1748 } | 1750 } |
1749 } | 1751 } |
1750 | 1752 |
1826 gpc += size_of_int; | 1828 gpc += size_of_int; |
1827 } | 1829 } |
1828 #if LONGLONG_CODE | 1830 #if LONGLONG_CODE |
1829 } else if(t==LONGLONG||t==ULONGLONG) { | 1831 } else if(t==LONGLONG||t==ULONGLONG) { |
1830 ll = lcadr(e); | 1832 ll = lcadr(e); |
1831 printf("\t.long\t0x%x,0x%x\n",code_l2(ll),code_l1(ll)); | 1833 printf("\t.long\t0x%x,0x%x\n",code_l1(ll),code_l2(ll)); |
1832 #endif | 1834 #endif |
1833 #if FLOAT_CODE | 1835 #if FLOAT_CODE |
1834 } else if(t==DOUBLE) { | 1836 } else if(t==DOUBLE) { |
1835 d = dcadr(e); | 1837 d = dcadr(e); |
1836 printf("\t.long\t0x%x,0x%x\n",code_d1(d),code_d2(d)); | 1838 printf("\t.long\t0x%x,0x%x\n",code_d1(d),code_d2(d)); |