# HG changeset patch # User Nobuyasu Oshiro # Date 1324865927 -32400 # Node ID 2c543a47737b9ec151bd57416556073395bcb76a # Parent a21d16da431a027730e2c722b7e441954900d51d modify explanation of fastcall diff -r a21d16da431a -r 2c543a47737b presen/index.html --- 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 @@
-

CbC の実装

+

CbCの実装

-
  • gotoシンタックスの追加部分のソースは次のようになる。
  • +
  • 追加したgotoシンタックスの実際のソースは次のようになる。
  • @@ -264,7 +264,7 @@

    CbCの実装:シンタックスの追加

    -

    goto シンタックスの追加

    +

    gotoシンタックスの追加

  • 最後にリターン文を生成することにより、次へと制御を映させず。また末尾最適化がかかるようになる。
  • @@ -291,7 +291,7 @@
    -

    引数渡し

    +

    CbCの実装:引数渡し

  • 当初、GCCを使ってコンパイルしたCbCのプログラムはMicro-C版に速度面で勝てなかった。
    • Micro-Cでは関数呼び出しの際にできるだけレジスタを使うようにしていたため。
    • @@ -300,7 +300,7 @@
    -

    引数渡し(fastcall属性の付与)

    +

    CbCの実装:引数渡し(fastcall)

  • i386 において関数呼び出しの際、引数渡しをできるだけレジスタを用いるGCCの拡張機能。
  • __code で宣言された関数は自動でfastcall属性が付与される。
  • @@ -315,26 +315,17 @@
    -

    +

    CbCの実装:TCE

    +

    Tail Call Elimination(TCE):末尾除去

    +
  • callではなくjmpを行い関数を呼ぶことでreturnを1度で済ませる最適化。
  • +
  • -
    - -
    -

    -
  • +
    -

    -
    -typedef struct node {
    - selftype *right;
    - selftype *left;
    -}*NODE	  
    -	
    - +

    CbCの実装:TCE

  • -