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);
--- a/stdio.h	Mon Jun 07 17:55:37 2004 +0900
+++ b/stdio.h	Mon Jun 07 22:57:41 2004 +0900
@@ -1,4 +1,4 @@
-#ifndef __micro_c__aaa
+#ifndef __micro_c__
 #include "/usr/include/stdio.h"
 long long strtoll(const char *, char **, int);
 #else