[webkit-changes] [WebKit/WebKit] 860fb0: [SIMD] Skip LLInt for SIMD functions.

Justin Michaud noreply at github.com
Wed Nov 30 16:35:43 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 860fb0de5f02fa3cad053045639843240518ab7d
      https://github.com/WebKit/WebKit/commit/860fb0de5f02fa3cad053045639843240518ab7d
  Author: Justin Michaud <justin_michaud at apple.com>
  Date:   2022-11-30 (Wed, 30 Nov 2022)

  Changed paths:
    M JSTests/wasm/v8/exceptions-simd.js
    M JSTests/wasm/v8/multi-value-simd.js
    M JSTests/wasm/v8/simd-errors.js
    M Source/JavaScriptCore/assembler/JITOperationList.cpp
    M Source/JavaScriptCore/bytecode/BytecodeList.rb
    M Source/JavaScriptCore/llint/LLIntThunks.cpp
    M Source/JavaScriptCore/llint/LLIntThunks.h
    M Source/JavaScriptCore/llint/LowLevelInterpreter.asm
    M Source/JavaScriptCore/llint/WebAssembly.asm
    M Source/JavaScriptCore/offlineasm/arm64.rb
    M Source/JavaScriptCore/offlineasm/instructions.rb
    M Source/JavaScriptCore/offlineasm/risc.rb
    M Source/JavaScriptCore/offlineasm/x86.rb
    M Source/JavaScriptCore/runtime/Options.cpp
    M Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp
    M Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp
    M Source/JavaScriptCore/wasm/WasmCallee.h
    M Source/JavaScriptCore/wasm/WasmFormat.h
    M Source/JavaScriptCore/wasm/WasmFunctionParser.h
    M Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp
    M Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp
    M Source/JavaScriptCore/wasm/WasmModuleInformation.h
    M Source/JavaScriptCore/wasm/WasmOperations.cpp
    M Source/JavaScriptCore/wasm/WasmSectionParser.cpp
    M Source/JavaScriptCore/wasm/WasmSlowPaths.cpp
    M Source/JavaScriptCore/wasm/WasmSlowPaths.h
    M Source/JavaScriptCore/wasm/WasmTypeDefinition.h

  Log Message:
  -----------
  [SIMD] Skip LLInt for SIMD functions.
https://bugs.webkit.org/show_bug.cgi?id=246346

Reviewed by Yusuke Suzuki.

Today, enabling WASM SIMD requires disabling the LLInt since it does not
implement any of the instructions. This patch forces functions that use
SIMD instructions to go straight to BBQ instead.

The way this works is that when the LLInt sees an instruction or type that
requires SIMD support, it emits a crash bytecode and marks the function as
a SIMD function in the WASM module information. Then, we emit a new
LLInt entrypoint that blocks while the function tiers up.

This new entrypoint preserves the full width of the vector argument registers
and jumps to the new BBQ code for the function.

Note that after this change, we require LLInt to be turned on if SIMD is enabled.
This ensures that isSIMDFunction is populated.

The optimal future solution is that the LLInt should support SIMD.

* Source/JavaScriptCore/assembler/JITOperationList.cpp:
(JSC::llintOperations):
* Source/JavaScriptCore/bytecode/BytecodeList.rb:
* Source/JavaScriptCore/llint/LLIntThunks.cpp:
(JSC::LLInt::wasmFunctionEntryThunkSIMD):
* Source/JavaScriptCore/llint/LLIntThunks.h:
* Source/JavaScriptCore/llint/LowLevelInterpreter.asm:
* Source/JavaScriptCore/llint/WebAssembly.asm:
* Source/JavaScriptCore/offlineasm/arm64.rb:
* Source/JavaScriptCore/offlineasm/instructions.rb:
* Source/JavaScriptCore/offlineasm/risc.rb:
* Source/JavaScriptCore/offlineasm/x86.rb:
* Source/JavaScriptCore/runtime/Options.cpp:
(JSC::Options::recomputeDependentOptions):
* Source/JavaScriptCore/runtime/OptionsList.h:
* Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:
(JSC::Wasm::AirIRGenerator::notifyFunctionUsesSIMD):
(JSC::Wasm::AirIRGenerator::AirIRGenerator):
(JSC::Wasm::AirIRGenerator::addCrash):
* Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:
(JSC::Wasm::B3IRGenerator::addCrash):
* Source/JavaScriptCore/wasm/WasmFunctionParser.h:
(JSC::Wasm::FunctionParser<Context>::parse):
(JSC::Wasm::FunctionParser<Context>::simd):
(JSC::Wasm::FunctionParser<Context>::parseExpression):
(JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
* Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:
(JSC::Wasm::LLIntGenerator::notifyFunctionUsesSIMD):
(JSC::Wasm::LLIntGenerator::addCrash):
* Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp:
(JSC::Wasm::LLIntPlan::didCompleteCompilation):
* Source/JavaScriptCore/wasm/WasmModuleInformation.h:
(JSC::Wasm::ModuleInformation::isSIMDFunction const):
(JSC::Wasm::ModuleInformation::addSIMDFunction):
* Source/JavaScriptCore/wasm/WasmOperations.cpp:
(JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
* Source/JavaScriptCore/wasm/WasmSlowPaths.cpp:
(JSC::LLInt::wasm_log_crash):
(JSC::LLInt::jitCompileAndSetHeuristics):
(JSC::LLInt::jitCompileSIMDFunction):
(JSC::LLInt::WASM_SLOW_PATH_DECL):
* Source/JavaScriptCore/wasm/WasmSlowPaths.h:
* Source/JavaScriptCore/wasm/WasmTypeDefinition.h:
(JSC::Wasm::FunctionSignature::numReturnVectors const):

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




More information about the webkit-changes mailing list