Mercurial > hg > Papers > 2011 > nobu-prosym
changeset 61:2c543a47737b
modify explanation of fastcall
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 26 Dec 2011 11:18:47 +0900 |
parents | a21d16da431a |
children | 7087484574b0 |
files | presen/index.html |
diffstat | 1 files changed, 12 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/presen/index.html Mon Dec 26 09:58:11 2011 +0900 +++ b/presen/index.html Mon Dec 26 11:18:47 2011 +0900 @@ -210,10 +210,10 @@ </div> <!-- PAGE --> <div class="slide"> - <h1>CbC の実装</h1> + <h1>CbCの実装</h1> <ul> <li>シンタックスの追加</li> - <li>fastcall属性の付与</li> + <li>レジスタによる引数渡し(fastcall属性の付与)</li> <li>Tail Call Elimination</li> <li>環境付き継続</li> <li>__rectype の実装</li> @@ -234,7 +234,7 @@ <li>コードセグメントへのgoto後は、 return の処理を自動で追加。</li> </ul> </ul> - <li class="incremental">gotoシンタックスの追加部分のソースは次のようになる。</li> + <li class="incremental">追加したgotoシンタックスの実際のソースは次のようになる。</li> </div> <!-- PAGE --> <div class="slide"> @@ -264,7 +264,7 @@ <!-- PAGE --> <div class="slide"> <h1>CbCの実装:シンタックスの追加</h1> - <h2>goto シンタックスの追加</h2> + <h2>gotoシンタックスの追加</h2> <li>最後にリターン文を生成することにより、次へと制御を映させず。また末尾最適化がかかるようになる。</li> <table border=1 width=100%> <tr class="center"> @@ -291,7 +291,7 @@ </div> <!-- PAGE --> <div class="slide"> - <h1>引数渡し</h1> + <h1>CbCの実装:引数渡し</h1> <li>当初、GCCを使ってコンパイルしたCbCのプログラムはMicro-C版に速度面で勝てなかった。</li> <ul> <li>Micro-Cでは関数呼び出しの際にできるだけレジスタを使うようにしていたため。</li> @@ -300,7 +300,7 @@ </div> <!-- PAGE --> <div class="slide"> - <h1>引数渡し(fastcall属性の付与)</h1> + <h1>CbCの実装:引数渡し(fastcall)</h1> <li>i386 において関数呼び出しの際、引数渡しをできるだけレジスタを用いるGCCの拡張機能。</li> <li>__code で宣言された関数は自動でfastcall属性が付与される。</li> <small> @@ -315,26 +315,17 @@ </div> <!-- PAGE --> <div class="slide"> - <h1></h1> + <h1>CbCの実装:TCE</h1> + <h2>Tail Call Elimination(TCE):末尾除去</h2> + <li>callではなくjmpを行い関数を呼ぶことでreturnを1度で済ませる最適化。</li> + <img src="./pix/continuation.png"> <li></li> - </div> - <!-- PAGE --> - <div class="slide"> - <h1></h1> - <li></li> + </div> <!-- PAGE --> <div class="slide"> - <h1></h1> - <pre> -typedef struct node { - selftype *right; - selftype *left; -}*NODE - </pre> - + <h1>CbCの実装:TCE</h1> <li></li> - </div> <!-- PAGE --> <div class="slide">