V8-0.2.5: JIT代码生成逻辑

| categories notes 
tags V8  JIT 

JIT的执行入口在

v8::internal::Invoke(...) {
    ...
    // Call the function through the right JS entry stub.
    value = CALL_GENERATED_CODE(entry, func->code()->entry(), *func, *receiver, argc, args);
}

entryJSEntryStub,即JS入口桩代码。

桩代码的生成逻辑在JSEntryStub::GenerateBody

桩代码中通过一个帮助函数跳转到JS的JIT代码,帮助函数通过Generate_JSEntryTrampolineHelper生成

JS的JIT代码通过Ia32CodeGenerator::GenCode生成

在JS的JIT代码中,如果要调用Runtime的函数(例如DOM函数,或者JS的builtin函数),则通过CEntryStub实现,即C入口桩代码

在进入C入口桩代码前,通过MacroAssembler::TailCallRuntimeMacroAssembler::JumpToBuiltin生成跳转桥梁

整个逻辑如下见V8的JIT代码调用关系

If you liked this post, you can share it with your followers !