Mercurial > hg > CbC > old > device
changeset 266:86e315702d9e
*** empty log message ***
author | kono |
---|---|
date | Mon, 17 May 2004 04:18:12 +0900 |
parents | b47a106a9bce |
children | e7ab23c992e5 |
files | Changes mc-code-mips.c |
diffstat | 2 files changed, 12 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Mon May 17 03:21:32 2004 +0900 +++ b/Changes Mon May 17 04:18:12 2004 +0900 @@ -3750,6 +3750,7 @@ かぁ。(めんどくさいだけどさ) (本気? どれくらいかかる? 2-3日かなぁ...) + (実際には半年かかった...) getsym の数字の扱いはunsingedでするべきだよね。 で、- があった時にoverflow を検出するのが良いよな。 @@ -4300,6 +4301,8 @@ まぁ、前者の方が凝っているし、命令数的にも変わらないから、 space factor 的に前者の方が速いんじゃないか? +でも後者の方が簡単だよな。 + Mon May 17 01:09:02 JST 2004 さて、アセンブルは通るようになりましたが... @@ -4309,3 +4312,5 @@ あと、int の後のdouble/longlong は、$3 のあと、$5,$6 と 来るみたいですね。 + +
--- a/mc-code-mips.c Mon May 17 03:21:32 2004 +0900 +++ b/mc-code-mips.c Mon May 17 04:18:12 2004 +0900 @@ -1042,7 +1042,7 @@ if (sign) { return sz==1?"lb":sz==SIZE_OF_SHORT?"lh":"lw"; } else { - return sz==1?"lbu":sz==SIZE_OF_SHORT?"lhu":"lwu"; + return sz==1?"lbu":sz==SIZE_OF_SHORT?"lhu":"lhu"; } } @@ -2383,7 +2383,8 @@ printf("\taddu %s,%s,-%d\n",crn,crn,v); break; case CMP: - printf("\tslt %s,%s,%d\n",crn,crn,v); + printf("\tslt %s,%s,%d\n",crn,crn,v); + cmpreg = creg; break; case BOR: printf("\tori %s,%s,%d\n",crn,crn,v); @@ -2429,6 +2430,7 @@ rn = register_name(reg = get_register()); printf("\tli %s,%d\n",rn,e); printf("\tsltu %s,%s,%s\n",rn,register_name(csreg),rn); + cmpreg=csreg; free_register(reg); } @@ -2861,7 +2863,8 @@ if (chk) return; if (n->dsp != -1) { n->dsp = -1; /* initiallized flag */ - printf(".globl\t%s\n",name); + if (n->sc!=STATIC) + printf(".globl\t%s\n",name); data_mode(name); align(t); printf("%s:\n",name); @@ -3017,7 +3020,7 @@ /* floating point */ -#define set_double(freg) regs[freg]=USING_DREG +#define set_double(freg) if (regs[freg]) {regs[freg]=USING_DREG;} void code_cmp_dregister(int e2,int d)