Mercurial > hg > CbC > old > device
changeset 595:cfd1eba00ce6
*** empty log message ***
author | kono |
---|---|
date | Sat, 21 Jan 2006 20:51:21 +0900 |
parents | f49c825920c4 |
children | 94d3a8c1b3e8 |
files | Changes mc-code-arm.c |
diffstat | 2 files changed, 20 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Sat Jan 21 15:00:29 2006 +0900 +++ b/Changes Sat Jan 21 20:51:21 2006 +0900 @@ -8570,8 +8570,22 @@ いずれにせよ、environment は、設定した環境の中で不定の 場所に陣どるので注意が必要。 - - - - - +Sat Jan 21 18:06:10 JST 2006 + +tosop のつまらないoptimizeのおかげでかなりはまりました。 +これよりは、assignment の方の + creg = hoge op hoge; + *lvalue = creg; +を、 + *lvalue = hoge op hoge; +とする方をやりたいが.... + +converter が、うまくないのは、1 pass だからだよね。multi-path +通るようにできないかな? + +goto hoge(),env; で、env が 0 だったら、fp の切替えをしない +って方が良くない? 出力コードは複雑になるが... + + + +
--- a/mc-code-arm.c Sat Jan 21 15:00:29 2006 +0900 +++ b/mc-code-arm.c Sat Jan 21 20:51:21 2006 +0900 @@ -2982,10 +2982,8 @@ void tosop(int op,int creg,int oreg) { - int dx = -1; int ox = -1; - char *orn,*crn,*drn; - int creg0 = creg; + char *orn,*crn; // creg = creg op oreg use_int(creg); @@ -3043,23 +3041,9 @@ case MUL: case UMUL: /* target!=source */ -#if 1 inc_inst(1); printf("\tmul\t%s, %s, %s\n",crn,orn,crn); break; -#else - inc_inst(1); - drn = register_name(cadr(dx = get_register_var(0))); - if (car(dx)!=REGISTER) error(-1); - printf("\tmul\t%s, %s, %s\n",drn,crn,orn); - if (creg0==USE_CREG) { - set_ireg(cadr(dx),0); dx = -1; - } else { - printf("\tmov\t%s, %s\n",crn,drn); - } - if (dx!=-1) free_register(cadr(dx)); - break; -#endif case DIV: code_int_lib("__divsi3",creg,oreg); break; case UDIV: