v8-native-prototype 是用于 TurboFan 的原型本地解码器。
示例代码:
void TestWasmDecodingSpeed() { byte code[] = {kStmtSetLocal, 0, kExprInt32Add, kExprGetLocal, 0, kExprInt8Const, 5}; Zone zone; LR_WasmDecoder decoder(&zone, nullptr); FunctionSig::Builder builder(&zone, 1, 1); builder.AddReturn(kAstInt32); builder.AddParam(kAstInt32); FunctionEnv env = {nullptr, builder.Build(), 0, 0, 0, 0}; // Make COUNT copies of the above code. const int TRIALS = 10; const int COUNT = (4 * 1024) / sizeof(code); const int TOTAL = COUNT * sizeof(code); byte* big_code = reinterpret_cast<byte*>(zone.New(TOTAL)); for (int i = 0; i < COUNT; i++) { memcpy(big_code + i * sizeof(code), code, sizeof(code)); } for (int i = 0; i < TRIALS; i++) { base::ElapsedTimer timer; timer.Start(); Result result = decoder.Decode(&env, big_code, big_code + TOTAL); int64_t us = timer.Elapsed().InMicroseconds(); OFStream os(stdout); double rate = ((TOTAL * 1000000.0) / us) / 1048576; os << result << TOTAL << " bytes, us: " << us << " (" << rate << " MB/sec)" << std::endl; } }