Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 1b97cb2b6e051d2f0ff0460714103eb4791a1832 https://github.com/WebKit/WebKit/commit/1b97cb2b6e051d2f0ff0460714103eb4791a1832 Author: Keith Miller <keith_mil...@apple.com> Date: 2023-10-04 (Wed, 04 Oct 2023)
Changed paths: M JSTests/wasm/stress/exception-simple-throw-catch.js M JSTests/wasm/stress/exception-throw-from-function-returning-tuple.js M Source/JavaScriptCore/interpreter/Interpreter.cpp M Source/JavaScriptCore/interpreter/Interpreter.h M Source/JavaScriptCore/jit/JITExceptions.cpp M Source/JavaScriptCore/llint/InPlaceInterpreter.asm M Source/JavaScriptCore/llint/InPlaceInterpreter.cpp M Source/JavaScriptCore/llint/InPlaceInterpreter.h M Source/JavaScriptCore/llint/LowLevelInterpreter.asm M Source/JavaScriptCore/llint/LowLevelInterpreter64.asm M Source/JavaScriptCore/llint/WebAssembly.asm M Source/JavaScriptCore/offlineasm/arm64.rb M Source/JavaScriptCore/offlineasm/x86.rb M Source/JavaScriptCore/runtime/VM.h M Source/JavaScriptCore/wasm/WasmCallee.cpp M Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.h M Source/JavaScriptCore/wasm/WasmFunctionParser.h M Source/JavaScriptCore/wasm/WasmHandlerInfo.cpp M Source/JavaScriptCore/wasm/WasmHandlerInfo.h M Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp M Source/JavaScriptCore/wasm/WasmIPIntSlowPaths.cpp M Source/JavaScriptCore/wasm/WasmIPIntSlowPaths.h Log Message: ----------- [IPInt] Add support for the exceptions proposal (except rethrow) https://bugs.webkit.org/show_bug.cgi?id=262446 Reviewed by Justin Michaud. This patch adds support for the Wasm exceptions proposal, with the exception (pun intended) of rethrow. Rethrow is suffiecently complicated in the IPInt that it should be in its own patch. Exceptions work mostly as they do in the rest of JSC. When an exception is thrown we write the target PC and the (newly added) MC to the VM. These tell us where to go once we've reentered the IPInt. There's also two new entrypoints to the IPInt, one for regular catch blocks and one for catch_all blocks. Like the Wasm LLInt, IPInt exception handling works based on PC ranges. The current PC is (now) stored to the CallFrame's CallSiteIndex when making calls / performing operations. When an exception is thrown we check that the PC from the CallFrame is inside the range from one of the function's HandlerInfo. This patch also has a couple of other fixes/improvements: 1) offlineasm self moves should actually be elided. Previously we were checking that the two ruby objects had the same address, which didn't work. 2) Add a dump to the IPInt, which tells you what the PC and MC should be for each instruction. 3) Move the _ipint_call_impl call label below the call interpreter macros so it's clear _ipint_call_impl can fall through to .ipint_call_common. 4) Add a message to the IPInt validation so you know which opcodes are too big. 5) Rename WasmCodeBlock to UnboxedWasmCalleeStackSlot. 6) Rename LLIntReturnPC to CallSiteIndex to match CallFrame. * JSTests/wasm/stress/exception-liveness-tier-up.js: (assert.eq.): Deleted. (assert.eq): Deleted. * JSTests/wasm/stress/exception-simple-throw-catch.js: (testSimpleTryCatchValue2): (testNestedCatch): * JSTests/wasm/stress/exception-throw-from-function-returning-tuple.js: (testCatchWithExceptionThrownFromFunctionReturningTuple3): (testCatchWithExceptionThrownFromJSReturningTuple.callback): (testCatchWithExceptionThrownFromJSReturningTuple): * Source/JavaScriptCore/interpreter/Interpreter.cpp: (JSC::CatchInfo::CatchInfo): * Source/JavaScriptCore/interpreter/Interpreter.h: * Source/JavaScriptCore/jit/JITExceptions.cpp: (JSC::genericUnwind): * Source/JavaScriptCore/llint/InPlaceInterpreter.asm: * Source/JavaScriptCore/llint/InPlaceInterpreter.cpp: * Source/JavaScriptCore/llint/InPlaceInterpreter.h: * Source/JavaScriptCore/llint/WebAssembly.asm: * Source/JavaScriptCore/offlineasm/arm64.rb: * Source/JavaScriptCore/runtime/VM.h: * Source/JavaScriptCore/wasm/WasmCallee.cpp: (JSC::Wasm::IPIntCallee::IPIntCallee): * Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.h: * Source/JavaScriptCore/wasm/WasmFunctionParser.h: (JSC::Wasm::FunctionParser::getStackHeightInValues const): * Source/JavaScriptCore/wasm/WasmHandlerInfo.cpp: (JSC::Wasm::HandlerInfo::initialize): * Source/JavaScriptCore/wasm/WasmHandlerInfo.h: (JSC::Wasm::UnlinkedHandlerInfo::UnlinkedHandlerInfo): * Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp: (JSC::Wasm::IPIntGenerator::condenseControlFlowInstructions): (JSC::Wasm::IPIntGenerator::addTry): (JSC::Wasm::IPIntGenerator::convertTryToCatch): (JSC::Wasm::IPIntGenerator::addCatch): (JSC::Wasm::IPIntGenerator::addCatchToUnreachable): (JSC::Wasm::IPIntGenerator::addCatchAllToUnreachable): (JSC::Wasm::IPIntGenerator::addDelegate): (JSC::Wasm::IPIntGenerator::addDelegateToUnreachable): (JSC::Wasm::IPIntGenerator::addThrow): (JSC::Wasm::IPIntGenerator::addEndToUnreachable): (JSC::Wasm::IPIntGenerator::dump): * Source/JavaScriptCore/wasm/WasmIPIntSlowPaths.cpp: (JSC::LLInt::WASM_IPINT_EXTERN_CPP_DECL): * Source/JavaScriptCore/wasm/WasmIPIntSlowPaths.h: * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipperInlines.h: Removed. Canonical link: https://commits.webkit.org/268872@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes