Mercurial > hg > CbC > old > device
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;