メモ Edit

コード生成 Edit

もっとシンプルなものにしよう。

レジスタの概要 Edit

  • 1つのレジスタのサイズは4バイト。
  • レジスタ数は暫定で64。
  • s64,f64など64bitな値型はレジスタに格納することができないのでstructやpodなどと同じ扱いを受ける。

変数とレジスタ Edit

  • ローカル変数は全てレジスタに割り当てられる。
  • スコープを考慮してレジスタの使用数はなるべく少なくて済むように最適化される。
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
    
    -
    |
    -
    |
    |
    -
    |
    !
    |
    -
    |
    !
    !
    !
    
    utility Hoge {
    static void func()
    {
        int a; // R00
        int b; // R01
        {
            int c; // R03
        }
        int d; // R02
        {
            int e; // R03
        }
    }
    };

引数とレジスタ Edit

  • 引数は先頭から順番にレジスタに割り当てられる。
  • 非staticなメンバ関数はR00にthisポインタが割り当てられる。
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
    
     
    -
    |
    |
    |
    |
    |
    -
    |
    |
    !
    !
     
    
    pod Vector3
    {
        float x;
        float y;
        float z;
     
        void func(float addValue)
        {
            // R00 : this
            // R01 : addValue
        }
    }
    

戻り値とレジスタ Edit

  • 戻り値はR00に格納される。
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
    
     
    -
    |
    -
    |
    !
    !
     
    
    utility Hoge
    {
        static int GetOne()
        {
            return 1; // R00 = 1
        }
    };
    

    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS