Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (158819 => 158820)
--- trunk/Source/_javascript_Core/ChangeLog 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/ChangeLog 2013-11-07 05:05:03 UTC (rev 158820)
@@ -1,3 +1,46 @@
+2013-11-06 Filip Pizlo <[email protected]>
+
+ IC code should handle the call frame register not being the callFrameRegister
+ https://bugs.webkit.org/show_bug.cgi?id=123865
+
+ Reviewed by Geoffrey Garen.
+
+ For now, in the FTL, the call frame may be something other than our frame pointer,
+ since it's an argument passed in according to whatever convention LLVM picks.
+
+ This is temporary in two ways - pretty soon the callFrameRegister will be the actual
+ frame pointer and not some other register, and LLVM will not pass the frame pointer
+ as an argument to IC's.
+
+ * bytecode/StructureStubInfo.h:
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::cachedGetById):
+ (JSC::DFG::SpeculativeJIT::cachedPutById):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::cachedGetById):
+ (JSC::DFG::SpeculativeJIT::cachedPutById):
+ * ftl/FTLCompile.cpp:
+ (JSC::FTL::fixFunctionBasedOnStackMaps):
+ * ftl/FTLInlineCacheSize.cpp:
+ (JSC::FTL::sizeOfGetById):
+ (JSC::FTL::sizeOfPutById):
+ * jit/CCallHelpers.h:
+ (JSC::CCallHelpers::setupArguments):
+ * jit/JITInlineCacheGenerator.cpp:
+ (JSC::JITByIdGenerator::JITByIdGenerator):
+ (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
+ * jit/JITInlineCacheGenerator.h:
+ (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emit_op_put_by_id):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emit_op_put_by_id):
+ * jit/Repatch.cpp:
+ (JSC::tryBuildGetByIDList):
+ (JSC::emitPutTransitionStub):
+
2013-11-06 Daniel Bates <[email protected]>
[iOS] Upstream Letterpress effect
Modified: trunk/Source/_javascript_Core/bytecode/StructureStubInfo.h (158819 => 158820)
--- trunk/Source/_javascript_Core/bytecode/StructureStubInfo.h 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/bytecode/StructureStubInfo.h 2013-11-07 05:05:03 UTC (rev 158820)
@@ -225,6 +225,7 @@
struct {
int8_t registersFlushed;
+ int8_t callFrameRegister;
int8_t baseGPR;
#if USE(JSVALUE32_64)
int8_t valueTagGPR;
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp (158819 => 158820)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp 2013-11-07 05:05:03 UTC (rev 158820)
@@ -198,7 +198,7 @@
void SpeculativeJIT::cachedGetById(CodeOrigin codeOrigin, GPRReg baseTagGPROrNone, GPRReg basePayloadGPR, GPRReg resultTagGPR, GPRReg resultPayloadGPR, unsigned identifierNumber, JITCompiler::Jump slowPathTarget, SpillRegistersMode spillMode)
{
JITGetByIdGenerator gen(
- m_jit.codeBlock(), codeOrigin, usedRegisters(),
+ m_jit.codeBlock(), codeOrigin, usedRegisters(), GPRInfo::callFrameRegister,
JSValueRegs(baseTagGPROrNone, basePayloadGPR),
JSValueRegs(resultTagGPR, resultPayloadGPR), spillMode != NeedToSpill);
@@ -232,9 +232,9 @@
writeBarrier(basePayloadGPR, valueTagGPR, valueUse, WriteBarrierForPropertyAccess, scratchGPR);
JITPutByIdGenerator gen(
- m_jit.codeBlock(), codeOrigin, usedRegisters(), JSValueRegs::payloadOnly(basePayloadGPR),
- JSValueRegs(valueTagGPR, valuePayloadGPR), scratchGPR, false,
- m_jit.ecmaModeFor(codeOrigin), putKind);
+ m_jit.codeBlock(), codeOrigin, usedRegisters(), GPRInfo::callFrameRegister,
+ JSValueRegs::payloadOnly(basePayloadGPR), JSValueRegs(valueTagGPR, valuePayloadGPR),
+ scratchGPR, false, m_jit.ecmaModeFor(codeOrigin), putKind);
gen.generateFastPath(m_jit);
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp (158819 => 158820)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2013-11-07 05:05:03 UTC (rev 158820)
@@ -210,8 +210,8 @@
void SpeculativeJIT::cachedGetById(CodeOrigin codeOrigin, GPRReg baseGPR, GPRReg resultGPR, unsigned identifierNumber, JITCompiler::Jump slowPathTarget, SpillRegistersMode spillMode)
{
JITGetByIdGenerator gen(
- m_jit.codeBlock(), codeOrigin, usedRegisters(), JSValueRegs(baseGPR),
- JSValueRegs(resultGPR), spillMode != NeedToSpill);
+ m_jit.codeBlock(), codeOrigin, usedRegisters(), GPRInfo::callFrameRegister,
+ JSValueRegs(baseGPR), JSValueRegs(resultGPR), spillMode != NeedToSpill);
gen.generateFastPath(m_jit);
JITCompiler::JumpList slowCases;
@@ -232,8 +232,9 @@
writeBarrier(baseGPR, valueGPR, valueUse, WriteBarrierForPropertyAccess, scratchGPR);
JITPutByIdGenerator gen(
- m_jit.codeBlock(), codeOrigin, usedRegisters(), JSValueRegs(baseGPR),
- JSValueRegs(valueGPR), scratchGPR, false, m_jit.ecmaModeFor(codeOrigin), putKind);
+ m_jit.codeBlock(), codeOrigin, usedRegisters(), GPRInfo::callFrameRegister,
+ JSValueRegs(baseGPR), JSValueRegs(valueGPR), scratchGPR, false,
+ m_jit.ecmaModeFor(codeOrigin), putKind);
gen.generateFastPath(m_jit);
JITCompiler::JumpList slowCases;
Modified: trunk/Source/_javascript_Core/ftl/FTLCompile.cpp (158819 => 158820)
--- trunk/Source/_javascript_Core/ftl/FTLCompile.cpp 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/ftl/FTLCompile.cpp 2013-11-07 05:05:03 UTC (rev 158820)
@@ -198,8 +198,8 @@
GPRReg result = GPRInfo::returnValueGPR;
JITGetByIdGenerator gen(
- codeBlock, getById.codeOrigin(), usedRegisters, JSValueRegs(base),
- JSValueRegs(result), false);
+ codeBlock, getById.codeOrigin(), usedRegisters, callFrameRegister,
+ JSValueRegs(base), JSValueRegs(result), false);
MacroAssembler::Label begin = slowPathJIT.label();
@@ -234,9 +234,9 @@
GPRReg value = GPRInfo::argumentGPR2;
JITPutByIdGenerator gen(
- codeBlock, putById.codeOrigin(), usedRegisters, JSValueRegs(base),
- JSValueRegs(value), GPRInfo::argumentGPR3, false, putById.ecmaMode(),
- putById.putKind());
+ codeBlock, putById.codeOrigin(), usedRegisters, callFrameRegister,
+ JSValueRegs(base), JSValueRegs(value), GPRInfo::argumentGPR3, false,
+ putById.ecmaMode(), putById.putKind());
MacroAssembler::Label begin = slowPathJIT.label();
Modified: trunk/Source/_javascript_Core/ftl/FTLInlineCacheSize.cpp (158819 => 158820)
--- trunk/Source/_javascript_Core/ftl/FTLInlineCacheSize.cpp 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/ftl/FTLInlineCacheSize.cpp 2013-11-07 05:05:03 UTC (rev 158820)
@@ -44,8 +44,8 @@
MacroAssembler jit;
JITGetByIdGenerator generator(
- 0, CodeOrigin(), RegisterSet(), JSValueRegs(GPRInfo::regT6), JSValueRegs(GPRInfo::regT7),
- false);
+ 0, CodeOrigin(), RegisterSet(), GPRInfo::callFrameRegister,
+ JSValueRegs(GPRInfo::regT6), JSValueRegs(GPRInfo::regT7), false);
generator.generateFastPath(jit);
return s_sizeOfGetById = jit.m_assembler.codeSize();
@@ -59,8 +59,9 @@
MacroAssembler jit;
JITPutByIdGenerator generator(
- 0, CodeOrigin(), RegisterSet(), JSValueRegs(GPRInfo::regT6), JSValueRegs(GPRInfo::regT7),
- GPRInfo::regT8, false, NotStrictMode, NotDirect);
+ 0, CodeOrigin(), RegisterSet(), GPRInfo::callFrameRegister,
+ JSValueRegs(GPRInfo::regT6), JSValueRegs(GPRInfo::regT7), GPRInfo::regT8, false,
+ NotStrictMode, NotDirect);
generator.generateFastPath(jit);
return s_sizeOfPutById = jit.m_assembler.codeSize();
Modified: trunk/Source/_javascript_Core/jit/CCallHelpers.h (158819 => 158820)
--- trunk/Source/_javascript_Core/jit/CCallHelpers.h 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/jit/CCallHelpers.h 2013-11-07 05:05:03 UTC (rev 158820)
@@ -95,6 +95,44 @@
addCallArgument(arg2);
}
+ ALWAYS_INLINE void setupArguments(GPRReg arg1, GPRReg arg2, GPRReg arg3)
+ {
+ resetCallArguments();
+ addCallArgument(arg1);
+ addCallArgument(arg2);
+ addCallArgument(arg3);
+ }
+
+ ALWAYS_INLINE void setupArguments(GPRReg arg1, GPRReg arg2, TrustedImmPtr arg3, TrustedImmPtr arg4)
+ {
+ resetCallArguments();
+ addCallArgument(arg1);
+ addCallArgument(arg2);
+ addCallArgument(arg3);
+ addCallArgument(arg4);
+ }
+
+ ALWAYS_INLINE void setupArguments(GPRReg arg1, GPRReg arg2, TrustedImmPtr arg3, TrustedImm32 arg4, GPRReg arg5)
+ {
+ resetCallArguments();
+ addCallArgument(arg1);
+ addCallArgument(arg2);
+ addCallArgument(arg3);
+ addCallArgument(arg4);
+ addCallArgument(arg5);
+ }
+
+ ALWAYS_INLINE void setupArguments(GPRReg arg1, GPRReg arg2, TrustedImmPtr arg3, TrustedImm32 arg4, GPRReg arg5, GPRReg arg6)
+ {
+ resetCallArguments();
+ addCallArgument(arg1);
+ addCallArgument(arg2);
+ addCallArgument(arg3);
+ addCallArgument(arg4);
+ addCallArgument(arg5);
+ addCallArgument(arg6);
+ }
+
ALWAYS_INLINE void setupArguments(TrustedImmPtr arg1)
{
resetCallArguments();
@@ -906,6 +944,25 @@
setupTwoStubArgsGPR<GPRInfo::argumentGPR0, GPRInfo::argumentGPR1>(arg1, arg2);
}
+ ALWAYS_INLINE void setupArguments(GPRReg arg1, GPRReg arg2, GPRReg arg3)
+ {
+ setupThreeStubArgsGPR<GPRInfo::argumentGPR0, GPRInfo::argumentGPR1, GPRInfo::argumentGPR2>(arg1, arg2, arg3);
+ }
+
+ ALWAYS_INLINE void setupArguments(GPRReg arg1, GPRReg arg2, TrustedImmPtr arg3, TrustedImmPtr arg4)
+ {
+ setupTwoStubArgsGPR<GPRInfo::argumentGPR0, GPRInfo::argumentGPR1>(arg1, arg2);
+ move(arg3, GPRInfo::argumentGPR2);
+ move(arg4, GPRInfo::argumentGPR3);
+ }
+
+ ALWAYS_INLINE void setupArguments(GPRReg arg1, GPRReg arg2, TrustedImmPtr arg3, TrustedImm32 arg4, GPRReg arg5)
+ {
+ setupThreeStubArgsGPR<GPRInfo::argumentGPR0, GPRInfo::argumentGPR1, GPRInfo::argumentGPR4>(arg1, arg2, arg5);
+ move(arg3, GPRInfo::argumentGPR2);
+ move(arg4, GPRInfo::argumentGPR3);
+ }
+
ALWAYS_INLINE void setupArguments(GPRReg arg1, TrustedImmPtr arg2, GPRReg arg3, TrustedImmPtr arg4)
{
setupTwoStubArgsGPR<GPRInfo::argumentGPR0, GPRInfo::argumentGPR2>(arg1, arg3);
Modified: trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.cpp (158819 => 158820)
--- trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.cpp 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.cpp 2013-11-07 05:05:03 UTC (rev 158820)
@@ -49,7 +49,7 @@
JITByIdGenerator::JITByIdGenerator(
CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet& usedRegisters,
- JSValueRegs base, JSValueRegs value, bool registersFlushed)
+ GPRReg callFrameRegister, JSValueRegs base, JSValueRegs value, bool registersFlushed)
: JITInlineCacheGenerator(codeBlock, codeOrigin)
, m_base(base)
, m_value(value)
@@ -62,6 +62,7 @@
m_stubInfo->patch.usedRegisters.set(base);
m_stubInfo->patch.usedRegisters.set(value);
+ m_stubInfo->patch.callFrameRegister = static_cast<int8_t>(callFrameRegister);
m_stubInfo->patch.baseGPR = static_cast<int8_t>(base.payloadGPR());
m_stubInfo->patch.valueGPR = static_cast<int8_t>(value.payloadGPR());
#if USE(JSVALUE32_64)
@@ -129,9 +130,11 @@
JITPutByIdGenerator::JITPutByIdGenerator(
CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet& usedRegisters,
- JSValueRegs base, JSValueRegs value, GPRReg scratch, bool registersFlushed,
- ECMAMode ecmaMode, PutKind putKind)
- : JITByIdGenerator(codeBlock, codeOrigin, usedRegisters, base, value, registersFlushed)
+ GPRReg callFrameRegister, JSValueRegs base, JSValueRegs value, GPRReg scratch,
+ bool registersFlushed, ECMAMode ecmaMode, PutKind putKind)
+ : JITByIdGenerator(
+ codeBlock, codeOrigin, usedRegisters, callFrameRegister, base, value,
+ registersFlushed)
, m_scratch(scratch)
, m_ecmaMode(ecmaMode)
, m_putKind(putKind)
Modified: trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.h (158819 => 158820)
--- trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.h 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.h 2013-11-07 05:05:03 UTC (rev 158820)
@@ -56,8 +56,8 @@
JITByIdGenerator() { }
JITByIdGenerator(
- CodeBlock*, CodeOrigin, const RegisterSet&, JSValueRegs base, JSValueRegs value,
- bool registersFlushed);
+ CodeBlock*, CodeOrigin, const RegisterSet&, GPRReg callFrameRegister,
+ JSValueRegs base, JSValueRegs value, bool registersFlushed);
public:
void reportSlowPathCall(MacroAssembler::Label slowPathBegin, MacroAssembler::Call call)
@@ -96,8 +96,11 @@
JITGetByIdGenerator(
CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet& usedRegisters,
- JSValueRegs base, JSValueRegs value, bool registersFlushed)
- : JITByIdGenerator(codeBlock, codeOrigin, usedRegisters, base, value, registersFlushed)
+ GPRReg callFrameRegister, JSValueRegs base, JSValueRegs value,
+ bool registersFlushed)
+ : JITByIdGenerator(
+ codeBlock, codeOrigin, usedRegisters, callFrameRegister, base, value,
+ registersFlushed)
{
}
@@ -109,8 +112,9 @@
JITPutByIdGenerator() { }
JITPutByIdGenerator(
- CodeBlock*, CodeOrigin, const RegisterSet& usedRegisters, JSValueRegs base,
- JSValueRegs value, GPRReg scratch, bool registersFlushed, ECMAMode, PutKind);
+ CodeBlock*, CodeOrigin, const RegisterSet& usedRegisters, GPRReg callFrameRegister,
+ JSValueRegs base, JSValueRegs value, GPRReg scratch, bool registersFlushed,
+ ECMAMode, PutKind);
void generateFastPath(MacroAssembler&);
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (158819 => 158820)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2013-11-07 05:05:03 UTC (rev 158820)
@@ -524,7 +524,7 @@
JITGetByIdGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
- JSValueRegs(regT0), JSValueRegs(regT0), true);
+ callFrameRegister, JSValueRegs(regT0), JSValueRegs(regT0), true);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByIds.append(gen);
@@ -570,8 +570,8 @@
JITPutByIdGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
- JSValueRegs(regT0), JSValueRegs(regT1), regT2, true, m_codeBlock->ecmaMode(),
- direct ? Direct : NotDirect);
+ callFrameRegister, JSValueRegs(regT0), JSValueRegs(regT1), regT2, true,
+ m_codeBlock->ecmaMode(), direct ? Direct : NotDirect);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp (158819 => 158820)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2013-11-07 05:05:03 UTC (rev 158820)
@@ -484,7 +484,7 @@
JITGetByIdGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
- JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), true);
+ callFrameRegister, JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), true);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByIds.append(gen);
@@ -530,8 +530,8 @@
JITPutByIdGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
- JSValueRegs::payloadOnly(regT0), JSValueRegs(regT3, regT2), regT1, true,
- m_codeBlock->ecmaMode(), direct ? Direct : NotDirect);
+ callFrameRegister, JSValueRegs::payloadOnly(regT0), JSValueRegs(regT3, regT2),
+ regT1, true, m_codeBlock->ecmaMode(), direct ? Direct : NotDirect);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
Modified: trunk/Source/_javascript_Core/jit/Repatch.cpp (158819 => 158820)
--- trunk/Source/_javascript_Core/jit/Repatch.cpp 2013-11-07 04:43:18 UTC (rev 158819)
+++ trunk/Source/_javascript_Core/jit/Repatch.cpp 2013-11-07 05:05:03 UTC (rev 158820)
@@ -460,6 +460,7 @@
stubInfo.u.getByIdSelfList.listSize++;
+ GPRReg callFrameRegister = static_cast<GPRReg>(stubInfo.patch.callFrameRegister);
GPRReg baseGPR = static_cast<GPRReg>(stubInfo.patch.baseGPR);
#if USE(JSVALUE32_64)
GPRReg resultTagGPR = static_cast<GPRReg>(stubInfo.patch.valueTagGPR);
@@ -500,11 +501,11 @@
stubJit.load32(MacroAssembler::Address(scratchGPR, offsetRelativeToBase(slot.cachedOffset())), scratchGPR);
#endif
}
- stubJit.setupArgumentsWithExecState(baseGPR, scratchGPR);
+ stubJit.setupArguments(callFrameRegister, baseGPR, scratchGPR);
operationFunction = operationCallGetter;
} else {
- stubJit.setupArgumentsWithExecState(
- baseGPR,
+ stubJit.setupArguments(
+ callFrameRegister, baseGPR,
MacroAssembler::TrustedImmPtr(FunctionPtr(slot.customGetter()).executableAddress()),
MacroAssembler::TrustedImmPtr(ident.impl()));
operationFunction = operationCallCustomGetter;
@@ -757,6 +758,7 @@
{
VM* vm = &exec->vm();
+ GPRReg callFrameRegister = static_cast<GPRReg>(stubInfo.patch.callFrameRegister);
GPRReg baseGPR = static_cast<GPRReg>(stubInfo.patch.baseGPR);
#if USE(JSVALUE32_64)
GPRReg valueTagGPR = static_cast<GPRReg>(stubInfo.patch.valueTagGPR);
@@ -771,7 +773,7 @@
allocator.lock(valueGPR);
CCallHelpers stubJit(vm);
-
+
GPRReg scratchGPR1 = allocator.allocateScratchGPR();
ASSERT(scratchGPR1 != baseGPR);
ASSERT(scratchGPR1 != valueGPR);
@@ -913,9 +915,9 @@
ScratchBuffer* scratchBuffer = vm->scratchBufferForSize(allocator.desiredScratchBufferSize());
allocator.preserveUsedRegistersToScratchBuffer(stubJit, scratchBuffer, scratchGPR1);
#if USE(JSVALUE64)
- stubJit.setupArgumentsWithExecState(baseGPR, MacroAssembler::TrustedImmPtr(structure), MacroAssembler::TrustedImm32(slot.cachedOffset()), valueGPR);
+ stubJit.setupArguments(callFrameRegister, baseGPR, MacroAssembler::TrustedImmPtr(structure), MacroAssembler::TrustedImm32(slot.cachedOffset()), valueGPR);
#else
- stubJit.setupArgumentsWithExecState(baseGPR, MacroAssembler::TrustedImmPtr(structure), MacroAssembler::TrustedImm32(slot.cachedOffset()), valueGPR, valueTagGPR);
+ stubJit.setupArguments(callFrameRegister, baseGPR, MacroAssembler::TrustedImmPtr(structure), MacroAssembler::TrustedImm32(slot.cachedOffset()), valueGPR, valueTagGPR);
#endif
operationCall = stubJit.call();
allocator.restoreUsedRegistersFromScratchBuffer(stubJit, scratchBuffer, scratchGPR1);