Mercurial > hg > CbC > old > device
changeset 287:a0779a414855
*** empty log message ***
author | kono |
---|---|
date | Wed, 02 Jun 2004 14:29:30 +0900 |
parents | 179e22f166ef |
children | ce7b4d90bc24 |
files | Changes mc-code-ia32.c mc-code-mips.c mc-code-powerpc.c mc-code.h mc-codegen.c mc-codegen.h mc-parse.c |
diffstat | 8 files changed, 135 insertions(+), 128 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Wed Jun 02 13:19:13 2004 +0900 +++ b/Changes Wed Jun 02 14:29:30 2004 +0900 @@ -4597,3 +4597,5 @@ code_bool では、rexpr,drexp を呼んだ方がいいんだけど... && || とかどうする かな。 + +あーあ、なんか恥ずかしいミスが残っているね。
--- a/mc-code-ia32.c Wed Jun 02 13:19:13 2004 +0900 +++ b/mc-code-ia32.c Wed Jun 02 14:29:30 2004 +0900 @@ -182,6 +182,7 @@ static void code_save_fstacks(); #endif static void code_save_stacks(); +static void jcond(int l, char cond); #define use_int(reg) if (reg==-1) reg=use_int0() static int use_int0() { lreg = 0; if (!is_int_reg(creg)) { creg = virtual(REG_EBX); regs[creg]=1;} return creg; } @@ -854,43 +855,48 @@ } void -code_cmp_crgvar(int e1,int reg,int sz) { +code_cmp_crgvar(int e1,int reg,int sz,int label,int cond) { use_int(reg); if (sz==1) printf("\tcmpb $0,%s\n",((NMTBL*)cadr(e1))->nm); else if (sz==SIZE_OF_SHORT) printf("\tcmpw $0,%s\n",((NMTBL*)cadr(e1))->nm); + jcond(label,cond); } void -code_cmp_crlvar(int e1,int reg,int sz) { +code_cmp_crlvar(int e1,int reg,int sz,int label,int cond) { use_int(reg); if (sz==1) printf("\tcmpb $0,%d(%%ebp)\n",lvar(e1)); else if (sz==SIZE_OF_SHORT) printf("\tcmpw $0,%d(%%ebp)\n",lvar(e1)); + jcond(label,cond); } void -code_cmp_rgvar(int e1,int reg) { +code_cmp_rgvar(int e1,int reg,int label,int cond) { use_int(reg); printf("\tcmpl $0,%s\n",((NMTBL*)cadr(e1))->nm); + jcond(label,cond); } void -code_cmp_rlvar(int e1,int reg) { +code_cmp_rlvar(int e1,int reg,int label,int cond) { use_int(reg); printf("\tcmpl $0,%d(%%ebp)\n",lvar(e1)); + jcond(label,cond); } void -code_cmp_register(int e2) { +code_cmp_register(int e2,int label,int cond) { use_int(e2); printf("\tcmpl $0,%s\n",register_name(e2,0)); + jcond(label,cond); } @@ -1569,12 +1575,13 @@ } void -code_cmpdimm(int e, int csreg) +code_cmpdimm(int e, int csreg,int label,int cond) { /* used in dosiwtch() */ if(chk) return; use_register(creg,csreg,0); printf("\tcmpl $%d,%s\n",e,register_name(creg,0)); + jcond(label,cond); } void @@ -1615,7 +1622,7 @@ } -void +static void jcond(int l, char cond) { if (chk) return; @@ -2113,14 +2120,16 @@ printf("\t%s %d(%%ebp)\n",fload(d),lvar(e2)); } -void code_cmp_drgvar(int e2,int reg,int d) +void code_cmp_drgvar(int e2,int reg,int d,int label,int cond) { printf("\tfcomp %s\n",((NMTBL*)cadr(e2))->nm); + jcond(label,cond); } -void code_cmp_drlvar(int e2,int reg,int d) +void code_cmp_drlvar(int e2,int reg,int d,int label,int cond) { printf("\tfcomp %d(%%ebp)\n",lvar(e2)); + jcond(label,cond); } void dtosop(int op,int reg,int e1) @@ -2240,7 +2249,7 @@ } void -code_cmp_dregister(int e2,int d) +code_cmp_dregister(int e2,int d,int label,int cond) { if (e2!=USE_CREG) error(-1); @@ -2249,6 +2258,7 @@ printf("\tfnstsw\t%%ax\n"); printf("\tandb\t$69,%%ah\n"); printf("\txorb\t$64,%%ah\n"); + jcond(label,cond); } int pop_fregister() @@ -2401,7 +2411,7 @@ } } -void code_cmp_lregister(int reg) +void code_cmp_lregister(int reg,int label,int cond) { char *crn; use_int(reg); @@ -2409,9 +2419,10 @@ printf("\tmovl %%esi,%s\n",crn); printf("\torl %%edi,%s\n",crn); printf("\ttestl %s,%s\n",crn,crn); + jcond(label,cond); } -void code_cmp_lrgvar(int e1,int e2) +void code_cmp_lrgvar(int e1,int e2,int label,int cond) { char *n,*crn; n = ((NMTBL*)cadr(e1))->nm; @@ -2420,9 +2431,10 @@ printf("\tmovl %s,%s\n",n,crn); printf("\torl %s+4,%s\n",n,crn); printf("\ttestl %s,%s\n",crn,crn); + jcond(label,cond); } -void code_cmp_lrlvar(int e1,int e2) +void code_cmp_lrlvar(int e1,int e2,int label,int cond) { char *crn; use_int(e2); @@ -2430,6 +2442,7 @@ printf("\tmovl %d(%%ebp),%s\n",lvar(e1),crn); printf("\torl %d(%%ebp),%s\n",lvar(e1)+4,crn); printf("\ttestl %s,%s\n",crn,crn); + jcond(label,cond); } void code_lassign(int e1,int e2)
--- a/mc-code-mips.c Wed Jun 02 13:19:13 2004 +0900 +++ b/mc-code-mips.c Wed Jun 02 14:29:30 2004 +0900 @@ -282,6 +282,8 @@ static unsigned int code_fmask(); static int code_fmask_offset(); +static void jcond(int l, char cond); + #define ARG_LVAR_OFFSET 0x10000000 #define round16(i) ((i+0xf)&~0xf) @@ -1364,7 +1366,7 @@ void -code_cmp_crgvar(int e1,int reg,int sz) { +code_cmp_crgvar(int e1,int reg,int sz,int label,int cond) { int r; char *crn; use_int(reg); @@ -1374,11 +1376,12 @@ cext(0,sz,r); cmpreg = reg; // printf("\tcmpwi cr0,%s,0\n",crn); + jcond(label,cond); } void -code_cmp_crlvar(int e2,int reg, int sz) { +code_cmp_crlvar(int e2,int reg, int sz,int label,int cond) { char *crn; use_int(reg); crn = register_name(reg); @@ -1386,38 +1389,39 @@ printf("\t%s %s,",cload(sz,0),crn); lvar(e2); cext(0,sz,reg); - code_cmp_register(reg); + code_cmp_register(reg,label,cond); } void -code_cmp_rgvar(int e1,int reg) { +code_cmp_rgvar(int e1,int reg,int label,int cond) { int r; char *crn; use_int(reg); crn = register_name(reg); r = get_ptr_cache((NMTBL*)cadr(e1)); printf("\tlw %s,0(%s)\n",crn,register_name(r)); - code_cmp_register(reg); + code_cmp_register(reg,label,cond); } void -code_cmp_rlvar(int e2,int reg) { +code_cmp_rlvar(int e2,int reg,int label,int cond) { char *crn; use_int(reg); crn = register_name(reg); lvar_intro(e2); printf("\tlw %s,",crn); lvar(e2); - code_cmp_register(reg); + code_cmp_register(reg,label,cond); } void -code_cmp_register(int e2) { +code_cmp_register(int e2,int label,int cond) { use_int(e2); cmpreg = e2; // used by jcond, beq $reg,$0,L_xx + jcond(label,cond); } @@ -2662,7 +2666,7 @@ static char * cmpreg_2; void -code_cmpdimm(int e, int csreg) +code_cmpdimm(int e, int csreg,int label,int cond) { /* used in dosiwtch() */ int reg; @@ -2675,6 +2679,7 @@ cmpreg_2 = register_name(csreg); cmpreg=CMP_IMM; free_register(reg); + jcond(label,cond); } void @@ -2781,7 +2786,7 @@ #define CMP_C1T (-1) -void +static void jcond(int l, char cond) { if (chk) return; @@ -3323,7 +3328,7 @@ static void dconst(int l,int h,double value); void -code_cmp_dregister(int e2,int d) +code_cmp_dregister(int e2,int d,int label,int cond) { char *grn,*frn; int greg; @@ -3337,14 +3342,15 @@ extern_conv("dpcmp"); set_dreg(RET_DREGISTER,0); cmpreg = 2; - return; + } else { + grn = register_name(greg = get_dregister(d)); + frn = register_name(e2); + printf("\tmtc1 $0,%s\n",grn); + printf("\tc.eq.s %s,%s\n",grn,frn); + free_register(greg); + cmpreg = CMP_C1T; } - grn = register_name(greg = get_dregister(d)); - frn = register_name(e2); - printf("\tmtc1 $0,%s\n",grn); - printf("\tc.eq.s %s,%s\n",grn,frn); - free_register(greg); - cmpreg = CMP_C1T; + jcond(label,cond); return; } @@ -3684,7 +3690,7 @@ } void -code_cmp_drgvar(int e2,int reg,int d) +code_cmp_drgvar(int e2,int reg,int d,int label,int cond) { int r; char *frn,*fr1; @@ -3711,10 +3717,11 @@ cmpreg = CMP_C1T; free_register(g); } + jcond(label,cond); } void -code_cmp_drlvar(int e2,int reg,int d) +code_cmp_drlvar(int e2,int reg,int d,int label,int cond) { char *frn,*fr1; int g; @@ -3738,6 +3745,7 @@ cmpreg = CMP_C1T; free_register(g); } + jcond(label,cond); } static void @@ -4240,30 +4248,30 @@ } void -code_cmp_lregister(int reg) +code_cmp_lregister(int reg,int label,int cond) { use_longlong(reg); printf("\tor %s,%s,%s\n", lregister_name_low(reg), lregister_name_low(reg), lregister_name_high(reg)); - code_cmp_register(regv_l(reg)); + code_cmp_register(regv_l(reg),label,cond); } void -code_cmp_lrgvar(int e1,int creg) +code_cmp_lrgvar(int e1,int creg,int label,int cond) { use_longlong(creg); code_lrgvar(e1,creg); - code_cmp_lregister(creg); + code_cmp_lregister(creg,label,cond); } void -code_cmp_lrlvar(int e1,int creg) +code_cmp_lrlvar(int e1,int creg,int label,int cond) { use_longlong(creg); code_lrlvar(e1,creg); - code_cmp_lregister(creg); + code_cmp_lregister(creg,label,cond); } void @@ -4649,10 +4657,10 @@ int v; if (car(e)==LCONST) { if (!(-32766<lcadr(e)&&lcadr(e)<32767)) return 0; - v = lcaddr(e); + v = lcadr(e); } else if (car(e)==CONST) { if (!(-32766<cadr(e)&&cadr(e)<32767)) return 0; - v = caddr(e); + v = cadr(e); } else return 0; switch(op) { @@ -4691,27 +4699,24 @@ case LLSHIFT: case LULSHIFT: greg = get_register(); - use_reg(greg); grn = register_name(greg); - printf("\tsll %s,%s,%d\n",grn,crn_l,32-v); - printf("\tsrl %s,%s,%d\n",crn_h,crn_h,v); - printf("\tor %s,%s,%s\n",crn_h,grn,crn_h); + printf("\tsll %s,%s,%d\n",crn_h,crn_h,v); + printf("\tsrl %s,%s,%d\n",grn,crn_l,32-v); + printf("\tor %s,%s,%s\n",crn_h,crn_h,grn); printf("\tsll %s,%s,%d\n",crn_l,crn_l,v); free_register(greg); return; case LRSHIFT: greg = get_register(); - use_reg(greg); grn = register_name(greg); - printf("\tsrl %s,%s,%d\n",grn,crn_l,v); + printf("\tsrl %s,%s,%d\n",crn_l,crn_l,v); printf("\tsll %s,%s,%d\n",grn,crn_h,32-v); - printf("\tor %s,%s,%s\n",grn,grn,grn); + printf("\tor %s,%s,%s\n",crn_l,crn_l,grn); printf("\tsra %s,%s,%d\n",crn_h,crn_h,v); free_register(greg); return; case LURSHIFT: greg = get_register(); - use_reg(greg); grn = register_name(greg); printf("\tsll %s,%s,%d\n",grn,crn_h,32-v); printf("\tsrl %s,%s,%d\n",crn_l,crn_l,v); @@ -4735,7 +4740,7 @@ } break; case LBOR: - printf("\tori %s,%s,lo16(%d)\n",crn_l,crn_l,v); + printf("\tori %s,%s,%d\n",crn_l,crn_l,v); break; default: error(-1);
--- a/mc-code-powerpc.c Wed Jun 02 13:19:13 2004 +0900 +++ b/mc-code-powerpc.c Wed Jun 02 14:29:30 2004 +0900 @@ -235,6 +235,7 @@ static void set_ireg(int,int); static void set_freg(int,int); static void set_lreg(int,int); +static void jcond(int l, char cond); static int max_func_args; static int my_func_args; @@ -1347,7 +1348,7 @@ } void -code_cmp_crgvar(int e1,int reg,int sz) { +code_cmp_crgvar(int e1,int reg,int sz,int label,int cond) { int r; char *crn; use_int(reg); @@ -1356,11 +1357,12 @@ printf("\t%s %s,0(%s)\n",cload(sz),crn,register_name(r)); cext(0,sz,r); printf("\tcmpwi cr%d,%s,0\n",cmpflag,crn); + jcond(label,cond); } void -code_cmp_crlvar(int e2,int reg, int sz) { +code_cmp_crlvar(int e2,int reg, int sz,int label,int cond) { char *crn; use_int(reg); crn = register_name(reg); @@ -1368,38 +1370,39 @@ printf("\t%s %s,",cload(sz),crn); lvar(e2); cext(0,sz,reg); - code_cmp_register(reg); + code_cmp_register(reg,label,cond); } void -code_cmp_rgvar(int e1,int reg) { +code_cmp_rgvar(int e1,int reg,int label,int cond) { int r; char *crn; use_int(reg); crn = register_name(reg); r = get_ptr_cache((NMTBL*)cadr(e1)); printf("\tlwz %s,0(%s)\n",crn,register_name(r)); - code_cmp_register(reg); + code_cmp_register(reg,label,cond); } void -code_cmp_rlvar(int e2,int reg) { +code_cmp_rlvar(int e2,int reg,int label,int cond) { char *crn; use_int(reg); crn = register_name(reg); lvar_intro(e2); printf("\tlwz %s,",crn); lvar(e2); - code_cmp_register(reg); + code_cmp_register(reg,label,cond); } void -code_cmp_register(int e2) { +code_cmp_register(int e2,int label,int cond) { use_int(e2); printf("\tcmpwi cr%d,%s,0\n",cmpflag,register_name(e2)); + jcond(label,cond); } @@ -2511,11 +2514,12 @@ } void -code_cmpdimm(int e, int csreg) +code_cmpdimm(int e, int csreg,int label,int cond) { /* used in dosiwtch() */ if(chk) return; printf("\tcmpwi cr%d,%s,%d\n",cmpflag,register_name(csreg),e); + jcond(label,cond); } void @@ -2549,7 +2553,7 @@ } -void +static void jcond(int l, char cond) { if (chk) return; @@ -3034,7 +3038,7 @@ } void -code_cmp_dregister(int e2,int d) +code_cmp_dregister(int e2,int d,int label,int cond) { char *frn,*rrn,*grn; int greg,r; @@ -3047,6 +3051,7 @@ printf("\tlfs %s,0(%s)\n",grn,rrn); printf("\tfcmpu cr%d,%s,%s\n",cmpflag,grn,frn); free_register(greg); + jcond(label,cond); return; } @@ -3353,7 +3358,7 @@ } void -code_cmp_drgvar(int e2,int reg,int d) +code_cmp_drgvar(int e2,int reg,int d,int label,int cond) { int r; char *frn; @@ -3367,10 +3372,11 @@ printf("\t%s %s,0(%s)\n",fload(1),grn,register_name(r)); printf("\tfcmpu cr%d,%s,%s\n",cmpflag,frn,grn); free_register(g); + jcond(label,cond); } void -code_cmp_drlvar(int e2,int reg,int d) +code_cmp_drlvar(int e2,int reg,int d,int label,int cond) { char *frn; int g=get_dregister(d); @@ -3383,6 +3389,7 @@ printf("\t%s %s,",fload(1),grn); lvar(e2); printf("\tfcmpu cr%d,%s,%s\n",cmpflag,frn,grn); free_register(g); + jcond(label,cond); } void @@ -3735,7 +3742,7 @@ } void -code_cmp_lregister(int reg) +code_cmp_lregister(int reg,int label,int cond) { use_longlong(reg); printf("\tor %s,%s,%s\n", @@ -3743,22 +3750,23 @@ lregister_name_low(reg), lregister_name_high(reg)); printf("\tcmpwi cr%d,%s,0\n",cmpflag,lregister_name_low(reg)); + jcond(label,cond); } void -code_cmp_lrgvar(int e1,int creg) +code_cmp_lrgvar(int e1,int creg,int label,int cond) { use_longlong(creg); code_lrgvar(e1,creg); - code_cmp_lregister(creg); + code_cmp_lregister(creg,label,cond); } void -code_cmp_lrlvar(int e1,int creg) +code_cmp_lrlvar(int e1,int creg,int label,int cond) { use_longlong(creg); code_lrlvar(e1,creg); - code_cmp_lregister(creg); + code_cmp_lregister(creg,label,cond); } void @@ -4226,10 +4234,10 @@ int v; if (car(e)==LCONST) { if (!(-32766<lcadr(e)&&lcadr(e)<32767)) return 0; - v = lcaddr(e); + v = lcadr(e); } else if (car(e)==CONST) { if (!(-32766<cadr(e)&&cadr(e)<32767)) return 0; - v = caddr(e); + v = cadr(e); } else return 0; switch(op) {
--- a/mc-code.h Wed Jun 02 13:19:13 2004 +0900 +++ b/mc-code.h Wed Jun 02 14:29:30 2004 +0900 @@ -43,7 +43,7 @@ extern void gexpr_code_init(); extern int code_csvalue(); extern void code_gexpr(int e); -extern void code_cmpdimm(int e, int csreg); +extern void code_cmpdimm(int e, int csreg,int label,int cond); extern void code_gvar(int e1,int reg); extern void code_rgvar(int e1,int reg); extern void code_crgvar(int e1,int reg,int sign,int sz); @@ -61,11 +61,11 @@ extern void code_return(int reg); extern void code_environment(int reg); extern void code_bool(int e1,int reg); -extern void code_cmp_crgvar(int e1,int reg,int sz); -extern void code_cmp_crlvar(int e1,int reg,int sz); -extern void code_cmp_rgvar(int e1,int reg); -extern void code_cmp_rlvar(int e1,int reg); -extern void code_cmp_register(int e2); +extern void code_cmp_crgvar(int e1,int reg,int sz,int label,int cond); +extern void code_cmp_crlvar(int e1,int reg,int sz,int label,int cond); +extern void code_cmp_rgvar(int e1,int reg,int label,int cond); +extern void code_cmp_rlvar(int e1,int reg,int label,int cond); +extern void code_cmp_register(int e2,int label,int cond); extern void code_string(int e1,int reg); extern void emit_copy(int from,int to,int length,int offset,int value,int det); extern int function(int e1); @@ -94,7 +94,6 @@ extern void code_opening(char *filename); extern void code_closing(); extern void rexpr(int e1, int l1, int cond,int t); -extern void jcond(int l, char cond); extern void jmp(int l); extern int code_get_fixed_creg(int reg,int type); extern void code_set_fixed_creg(int reg,int mode,int type); @@ -113,9 +112,9 @@ extern int dpop_register(); extern int emit_dpop(int); extern void code_dregister(int e2,int reg,int d); -extern void code_cmp_dregister(int,int); -extern void code_cmp_drgvar(int,int,int); -extern void code_cmp_drlvar(int,int,int); +extern void code_cmp_dregister(int,int,int,int); +extern void code_cmp_drgvar(int,int,int,int,int); +extern void code_cmp_drlvar(int,int,int,int,int); extern void code_dassign(int,int,int); extern void code_dassign_gvar(int,int,int); extern void code_dassign_lvar(int,int,int); @@ -153,9 +152,9 @@ extern int lpop_register(); extern int emit_lpop(); extern void code_lregister(int e2,int reg); -extern void code_cmp_lregister(int); -extern void code_cmp_lrgvar(int,int); -extern void code_cmp_lrlvar(int,int); +extern void code_cmp_lregister(int,int,int); +extern void code_cmp_lrgvar(int,int,int,int); +extern void code_cmp_lrlvar(int,int,int,int); extern void code_lassign(int,int); extern void code_lassign_gvar(int,int); extern void code_lassign_lvar(int,int);
--- a/mc-codegen.c Wed Jun 02 13:19:13 2004 +0900 +++ b/mc-codegen.c Wed Jun 02 14:29:30 2004 +0900 @@ -543,53 +543,41 @@ if(!cond) fwddef(l2); return; case CRGVAR: case CURGVAR: - code_cmp_crgvar(e1,USE_CREG,1); - jcond(l1,cond); + code_cmp_crgvar(e1,USE_CREG,1,l1,cond); return; case SRGVAR: case SURGVAR: - code_cmp_crgvar(e1,USE_CREG,size_of_short); - jcond(l1,cond); + code_cmp_crgvar(e1,USE_CREG,size_of_short,l1,cond); return; case CRLVAR: case CURLVAR: - code_cmp_crlvar(e2,USE_CREG,1); - jcond(l1,cond); + code_cmp_crlvar(e2,USE_CREG,1,l1,cond); return; case SRLVAR: case SURLVAR: - code_cmp_crlvar(e2,USE_CREG,size_of_short); - jcond(l1,cond); + code_cmp_crlvar(e2,USE_CREG,size_of_short,l1,cond); return; case RGVAR: - code_cmp_rgvar(e1,USE_CREG); - jcond(l1,cond); + code_cmp_rgvar(e1,USE_CREG,l1,cond); return; case RLVAR: - code_cmp_rlvar(e2,USE_CREG); - jcond(l1,cond); + code_cmp_rlvar(e2,USE_CREG,l1,cond); return; #if FLOATC_DOE case DRLVAR: - code_cmp_drlvar(e2,USE_CREG,1); - jcond(l1,cond); + code_cmp_drlvar(e2,USE_CREG,1,l1,cond); return; case FRLVAR: - code_cmp_drlvar(e2,USE_CREG,0); - jcond(l1,cond); + code_cmp_drlvar(e2,USE_CREG,0,l1,cond); return; case DRGVAR: - code_cmp_drgvar(e2,USE_CREG,1); - jcond(l1,cond); + code_cmp_drgvar(e2,USE_CREG,1,l1,cond); return; case FRGVAR: - code_cmp_drgvar(e2,USE_CREG,0); - jcond(l1,cond); + code_cmp_drgvar(e2,USE_CREG,0,l1,cond); return; case FREGISTER: - code_cmp_dregister(e2,0); - jcond(l1,cond); + code_cmp_dregister(e2,0,l1,cond); return; case DREGISTER: - code_cmp_dregister(e2,1); - jcond(l1,cond); + code_cmp_dregister(e2,1,l1,cond); return; case DCONST: case FCONST: @@ -598,24 +586,20 @@ #endif #if LONGLONG_DOE case LRLVAR: - code_cmp_lrlvar(e2,1); - jcond(l1,cond); + code_cmp_lrlvar(e2,1,l1,cond); return; case LRGVAR: - code_cmp_lrgvar(e2,1); - jcond(l1,cond); + code_cmp_lrgvar(e2,1,l1,cond); return; case LREGISTER: - code_cmp_lregister(e2,1); - jcond(l1,cond); + code_cmp_lregister(e2,1,l1,cond); return; case LCONST: if(control&&((lcadr(e2)!=0)^cond)) jmp(l1); return; #endif case REGISTER: - code_cmp_register(e2); - jcond(l1,cond); + code_cmp_register(e2,l1,cond); return; case CONST: if(control&&((cond&&e2)||(!cond&&!e2))) jmp(l1); @@ -628,17 +612,16 @@ if (0) ; #if FLOAT_CODE else if(t==FLOAT) - code_cmp_dregister(USE_CREG,0); + code_cmp_dregister(USE_CREG,0,l1,cond); else if(t==DOUBLE) - code_cmp_dregister(USE_CREG,1); + code_cmp_dregister(USE_CREG,1,l1,cond); #endif #if LONGLONG_CODE else if(t==LONGLONG||t==ULONGLONG) - code_cmp_lregister(USE_CREG); + code_cmp_lregister(USE_CREG,l1,cond); #endif else - code_cmp_register(USE_CREG); - jcond(l1,cond); + code_cmp_register(USE_CREG,l1,cond); return; } } @@ -1605,9 +1588,9 @@ #endif void -cmpdimm(int e, int csreg) +cmpdimm(int e, int csreg,int label,int cond) { - code_cmpdimm(e, csreg); + code_cmpdimm(e, csreg,label,cond); } int
--- a/mc-codegen.h Wed Jun 02 13:19:13 2004 +0900 +++ b/mc-codegen.h Wed Jun 02 14:29:30 2004 +0900 @@ -30,7 +30,7 @@ extern void parallel_rassign(int list); extern int csvalue(); -extern void cmpdimm(int e, int csreg); +extern void cmpdimm(int e, int csreg,int label,int cond); extern void code_enter(char *name) ; extern void code_enter1(int args); extern void code_init(void); @@ -47,7 +47,6 @@ extern void gen_source(char *s); extern int gexpr(int e1,int use); extern void gexpr_init(void); -extern void jcond(int l, char cond); extern void jmp(int l); extern void jmp_eq_label(int l); extern void jmp_label(int l);
--- a/mc-parse.c Wed Jun 02 13:19:13 2004 +0900 +++ b/mc-parse.c Wed Jun 02 14:29:30 2004 +0900 @@ -1892,13 +1892,11 @@ } if (cslabel) fwddef(cslabel); while(cadr(c)) { - cmpdimm(car(c),csvalue1); - jcond(l,0); + cmpdimm(car(c),csvalue1,l,0); c=cadr(c); } lfree=slfree; - cmpdimm(car(c),csvalue1); - jcond(cslabel=fwdlabel(),1); + cmpdimm(car(c),csvalue1,cslabel=fwdlabel(),1); fwddef(l); }