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

最有用的评论

这提醒我可以在那里执行一些优化。 一个是如果省略参数的默认值无论如何都是零,另一个是如果默认值是可以内联到调用中的常量。

所有3条评论

如果使用省略参数调用带有可选参数的函数,则会生成蹦床。 它基本上将可选参数的初始化程序包装在适当的上下文中,并用它们调用原始函数。 如果您总是在提供所有参数的情况下调用带有可选参数的函数,则不必生成蹦床。

这提醒我可以在那里执行一些优化。 一个是如果省略参数的默认值无论如何都是零,另一个是如果默认值是可以内联到调用中的常量。

暂时关闭这个问题,因为它最近没有收到任何回复,所以我认为上面实施的优化已经充分解决了它。 如有需要,请随时重新开放!

此页面是否有帮助?
0 / 5 - 0 等级