Mercurial > hg > CbC > old > device
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 浮動小数点が、ちゃんと返るのか? |