comparison mc-code-mips.c @ 266:86e315702d9e

*** empty log message ***
author kono
date Mon, 17 May 2004 04:18:12 +0900
parents b47a106a9bce
children e7ab23c992e5
comparison
equal deleted inserted replaced
265:b47a106a9bce 266:86e315702d9e
1040 1040
1041 static char *cload(int sz,int sign) { 1041 static char *cload(int sz,int sign) {
1042 if (sign) { 1042 if (sign) {
1043 return sz==1?"lb":sz==SIZE_OF_SHORT?"lh":"lw"; 1043 return sz==1?"lb":sz==SIZE_OF_SHORT?"lh":"lw";
1044 } else { 1044 } else {
1045 return sz==1?"lbu":sz==SIZE_OF_SHORT?"lhu":"lwu"; 1045 return sz==1?"lbu":sz==SIZE_OF_SHORT?"lhu":"lhu";
1046 } 1046 }
1047 } 1047 }
1048 1048
1049 static char *cstore(int sz) { return sz==1?"sb":sz==SIZE_OF_SHORT?"sh":"sw"; } 1049 static char *cstore(int sz) { return sz==1?"sb":sz==SIZE_OF_SHORT?"sh":"sw"; }
1050 1050
2381 break; 2381 break;
2382 case SUB: 2382 case SUB:
2383 printf("\taddu %s,%s,-%d\n",crn,crn,v); 2383 printf("\taddu %s,%s,-%d\n",crn,crn,v);
2384 break; 2384 break;
2385 case CMP: 2385 case CMP:
2386 printf("\tslt %s,%s,%d\n",crn,crn,v); 2386 printf("\tslt %s,%s,%d\n",crn,crn,v);
2387 cmpreg = creg;
2387 break; 2388 break;
2388 case BOR: 2389 case BOR:
2389 printf("\tori %s,%s,%d\n",crn,crn,v); 2390 printf("\tori %s,%s,%d\n",crn,crn,v);
2390 break; 2391 break;
2391 default: 2392 default:
2427 char *rn; 2428 char *rn;
2428 if(chk) return; 2429 if(chk) return;
2429 rn = register_name(reg = get_register()); 2430 rn = register_name(reg = get_register());
2430 printf("\tli %s,%d\n",rn,e); 2431 printf("\tli %s,%d\n",rn,e);
2431 printf("\tsltu %s,%s,%s\n",rn,register_name(csreg),rn); 2432 printf("\tsltu %s,%s,%s\n",rn,register_name(csreg),rn);
2433 cmpreg=csreg;
2432 free_register(reg); 2434 free_register(reg);
2433 } 2435 }
2434 2436
2435 void 2437 void
2436 code_opening(char *filename) 2438 code_opening(char *filename)
2859 error(-1); return; 2861 error(-1); return;
2860 } 2862 }
2861 if (chk) return; 2863 if (chk) return;
2862 if (n->dsp != -1) { 2864 if (n->dsp != -1) {
2863 n->dsp = -1; /* initiallized flag */ 2865 n->dsp = -1; /* initiallized flag */
2864 printf(".globl\t%s\n",name); 2866 if (n->sc!=STATIC)
2867 printf(".globl\t%s\n",name);
2865 data_mode(name); 2868 data_mode(name);
2866 align(t); 2869 align(t);
2867 printf("%s:\n",name); 2870 printf("%s:\n",name);
2868 } else { 2871 } else {
2869 data_mode(0); 2872 data_mode(0);
3015 3018
3016 #if FLOAT_CODE 3019 #if FLOAT_CODE
3017 3020
3018 /* floating point */ 3021 /* floating point */
3019 3022
3020 #define set_double(freg) regs[freg]=USING_DREG 3023 #define set_double(freg) if (regs[freg]) {regs[freg]=USING_DREG;}
3021 3024
3022 void 3025 void
3023 code_cmp_dregister(int e2,int d) 3026 code_cmp_dregister(int e2,int d)
3024 { 3027 {
3025 char *grn,*frn; 3028 char *grn,*frn;