Mercurial > hg > CbC > old > device
changeset 106:3618c0efe9d3
fix save_input_register
author | kono |
---|---|
date | Tue, 18 Mar 2003 11:00:04 +0900 |
parents | 7e3d59e56a53 |
children | 06f72222d6b5 |
files | Changes mc-code-powerpc.c |
diffstat | 2 files changed, 15 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Tue Mar 18 01:54:46 2003 +0900 +++ b/Changes Tue Mar 18 11:00:04 2003 +0900 @@ -2275,5 +2275,9 @@ いずれにせよ、あんまり簡単な解決はないね。 - - +Tue Mar 18 10:46:48 JST 2003 + +結局、全部 stack にsave しました。そうすれば、変更は1行。 + +やっぱり、関数全体を構文木に落してからgexprするべきだよね。 +それ自体は、そんなに難しくないが。
--- a/mc-code-powerpc.c Tue Mar 18 01:54:46 2003 +0900 +++ b/mc-code-powerpc.c Tue Mar 18 11:00:04 2003 +0900 @@ -87,6 +87,8 @@ int MAX_INPUT_DREGISTER_VAR = 12-MIN_TMP_FREG; int MAX_CODE_INPUT_DREGISTER_VAR = 12-MIN_TMP_FREG; +#define CREG_REGISTER MAX_TMP_REG +#define FREG_FREGISTER MAX_TMP_FREG int powerpc_regs[REAL_MAX_REGISTER]; int powerpc_regv[REAL_MAX_REGISTER]; @@ -120,6 +122,7 @@ int code_d1(double d); int code_d2(double d); void code_save_stacks(); +void code_save_input_registers(); void clear_ptr_cache_reg(int r); int fregister_var(int r); int arg_offset_v(int arg); @@ -1085,8 +1088,7 @@ char *jrn,*crn; ret_type = cadddr(e1); - code_save_stacks(); - code_save_input_registers(); + void code_save_stacks(); /* now all input register vars are free */ e2 = cadr(e1); reg_arg_list = nargs = reg_arg = freg_arg = arg_assign = 0; @@ -1480,6 +1482,8 @@ code_enter1(int args) { printf("## args %d disp %d code_arg_offset=%d code_disp_offset=%d\n",args,disp,code_arg_offset,code_disp_offset); + set_creg(CREG_REGISTER,0); + set_freg(FREG_FREGISTER,0); } void @@ -1518,6 +1522,9 @@ void enter1() { + code_save_input_registers(); + set_creg(CREG_REGISTER,0); + set_freg(FREG_FREGISTER,0); } int