Mercurial > hg > CbC > old > device
changeset 212:32f54ab63b35
*** empty log message ***
author | kono |
---|---|
date | Fri, 23 Apr 2004 03:27:01 +0900 |
parents | dbad3172fa14 |
children | 8581c314e31a |
files | Changes mc-code-ia32.c mc-code-mips.c mc-code-powerpc.c mc-code.h mc-codegen.c mc.h |
diffstat | 7 files changed, 31 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Fri Apr 23 03:27:01 2004 +0900 +++ b/Changes Fri Apr 23 03:27:01 2004 +0900 @@ -3944,6 +3944,12 @@ Thu Apr 22 12:33:04 JST 2004 +ようやっと、int/float が元に戻りました。 + lrexpr は、codegen で、long の計算に置き換えた方がいい? でも、それだと、64bit 演算をサポートしているCPUがうれしく ないか。 + +あと、もう少し! でも、2,3日かかりそう。 +loprtc も、あった方がいいんじゃない? (まね....) +
--- a/mc-code-ia32.c Fri Apr 23 03:27:01 2004 +0900 +++ b/mc-code-ia32.c Fri Apr 23 03:27:01 2004 +0900 @@ -2153,7 +2153,7 @@ } -void code_lneg(int e1,int e2) +void code_lneg(int e1) { }
--- a/mc-code-mips.c Fri Apr 23 03:27:01 2004 +0900 +++ b/mc-code-mips.c Fri Apr 23 03:27:01 2004 +0900 @@ -2822,7 +2822,7 @@ } -void code_lneg(int e1,int e2) +void code_lneg(int e1) { }
--- a/mc-code-powerpc.c Fri Apr 23 03:27:01 2004 +0900 +++ b/mc-code-powerpc.c Fri Apr 23 03:27:01 2004 +0900 @@ -3449,7 +3449,7 @@ emit_lpush() { int new_reg; - if (!is_longlong(creg)) error(-1); + if (!is_longlong_reg(creg)) error(-1); if (lreg_sp>MAX_MAX) error(-1); new_reg = get_lregister(); lreg_stack[lreg_sp++] = creg; /* push するかわりにレジスタを使う */ @@ -3572,7 +3572,7 @@ code_lpreinc(int e1,int e2,int reg) { char *xrn,*drn_h,*drn_l; - int i,dreg; + int dreg; int dir=caddr(e1); if (car(e2)==LREGISTER) { printf("\taddci %s,%s,%d\n", @@ -3595,10 +3595,10 @@ printf("\tlzw %s,%d(%s)\n",drn_l,size_of_int,xrn); printf("\tlzw %s,0(%s)\n",drn_h,xrn); printf("\taddci %s,%s,%d\n",drn_l,drn_l,dir); - printf("\taddei %s,%s,0\n",drn_h,drn_h,dir); + printf("\taddei %s,%s,0\n",drn_h,drn_h); printf("\tstw %s,%d(%s)\n",drn_l,size_of_int,xrn); printf("\tstw %s,0(%s)\n",drn_h,xrn); - set_lreg(dreg); + set_lreg(dreg,0); } void @@ -3606,7 +3606,7 @@ { char *xrn,*drn_h,*drn_l; char *nrn_h,*nrn_l; - int i,dreg,nreg; + int dreg,nreg; int dir=caddr(e1); if (car(e2)==LREGISTER) { printf("\tmr %s,%s\n",lregister_name_low(cadr(reg)), @@ -3630,11 +3630,11 @@ printf("\tlzw %s,%d(%s)\n",drn_l,size_of_int,xrn); printf("\tlzw %s,0(%s)\n",drn_h,xrn); printf("\taddci %s,%s,%d\n",nrn_l,drn_l,dir); - printf("\taddei %s,%s,0\n",nrn_h,drn_h,dir); + printf("\taddei %s,%s,0\n",nrn_h,drn_h); printf("\tstw %s,%d(%s)\n",nrn_l,size_of_int,xrn); printf("\tstw %s,0(%s)\n",nrn_h,xrn); free_register(nreg); - set_lreg(dreg); + set_lreg(dreg,0); } void @@ -3688,6 +3688,15 @@ } } #endif +#if LONGLONG_CODE + for(i=0;i<lreg_sp;i++) { + if ((reg=lreg_stack[i])>=0) { + code_assign_lvar( + (lreg_stack[i]=new_lvar(size_of_longlong)),reg,0); + lreg_stack[i]= lreg_stack[i]-REG_LVAR_OFFSET; + } + } +#endif } void
--- a/mc-code.h Fri Apr 23 03:27:01 2004 +0900 +++ b/mc-code.h Fri Apr 23 03:27:01 2004 +0900 @@ -163,7 +163,7 @@ extern void code_lassign_lvar(int,int); extern void code_lassign_lregister(int e2,int reg); extern void code_lconst(int,int); -extern void code_lneg(int,int); +extern void code_lneg(int); extern void code_lrgvar(int,int); extern void code_lrlvar(int,int); extern void ltosop(int,int);
--- a/mc-codegen.c Fri Apr 23 03:27:01 2004 +0900 +++ b/mc-codegen.c Fri Apr 23 03:27:01 2004 +0900 @@ -267,6 +267,11 @@ case MINUS: /* レジスタに対し、neglを実行すれば実現可能 */ g_expr0(e2); code_neg(creg); return INT; +#if LONGLONG_CODE + case LMINUS: + g_expr0(e2); code_lneg(creg); + return LONGLONG; +#endif #if FLOAT_CODE case DMINUS: g_expr0(e2); code_dneg(creg,1);