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