Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 34659680f0d031dc06982f829f4423d747cd773b
      
https://github.com/WebKit/WebKit/commit/34659680f0d031dc06982f829f4423d747cd773b
  Author: Keith Miller <keith_mil...@apple.com>
  Date:   2023-06-14 (Wed, 14 Jun 2023)

  Changed paths:
    M Source/JavaScriptCore/wasm/WasmBBQJIT.cpp

  Log Message:
  -----------
  BBQJIT's ScratchScope should always lock preseverved registers
https://bugs.webkit.org/show_bug.cgi?id=258044

Reviewed by Yusuke Suzuki.

Right now if a preserved location/register is already bound to a Location then 
we don't lock its slot. By not locking however, when we go to allocate any 
requested scratches we could choose one of the preserved registers to evict. 
This patch fixes this by always locking the preserved locations.

Additionally, some places where we were using ScratchScope to lock 
nonArgumentNonPreservedGPR1 can now use ScratchScope to get a non-argument 
non-preserved register. This is done by preserving all argument GPRs then 
immediately releasing them via a new unbindPreserved method.

* Source/JavaScriptCore/wasm/WasmBBQJIT.cpp:
(JSC::Wasm::BBQJIT::addIf):
(JSC::Wasm::BBQJIT::emitIndirectCall):
(JSC::Wasm::BBQJIT::addCallIndirect):
(JSC::Wasm::BBQJIT::addCallRef):
(JSC::Wasm::BBQJIT::ScratchScope::ScratchScope):
(JSC::Wasm::BBQJIT::ScratchScope::~ScratchScope):
(JSC::Wasm::BBQJIT::ScratchScope::unbindEarly):
(JSC::Wasm::BBQJIT::ScratchScope::unbindScratches):
(JSC::Wasm::BBQJIT::ScratchScope::unbindPreserved):
(JSC::Wasm::BBQJIT::ScratchScope::gpr const):
(JSC::Wasm::BBQJIT::ScratchScope::fpr const):
(JSC::Wasm::BBQJIT::ScratchScope::unbind): Deleted.

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


_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to