Mercurial > hg > CbC > old > device
changeset 303:88e20739e64c
register variable initialization fix
author | kono |
---|---|
date | Mon, 07 Jun 2004 22:57:41 +0900 |
parents | bea7ab2fb218 |
children | 9df8aa0497ea |
files | Changes mc-parse.c mc-switch.c stdio.h |
diffstat | 4 files changed, 27 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Mon Jun 07 17:55:37 2004 +0900 +++ b/Changes Mon Jun 07 22:57:41 2004 +0900 @@ -4804,4 +4804,16 @@ あと、delta!=1 だと、割算したときの余りが0であることを確認しないと いけない。gcc では、delta!=1 の表は出さないみたいだね。 +あと、行き先が同じcaseは、range check にするとか... +(まぁねぇ。。) + +ま、一応はできました。 + kernel とか gcc とか compile できると良いけどねぇ。 + +Mon Jun 7 18:24:27 JST 2004 + +さて、次は、構造体の初期化か、c2cbc か。mc-tree の分離か。 + +局所変数の初期化がレジスタ変数であるに関わらずスタックを +初期化しているな。
--- a/mc-parse.c Mon Jun 07 17:55:37 2004 +0900 +++ b/mc-parse.c Mon Jun 07 22:57:41 2004 +0900 @@ -1107,7 +1107,11 @@ emit_data(e,t,n); return offset+size(t); } else if(mode==LDECL) { - ass = assign_expr0(list2(LVAR,n->dsp+offset),e,t,type); + ass = assign_expr0( + (n->sc==REGISTER||n->sc==DREGISTER||n->sc==FREGISTER||n->sc==LREGISTER)? + list3(n->sc,n->dsp,(int)n): + list2(LVAR,n->dsp+offset), + e,t,type); init_vars = list2(ass,init_vars); return offset+size(t); } else {
--- a/mc-switch.c Mon Jun 07 17:55:37 2004 +0900 +++ b/mc-switch.c Mon Jun 07 22:57:41 2004 +0900 @@ -38,7 +38,7 @@ static int make_chunk(int cslist) { - int delta,delta1,list,p,count; + register int delta,delta1,list,p,count; // cslist is already sorted delta = 0; list = list4(cslist,0,1,list3(0,car(cslist) /* min */,0)); @@ -71,9 +71,9 @@ #define CASE_MERGE_RATE 70 -static int gcd(int i,int j) +static int gcd(int i0,int j0) { - int k; + register int k,i=i0,j=j0; if (i<j) { k=i; i=j; j=k;} for(;;) { if ((k=i%j)==0) return j; @@ -113,10 +113,12 @@ static int merge_chunk(int chunks) { - int list = chunks; - int tail,last,max,min,i; - int count,c_count,p,widest,delta=1; - int merge = 0; + register int list = chunks; + register int tail,last,max,min,i; + register int c_count,p,widest; + register int merge = 0; + int count,delta=1; + while(cadr(list)) { p = cadddr(list); c_count = count = car(p); max=caddr(p);