commit b8f574e58bd7f677851c8d2dba9b15ef5371c331
parent 0d38313cbfba7a0521b91fcca779eca3e228cf75
Author: Rong "Mantle" Bao <webmaster@csmantle.top>
Date: Wed, 15 Oct 2025 16:39:53 +0000
Bug 1984472 - Part 1: Skip saving live registers when OOL-calling from a call instruction. r=spidermonkey-reviewers,jandem
This prepares oolCallVM for later parts in the stack.
Differential Revision: https://phabricator.services.mozilla.com/D268308
Diffstat:
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp
@@ -554,11 +554,15 @@ void CodeGenerator::visitOutOfLineCallVM(
JitSpewFin(JitSpew_Codegen);
#endif
perfSpewer().recordInstruction(masm, lir);
- saveLive(lir);
+ if (!lir->isCall()) {
+ saveLive(lir);
+ }
ool->args().generate(this);
callVM<Fn, fn>(lir);
ool->out().generate(this);
- restoreLiveIgnore(lir, ool->out().clobbered());
+ if (!lir->isCall()) {
+ restoreLiveIgnore(lir, ool->out().clobbered());
+ }
masm.jump(ool->rejoin());
}