Mercurial > hg > Papers > 2011 > nobu-prosym
annotate presen/advice.txt @ 59:6ef99d3e66b2
modify light-weight continuation
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 26 Dec 2011 08:24:23 +0900 |
parents | 46cc88d1051c |
children |
rev | line source |
---|---|
56
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 Continuation |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 ベーシック |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 環境付き継続が普通。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 schemeとの継続は違う |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 light-weight |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 スタック |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 会議室 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 SICP のContinuation |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 Micro-C 2001 年 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 『GCC上の』をつける。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 『行った~』くらいに。赤いみない。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 難しいところがどこで、どうやって解決し方。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 フルセットのCに |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 C with Continuation |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 それを制限するとContinuation Based Cになる。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 より高度に最適化。。。の部分は外す。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 どのパス |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 コンパイラは幾つかパスを通る。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 そのたんびにTree |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 トレースをだす。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 GCC をいじるというのはどういうことなのかをいいたい。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 execute_pass_list: 1616 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 passes.c:1558 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 execute_one_pass() を読んでないと行けない。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 pass_execute |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 pass の前後でデバッグオプションがあるから |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 NEXT_PASS はオプティマイゼーションパス |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 passes.c: |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 do_per_function() |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 IPAモード関数単位でしかコンパイルしない場合…?。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 NEXT_PASS |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 OpenMP 様 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 eh = error handler |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 worn_function_return はcbCなのにreturn |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 NEXT_PASS (pass_build_ssa); |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 昔はGIMPLEは残っていたけど、消されてはまった。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 INter procedure Optimization |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 (ipa) |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 CbC だとほとんど使わないはず。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 なので、CbC で書いたほうが性能が悪くなる可能性がある。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 SSAからgimpleにもどす。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 昔はいきなりRTLに変換していた |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 SSAをRTLに変換するルーチン |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 cse |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 common se… elimination |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 共通部分の最適化 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 pass の中でコード生成されていたと思うので。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 最終的にコード生成のところまでいくのはながい。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 SSAからgimpleに戻しているところがあるはず… |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 gimple_expand cfg |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 pass_expand から |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 call_expand は gimple から rtl を生成しているはず。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 こっから下は |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 rtlをSSAに変換しているアホがいる。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 そこのスライドはこのパスにそって説明する必要がある。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 pass_expandから上としたは全然ちがう。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 call_expandはgimpleだけど途中SSAに変換してgimpleに戻す。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 実際にpass_listがあって、そのpass_listの中でexpand_callがどこにあるのかっていうのを説明してほしい。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 なぜか、プログラミングシンポジウムはハッカーの為の詳細なので、 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 GCCを今いじるならどんなふうにいじるのか。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 自分が以下にGCCを理解しているのかを行って欲しい。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 実際は |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 gotoとなってるけど、単にfactorialと書いたのと同じだよね。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 factorial0() |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 goto factorial() |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 だとtail recursive call が矯正される。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 右側のgoto はとる。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 実際にどんな引数渡しになるのか。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 micro-C ベースのやつがレジスタ渡しだったのでださいコンパイラに負けるということになった。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 Intel64はレジスタが増えた。レジスタ16になったから増えた。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 basic.c は引数渡しに使われるレジスタの数を調べる。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 表にする。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 i386 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 ia64 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 引数は浮動小数点と整数があるよね。その浮動小数点と整数の2つを。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 環境付き継続がの説明のスライド。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 本来はクロージャである必要はない。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 GCCで |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 setjmpで実装しても問題はあまり変わらなくて。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 それでどうなるか、static を使うと |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 thread local な static だったらうまくいくのでは。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 setjmpでない普通のやつを先に。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 setjmpのソースは |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 どうやって生成しているかのソースを内部的に生成しているのをみせてもいいと。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 問題は return val 。だから意味がない。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 setjmp |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 重要なのはretval。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 これでない |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 問題はreturn val がmainの中の環境にある。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 これが普通のローカル変数だと、tail recurcive でぬけると駄目になる。だからstatic にしないといけない。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 static にすればこれを |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 なぜまずかったのか。mainから tail recursive call で抜けてるからまずい。普通にcallすれば生きてるので、 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 クロージャを使ってうまくできると… |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
159 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
160 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 mainで抜ける所で |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 goto は二種類。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 普通の関数からgotoする場合。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 コードセグメントからgotoする場合で実装が違う。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 statci tls をスレッドローカルにすればいんだけど、実際には決まったレジスタにすればいい。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 レジスタとは->リターンするレジスタ |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
171 書きこむ先は相手側にあるので関係ない。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172 それをそっちの方にコピーするってのはどっかそのへんでやっている。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173 多分return 文の中でコピーする。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 return は |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
175 正しく構造体の戻り値を指していればいいだけで、 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
176 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
177 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
178 引数がついている。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
179 構造体の場合は引数で一個呼ばれているのでその引数をとっておかないといけなくて。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180 実は引数、 evnpがついてる。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
181 値を返す evnp がさしてる allocate させてるところにおいてもいい。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
182 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
183 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
184 evnpni |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
186 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
187 Micro-C ではフレームポインタが入っている。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
188 実装ではフレームピオンタが入っている。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
189 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191 さっき行ったとおり、return val はレジスタでいいので、return レジスタ |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
192 simple return; |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
193 return だけで戻る。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
194 前にレジスタを設定したので戻ってくると。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
195 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
196 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
197 関数の戻りからの動作はおもいので、 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
198 goto 剃る前にはレジスタの値がきまっているはず。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
199 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
200 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
201 return val があればbuild1 で |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
202 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
203 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204 if(0)なので中にはいってこない。このコードが最適化で消えないように工夫しないといけない。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205 最適化をかけるとここがきえちゃう。消えないようにCOND をいれて〜とかある。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
206 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
207 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
208 cbc_exit0: が外から |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 TREE_used とか |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
210 c_decl_flag_label |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
211 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
212 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
213 最適化で消えちゃわないようになってる。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
216 最適化かけてうまく動かなかいのはこのコードが消されちゃうから。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
217 そのあたりをチェック。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
219 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
220 setjmp 使えば常にもどれるので。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 CbCのなかでsetjmp してlongjmp をかいてももどれる。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226 CbC バージョン GCC バージョン |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 typedef |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
228 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
229 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
230 __rectype |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
231 __selftype |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
232 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
233 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
234 それを入れるためにはどうすればいいのかっていうのも議論すればいい。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
235 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
236 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
237 typdef をやると、先輩たちがやって |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
238 もちろん両方。 |
46cc88d1051c
add presen/advice.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
239 |