# HG changeset patch # User kono # Date 1098199956 -32400 # Node ID d4dc6d99ffdb370553acaf0314ac3a6ca99639fe # Parent 6b3385124e5e4ecf853de715f08eea19a7509a7f *** empty log message *** diff -r 6b3385124e5e -r d4dc6d99ffdb Changes --- 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 してしまうのが良い。 diff -r 6b3385124e5e -r d4dc6d99ffdb mc-code-arm.c --- 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)