Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 4aeafe5991bcfa11babf29a942217a7b9f2272bb
      
https://github.com/WebKit/WebKit/commit/4aeafe5991bcfa11babf29a942217a7b9f2272bb
  Author: Yusuke Suzuki <[email protected]>
  Date:   2023-03-06 (Mon, 06 Mar 2023)

  Changed paths:
    M Source/JavaScriptCore/interpreter/Interpreter.cpp
    M Source/JavaScriptCore/interpreter/Interpreter.h
    M Source/JavaScriptCore/jit/JITExceptions.cpp
    M Source/JavaScriptCore/runtime/VM.h
    M Source/JavaScriptCore/wasm/WasmAirIRGenerator32_64.cpp
    M Source/JavaScriptCore/wasm/WasmAirIRGenerator64.cpp
    M Source/JavaScriptCore/wasm/WasmAirIRGeneratorBase.h
    M Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp
    M Source/JavaScriptCore/wasm/WasmBBQJIT.cpp
    M Source/JavaScriptCore/wasm/WasmIRGeneratorHelpers.h
    M Source/JavaScriptCore/wasm/WasmOperations.cpp
    M Source/JavaScriptCore/wasm/WasmOperations.h
    M Source/JavaScriptCore/wasm/WasmThunks.cpp
    M Source/JavaScriptCore/wasm/WasmThunks.h
    M Source/JavaScriptCore/wasm/js/JSWebAssemblyException.h

  Log Message:
  -----------
  [JSC] Extract wasm Catch runway into thunk
https://bugs.webkit.org/show_bug.cgi?id=253407
rdar://106249350

Reviewed by Justin Michaud.

Wasm catch requires a lot of code. And this is not so great given that some of 
super large realworld websites use
massive amount of try-catch inside wasm.

This patch extracts wasm catch runway into a thunk, and share it in all wasm 
tiers. And each wasm functions' catch
only includes the remaining part. VM now has a pointer which is used after the 
wasm catch runway. And thunk dispatches
this after setting up things. This is the same design to what wasm LLInt is 
doing basically. This change can reduce
code size significantly.

* Source/JavaScriptCore/interpreter/Interpreter.cpp:
(JSC::CatchInfo::CatchInfo):
* Source/JavaScriptCore/interpreter/Interpreter.h:
* Source/JavaScriptCore/jit/JITExceptions.cpp:
(JSC::genericUnwind):
* Source/JavaScriptCore/runtime/VM.h:
* Source/JavaScriptCore/wasm/WasmAirIRGenerator32_64.cpp:
(JSC::Wasm::buildEntryBufferForCatch32):
(JSC::Wasm::buildEntryBufferForCatchSIMD32):
(JSC::Wasm::buildEntryBufferForCatchNoSIMD32):
(JSC::Wasm::emitCatchPrologueShared):
(JSC::Wasm::AirIRGenerator32::finalizeEntrypoints):
(JSC::Wasm::AirIRGenerator32::emitCatchImpl):
* Source/JavaScriptCore/wasm/WasmAirIRGenerator64.cpp:
(JSC::Wasm::AirIRGenerator64::finalizeEntrypoints):
(JSC::Wasm::AirIRGenerator64::emitCatchImpl):
(JSC::Wasm::parseAndCompileAir):
* Source/JavaScriptCore/wasm/WasmAirIRGeneratorBase.h:
(JSC::Wasm::ExpressionType>::AirIRGeneratorBase):
(JSC::Wasm::ExpressionType>::finalizeEntrypoints): Deleted.
* Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:
(JSC::Wasm::B3IRGenerator::insertEntrySwitch):
(JSC::Wasm::B3IRGenerator::addCatchToUnreachable):
(JSC::Wasm::B3IRGenerator::emitCatchImpl):
(JSC::Wasm::parseAndCompileB3):
* Source/JavaScriptCore/wasm/WasmBBQJIT.cpp:
(JSC::Wasm::BBQJIT::emitCatchPrologue):
(JSC::Wasm::BBQJIT::emitCatchAllImpl):
(JSC::Wasm::BBQJIT::emitCatchImpl):
(JSC::Wasm::parseAndCompileBBQ):
* Source/JavaScriptCore/wasm/WasmIRGeneratorHelpers.h:
(JSC::Wasm::buildEntryBufferForCatch):
(JSC::Wasm::emitCatchPrologueShared): Deleted.
* Source/JavaScriptCore/wasm/WasmOperations.cpp:
(JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
(JSC::Wasm::retrieveAndClearExceptionIfCatchableNonSharedImpl):
(JSC::Wasm::WasmOperationsInternal::retrieveAndClearExceptionIfCatchableImpl): 
Deleted.
* Source/JavaScriptCore/wasm/WasmOperations.h:
* Source/JavaScriptCore/wasm/WasmThunks.cpp:
(JSC::Wasm::catchInWasmThunkGenerator):
* Source/JavaScriptCore/wasm/WasmThunks.h:
* Source/JavaScriptCore/wasm/js/JSWebAssemblyException.h:

Canonical link: https://commits.webkit.org/261286@main


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to