changeset 120:099518ea9cc1

input args offset (continue..)
author kono
date Sun, 23 Mar 2003 20:48:36 +0900
parents b815fcd57b9d
children 00df510bc116
files mc-code-powerpc.c mc-parse.c
diffstat 2 files changed, 11 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/mc-code-powerpc.c	Sun Mar 23 19:23:29 2003 +0900
+++ b/mc-code-powerpc.c	Sun Mar 23 20:48:36 2003 +0900
@@ -149,7 +149,7 @@
                           reg_save      disp       max_func_args*size_of_int
         lvar>0                         lvar<0       lvar>0x1000 0000
  */
-int arg_offset = 24; int arg_offset1 = 24;
+int arg_offset = 44; int arg_offset1 = 24;
 int disp_offset = 0;
 #define r1_offset 60 
 #define func_disp_offset (r1_offset-12)
@@ -260,7 +260,7 @@
 int 
 get_register(void)
 {    /* 使われていないレジスタを調べる */
-    int i;
+    int i,reg;
     for(i=MAX_TMP_REG;i>MIN_TMP_REG;i--) {
 	if (regs[i]) continue;  /* 使われている */
 	regs[i]=USING_REG;      /* そのレジスタを使うことを宣言し */
@@ -277,11 +277,11 @@
     }
     /* search register stack */
     for(i=0;i<reg_sp;i++) {
-	if (reg_stack[i]>=0) {
+	if ((reg=reg_stack[i])>=0) {
             code_assign_lvar(
-                (reg_stack[i]=new_lvar(size_of_int)),i,0); 
+                (reg_stack[i]=new_lvar(size_of_int)),reg,0); 
             reg_stack[i]= reg_stack[i]-REG_LVAR_OFFSET;
-	    return i;
+	    return reg;
 	}
     }
     /* 空いている場所がないなら、エラー (いったい誰が使ってるの?) */
@@ -309,7 +309,7 @@
             code_dassign_lvar(
                 (freg_stack[i]=new_lvar(size_of_double)),reg,1); 
             freg_stack[i]= freg_stack[i]-REG_LVAR_OFFSET;
-	    return i;
+	    return reg;
 	}
     }
     /* 空いている場所がないなら、エラー (いったい誰が使ってるの?) */
@@ -1225,9 +1225,10 @@
 	} else if (tag==DREGISTER) {
 	    /* fregs[reg]==INPUT_REG case should be considered */
 	    n->dsp = offset;
-	    offset+=size_of_double;
-	    t = DOUBLE;
-	    reg_offset+=2;
+	    t = n->ty;
+	    if(t==FLOAT) { offset+=1; reg_offset+=1; }
+	    else if(t==DOUBLE) { offset+=2; reg_offset+=2; }
+	    else error(-1);
 	} else 
 	    continue;
 	n->sc  = LVAR;
--- a/mc-parse.c	Sun Mar 23 19:23:29 2003 +0900
+++ b/mc-parse.c	Sun Mar 23 20:48:36 2003 +0900
@@ -2922,7 +2922,7 @@
 		return (symval=0);
 	    }
 	}
-	if (nptrm->sc!=EMPTY) {
+	if (nptrm->sc!=EMPTY&&(nptrm->sc!=FMACRO||ch=='(')) {
 	    i = mode;
 	    mode = STAT;
 	    macrop = 0;