Assemblyscript: 「トランポリン」コードの生成を無効にする方法は?

作成日 2018年05月09日  ·  3コメント  ·  ソース: AssemblyScript/assemblyscript

  (func $main/test (type $t1) (param $p0 i32) (param $p1 i32)
  ...)
  (func $main/test|trampoline (export "test") (type $t1) (param $p0 i32) (param $p1 i32)
    block $B0
      block $B1
        block $B2
          get_global $g25
          i32.const 1
          i32.sub
          br_table $B1 $B0 $B2
        end
        unreachable
      end
      i32.const 0
      set_local $p1
    end
    get_local $p0
    get_local $p1
    call $main/test)
  (func $~setargc (export "_setargc") (type $t2) (param $p0 i32)
    get_local $p0
    set_global $g25)
question

最も参考になるコメント

これは、そこでいくつかの最適化を実行できることを思い出させます。 1 つは、省略された引数のデフォルト値がとにかくゼロである場合であり、もう 1 つは、デフォルト値が呼び出しにインライン化できる定数である場合です。

全てのコメント3件

オプションの引数を持つ関数が省略された引数で呼び出された場合、トランポリンが生成されます。 基本的に、オプションの引数の初期化子を適切なコンテキストでラップし、それらを使用して元の関数を呼び出します。 すべての引数が指定されたオプションの引数を使用して関数を常に呼び出す場合、トランポリンを生成する必要はありません。

これは、そこでいくつかの最適化を実行できることを思い出させます。 1 つは、省略された引数のデフォルト値がとにかくゼロである場合であり、もう 1 つは、デフォルト値が呼び出しにインライン化できる定数である場合です。

最近返信を受け取っていないため、現時点ではこの問題をクローズしているため、上記で実装された最適化で十分に対処できると思います。 必要に応じて再開してください。

このページは役に立ちましたか?
0 / 5 - 0 評価