前言
C#编译体系下,多个编译器组成。复杂无比,其中的RyuJIT是编译器的最后一环,本篇来看下。
概括
RyuJIT的来由:
Why "RyuJIT"?
Ryujin is a Japanese Sea Dragon
We wanted something with "JIT" in the name, and the idea of a dragon came to mind because of the Dragon book that we all know and love. So – we just adapted the name of the Japanese sea dragon, Ryujin.
翻译:
RyuJIT是来自于日本海龙
我们想要一些名字中带有“JIT”的东西,由于我们都知道和喜爱的龙,
龙的想法浮现在脑海中。所以——我们只是改编了日本海龙的名字,RyuJIT。
JIT的历史
代码库早于 .NET
设计为仅支持 x86
随着时间的推移而发展、增强和扩展,并且仍在不断发展
主要JIT变化
前端:值编号、SSA
后端:线性扫描寄存器分配,降低
JIT的设计思路:
主要设计注意事项
与以前的 JIT 具有高兼容性标准
支持并实现良好的运行时性能
通过在很大程度上线性阶数优化和转换以及固有超线性的限制来确保良好的吞吐量。
启用一系列目标和方案。
JIT的三大部分
初始阶段:这里主要是指导入IL代码,然后进行变形编程BB块
优化阶段:主要是常量优化,循环提升,去虚拟保护,去边界检查等等
后端阶段:这里主要是指从IR中间表象,生成机器码和汇编代码
JIT代码部分
JIT代码部分其实只要看三个地方就足够了
其一:导入MSIL部分
其二:循环loop提升部分
其三:生成机器码部分
结尾:
作者:江湖评谈