# HG changeset patch # User kono # Date 1137340376 -32400 # Node ID 3f60e599cc0474637e2829eb3f260a64879f88d6 # Parent ad9ef203f95b4dc502229700d5c48de6c3191afb *** empty log message *** diff -r ad9ef203f95b -r 3f60e599cc04 Changes --- a/Changes Sun Jan 15 22:40:23 2006 +0900 +++ b/Changes Mon Jan 16 00:52:56 2006 +0900 @@ -8386,7 +8386,32 @@ そもそも、そうでないと parallel assignment がうまく動かない はずだよね。 - - - - +というわけで、disp_offset==code_disp_offset は必須ということに +なりました。これで、code_fix_frame_pointer はなくなりました。 + +non destructive creg ってのは、あっても良いかも。 + +Sun Jan 15 23:16:10 JST 2006 + +あーぁ、ia32 のレジスタ変数がloopでは、virtualがずれるので +うまく動かない。jmp では、標準に直すべきなのか。ってことは、 +ia32 ではレジスタはやっぱり禁止か。か、あるいは、virtual +を止めるかだね。esi/edi はvirtualしないっていう風にすれば +いいか。lreg は? + +いや、だめですね。check_virtual みたいな方法だと、もっと、 +いろいろ変更しないと動かない。use_data_reg() とかは、 +根本的にだめってことじゃないか? (いまさら?) + +use_register(reg,REG_EAX) などが、 reg = use_register(reg,REG_EAX); +という形式ならば、rename し切れなかった時に、別なレジスタを返せる。 + +通常は register はcopy して使うわけだから、rename はされな +い。setup_edx とか、get_register で esi/edi が返されて rename +されてしまった時がまずいわけだけよね。 その時だけ check_virtual +すれば? + +esi/edi をget_regsiter しないと、assop などで、致命的に足り +ないことになる。 + + diff -r ad9ef203f95b -r 3f60e599cc04 mc-code-ia32.c --- a/mc-code-ia32.c Sun Jan 15 22:40:23 2006 +0900 +++ b/mc-code-ia32.c Mon Jan 16 00:52:56 2006 +0900 @@ -713,7 +713,13 @@ int get_register_var(NMTBL *nptr) { +#if 0 int i,j; + どうしても、%esi,%edi がvirtualでずれてループしてしまうのを + 止められないので、とりえあず諦める。 + + edx_setup あたりがまずいらしいが... + if (reg_var<2) { for(i=REG_ESI;ic[i]=i; + for(register int i=0;i<100;i++) arg->c[i]=i; } int @@ -58,7 +58,7 @@ ret = return; env = environment; - goto throw(arg,1,76); + goto throw(arg,-7,76); } int @@ -79,7 +79,7 @@ ret = return; env = environment; - goto throw1(arg,1,77),space; + goto throw1(arg,-6,77),space; } int @@ -99,7 +99,7 @@ ret = return; env = environment; - goto throw1(arg,1,78); + goto throw1(arg,-5,78); } int diff -r ad9ef203f95b -r 3f60e599cc04 test/throw.code-out --- a/test/throw.code-out Sun Jan 15 22:40:23 2006 +0900 +++ b/test/throw.code-out Mon Jan 16 00:52:56 2006 +0900 @@ -1,7 +1,7 @@ main0 -96 3 66 76 -97 3 66 75 +96 3 66 -7 76 +97 3 66 -7 75 main1 -98 3 66 77 +98 3 66 -6 77 main2 -99 3 66 78 +99 3 66 -5 78