changeset 413:d4dc6d99ffdb

*** empty log message ***
author kono
date Wed, 20 Oct 2004 00:32:36 +0900
parents 6b3385124e5e
children 0a4416b34d4a
files Changes mc-code-arm.c
diffstat 2 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Tue Oct 19 23:39:42 2004 +0900
+++ b/Changes	Wed Oct 20 00:32:36 2004 +0900
@@ -6165,3 +6165,10 @@
 
 ってことは、一時変数ではなく積極的にレジスタ変数を使った方が
 良いわけだけど...
+
+save_stack で register var はsave する必要はない。けど...
+
+longlong_lib で creg は RET_LREG になっていたけど、その外で、
+emit_pop_free する時に、その一部がRET_LREGと重なっていて、
+一緒にfreeされてしまう。そうすると、次のemit_popで、上書きされてしまう。
+なので、RET_LREGにしないで、lmove してしまうのが良い。
--- a/mc-code-arm.c	Tue Oct 19 23:39:42 2004 +0900
+++ b/mc-code-arm.c	Wed Oct 20 00:32:36 2004 +0900
@@ -5053,10 +5053,10 @@
     clear_ptr_cache();
     set_operands(regv_l(reg),regv_h(reg),regv_l(oreg),regv_h(oreg));
     extern_conv(lib);
-    set_lreg(RET_LREGISTER,0);
-}
-
-#define check_lreg(reg) if (reg!=lreg) { lmove(reg,lreg); }
+    // set_lreg(RET_LREGISTER,0);
+}
+
+#define check_lreg(reg) lmove(reg,RET_LREGISTER)
 
 void
 ltosop(int op,int reg,int oreg)