Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 6f23b5f4342c809f33e206690b8bde942a9daa1d https://github.com/WebKit/WebKit/commit/6f23b5f4342c809f33e206690b8bde942a9daa1d Author: Daniel Liu <danl...@umich.edu> Date: 2023-08-11 (Fri, 11 Aug 2023)
Changed paths: M JSTests/wasm/ipint-tests/ipint-test-call-add12.js A JSTests/wasm/ipint-tests/ipint-test-local-large.js A JSTests/wasm/ipint-tests/ipint-test-nesting.js A JSTests/wasm/ipint-tests/ipint-test-return-minus.js M Source/JavaScriptCore/llint/InPlaceInterpreter.asm M Source/JavaScriptCore/wasm/WasmCallee.cpp M Source/JavaScriptCore/wasm/WasmCallee.h M Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.cpp M Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.h M Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp Log Message: ----------- Add in place interpreter optimizations https://bugs.webkit.org/show_bug.cgi?id=259798 rdar://113358427 Reviewed by Justin Michaud. Added a variety of optimizations to improve the performance of the in-place interpreter: - Added new mini-interpreters (mINT, uINT, and argumINT) to optimize the calling convention by not loading/storing registers pessimistically. - argumINT also allows locals to index directly using their original index. - Added a "condensing" behavior that allows long runs of block/loop and end instructions to be skipped when interpreting by modifying metadata entries to jump past these groups of instructions. - Transitioned to unaligned metadata, allowing almost all instructions to save bytes by compacting their metadata. - Added compact forms for i32.const and local.get/set, which allow IPInt to read directly from the bytecode if the index is <128, saving 4B of metadata. Scores 37.755 on JS2's Wasm tests, versus 34.926 for LLInt. Startup time on UE4 Zen Garden: starts up 7.2% faster (220 ms vs 237 ms), while utilizing 9.1% less memory (421 MB vs 463 MB) * JSTests/wasm/ipint-tests/ipint-test-nesting.js: Added. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.result.i32.block.result.i32.block.result.i32.block.result.i32.block.result.i32.block.result.i32.block.result.i32.block.result.i32.block.result.i32.block.result.i32.block.result.i32.block.result.i32.i32.const.3.br.5.block.param.i32.result.i32.block.result.i32.i32.const.2.i32.add.return.func.export.string_appeared_here.param.i32.result.i32.block.block.block.loop.block.loop.block.local.0.i32.const.1.i32.add.local.0.loop.block.nop.loop.loop.loop.local.0.local.0.local.0.return.async test): * Source/JavaScriptCore/llint/InPlaceInterpreter.asm: * Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.cpp: (JSC::Wasm::FunctionIPIntMetadataGenerator::addBlankSpace): (JSC::Wasm::FunctionIPIntMetadataGenerator::addRawValue): (JSC::Wasm::FunctionIPIntMetadataGenerator::addLEB128ConstantInt32AndLength): (JSC::Wasm::FunctionIPIntMetadataGenerator::addLEB128ConstantAndLengthForType): (JSC::Wasm::FunctionIPIntMetadataGenerator::addReturnData): * Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.h: * Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp: (JSC::Wasm::IPIntGenerator::condenseControlFlowInstructions): (JSC::Wasm::IPIntGenerator::addBlock): (JSC::Wasm::IPIntGenerator::addLoop): Canonical link: https://commits.webkit.org/266826@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes