comparison Changes @ 128:d497c39add36 args-works

arg.c works (?)
author kono
date Thu, 03 Apr 2003 03:04:16 +0900
parents eb4d8975926c
children fea1b499d47b
comparison
equal deleted inserted replaced
127:eb4d8975926c 128:d497c39add36
2672 あ、そうか。register saveは、このy関数が呼び出された時点で 2672 あ、そうか。register saveは、このy関数が呼び出された時点で
2673 やってしまえば良い。そうすれば必要ない。戻り番地も既に xx 2673 やってしまえば良い。そうすれば必要ない。戻り番地も既に xx
2674 に入っている。だよね。 2674 に入っている。だよね。
2675 2675
2676 * gotoを呼び出した関数のr1 ! r1(goto前のr1) 2676 * gotoを呼び出した関数のr1 ! r1(goto前のr1)
2677 # * r30 <---------------r1_offset---------------> r1 2677 # * r30<--r1_offset-------------> r1
2678 r+ +----------+--+----------+----------------+-----------+----------+----+ 2678 r+ +----------+--+----------+----------------+-----------+----------+----+
2679 cousin arg xx reg save !callee arg !code local caller arg xx 2679 cousin arg xx reg save !callee arg !code local caller arg xx
2680 r20-r29 lvar>0 lvar<0 lvar>0x1000 000 2680 r20-r29 lvar>0 lvar<0 lvar>0x1000 000
2681 f20-f31 <-my_func_args--><--disp-----><-max_func_arg-> 2681 f20-f31 <-my_func_args--><--disp-----><-max_func_arg->
2682 *size_of_int *size_of_int 2682 *size_of_int *size_of_int
2686 のIA32実装と一致することになる。(引数の保存を除いて。いや、 2686 のIA32実装と一致することになる。(引数の保存を除いて。いや、
2687 元のも保存されているんじゃないの?) 2687 元のも保存されているんじゃないの?)
2688 2688
2689 それで、code segment から関数呼出しするときは? (ってことは、 2689 それで、code segment から関数呼出しするときは? (ってことは、
2690 それようのテストも必要なわけか...) 2690 それようのテストも必要なわけか...)
2691
2692 Wed Apr 2 17:40:32 JST 2003
2693
2694 register 変数が既に使われていても、わざわざsaveする必要はない。
2695 戻って来ないから。register を使ったことにするには、used_max_register_var
2696 を設定してやれば良い。
2697
2698 Interl版で goto が動かなくなったのは、arg_offset が、register 変数分
2699 も取るようになったから。save することを考えると、その方が良い。実際、
2700 function call があるとsaveされてしまう。ということは、別に r20-r29
2701 である必要はないってことか。通常のinput register varで良い。とすると、
2702 register変数をsaveする必要もないね。
2703 ただ、input regsiter var は、function callの前には saveする必要が
2704 ある。でも、これは、やっぱり手遅れか。ってことは、やっぱり、
2705 r20-r29が良いってことか。
2706
2707 jump() では、呼出し引数は、-arg_size つまり、局所変数と
2708 同じ扱いになっている。ってことは、
2709
2710 * gotoを呼び出した関数のr1 ! r1(goto前のr1)
2711 # * r30<----r1_offset---------> r1
2712 r+ +----------+--+----------+----------------+-----------+----------+----+
2713 cousin arg xx reg save !callee arg !code local caller arg xx
2714 r20-r29 lvar >0 lvar<0 lvar>0x1000 000
2715 f20-f31 <-my_func_args--><--disp-----><-max_func_arg->
2716 *size_of_int *size_of_int
2717
2718 r1 <----------------------r30 (return continuation)
2719
2720 で、callee arg は保存されたまま、code local だけ変わるってことだね。
2721
2722 return continuation で、構造体を返そうと思うと難しい。そもそも、
2723 浮動小数点が、ちゃんと返るのか?