Google V8解释器(代号Ignition)设计文档的阅读感想

Google V8解释器(代号Ignition)设计文档的阅读感想

https://docs.google.com/document/d/11T2CRex9hXxoJwbYqVQ32yIPMh0uouUZLdyrtmMoL44/edit?ts=56f27d9d#

1、字节码使用了x86的变长设计,可以前缀扩展到最多4个字节,以支持宽操作数?
2、对于属性访问,所谓的TypeFeedbackVector使得解释器和优化编译器后端可以使用同样的IC code stub,这里不太明白?为什么一元和二元操作反而不行呢?TFV引用原始AST的节点
3、注意这里的CodeStubAssember(CSA),它用于JIT生成每个bytecode的handler(原文:Bytecode handlers are generated by the TurboFan compiler.),每个handler结尾通过特殊的dispatch直接跳转到下一个handler(这里让我想起了CPS~~)
4、每个BytecodeArray的常量池支持任意长度?“复杂性来自用常量池存储前向跳转”,不过之前做过v8的SH4移植,这个复杂性其实还不算复杂,只是一个编程trick而已
5、累加器(accumulator)指的就是一个通用的临时变量吧?context寄存器无非也相当于机器指令里面的fp而已吧?

我的观点:

解释器的字节码设计对于那种普通的数值计算循环语句实际上是最浪费效率的,deoptimization(去优化),即从TurboFun跳回Ignition,涉及两种Stack Frame的即时构造和切换,是基于一类特殊的CheckXxx检查指令的。也就是说,如果某些约束条件不再满足,即无法再以优化编译的机器指令运行。

但是,如果可以设计一种特殊的“超级字节码”,它相当于汇编语言概念里的“宏指令”,即有可能将一整个循环语句映射为一个字节码,完全不需要生成多个字节码的序列。这样一来,解释器实际上几乎就相当于以模板转换的方法,直接映射为机器指令运行了。不过究竟这个思路如果落实到实现,我还没有什么想法。不清楚这个文档说的Super bytecode就是我指的这个意思?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值