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));