@@ -202,15 +202,15 @@ RefPtr<AccessCase> AccessCase::fromStructureStubInfo(
202202 switch (stubInfo.cacheType ()) {
203203 case CacheType::GetByIdSelf:
204204 RELEASE_ASSERT (stubInfo.hasConstantIdentifier );
205- return ProxyableAccessCase::create (vm, owner, Load, identifier, stubInfo.byIdSelfOffset , stubInfo.inlineAccessBaseStructure (vm ));
205+ return ProxyableAccessCase::create (vm, owner, Load, identifier, stubInfo.u . byIdSelf . offset , stubInfo.m_inlineAccessBaseStructure . get ( ));
206206
207207 case CacheType::PutByIdReplace:
208208 RELEASE_ASSERT (stubInfo.hasConstantIdentifier );
209- return AccessCase::create (vm, owner, Replace, identifier, stubInfo.byIdSelfOffset , stubInfo.inlineAccessBaseStructure (vm ));
209+ return AccessCase::create (vm, owner, Replace, identifier, stubInfo.u . byIdSelf . offset , stubInfo.m_inlineAccessBaseStructure . get ( ));
210210
211211 case CacheType::InByIdSelf:
212212 RELEASE_ASSERT (stubInfo.hasConstantIdentifier );
213- return AccessCase::create (vm, owner, InHit, identifier, stubInfo.byIdSelfOffset , stubInfo.inlineAccessBaseStructure (vm ));
213+ return AccessCase::create (vm, owner, InHit, identifier, stubInfo.u . byIdSelf . offset , stubInfo.m_inlineAccessBaseStructure . get ( ));
214214
215215 case CacheType::ArrayLength:
216216 RELEASE_ASSERT (stubInfo.hasConstantIdentifier );
@@ -1985,10 +1985,14 @@ void AccessCase::generateImpl(AccessGenerationState& state)
19851985 // Stuff for custom getters/setters.
19861986 CCallHelpers::Call operationCall;
19871987
1988-
19891988 // This also does the necessary calculations of whether or not we're an
19901989 // exception handling call site.
1991- AccessGenerationState::SpillState spillState = state.preserveLiveRegistersToStackForCall ();
1990+ RegisterSet extraRegistersToPreserve;
1991+ #if CPU(ARM64)
1992+ if (codeBlock->useDataIC ())
1993+ extraRegistersToPreserve.set (ARM64Registers::lr);
1994+ #endif
1995+ AccessGenerationState::SpillState spillState = state.preserveLiveRegistersToStackForCall (extraRegistersToPreserve);
19921996
19931997 auto restoreLiveRegistersFromStackForCall = [&](AccessGenerationState::SpillState& spillState, bool callHasReturnValue) {
19941998 RegisterSet dontRestore;
@@ -2075,7 +2079,8 @@ void AccessCase::generateImpl(AccessGenerationState& state)
20752079 ASSERT (!(numberOfRegsForCall % stackAlignmentRegisters ()));
20762080 unsigned numberOfBytesForCall = numberOfRegsForCall * sizeof (Register) - sizeof (CallerFrameAndPC);
20772081
2078- unsigned alignedNumberOfBytesForCall = WTF::roundUpToMultipleOf (stackAlignmentBytes (), numberOfBytesForCall);
2082+ unsigned alignedNumberOfBytesForCall =
2083+ WTF::roundUpToMultipleOf (stackAlignmentBytes (), numberOfBytesForCall);
20792084
20802085 jit.subPtr (
20812086 CCallHelpers::TrustedImm32 (alignedNumberOfBytesForCall),
@@ -2133,7 +2138,6 @@ void AccessCase::generateImpl(AccessGenerationState& state)
21332138
21342139 int stackPointerOffset = (codeBlock->stackPointerOffset () * sizeof (Register)) - state.preservedReusedRegisterState .numberOfBytesPreserved - spillState.numberOfStackBytesUsedForRegisterPreservation ;
21352140 jit.addPtr (CCallHelpers::TrustedImm32 (stackPointerOffset), GPRInfo::callFrameRegister, CCallHelpers::stackPointerRegister);
2136-
21372141 bool callHasReturnValue = isGetter ();
21382142 restoreLiveRegistersFromStackForCall (spillState, callHasReturnValue);
21392143
@@ -2260,7 +2264,12 @@ void AccessCase::generateImpl(AccessGenerationState& state)
22602264
22612265 jit.loadPtr (CCallHelpers::Address (baseGPR, JSProxy::targetOffset ()), scratchGPR);
22622266
2263- auto spillState = state.preserveLiveRegistersToStackForCallWithoutExceptions ();
2267+ RegisterSet extraRegistersToPreserve;
2268+ #if CPU(ARM64)
2269+ if (codeBlock->useDataIC ())
2270+ extraRegistersToPreserve.set (ARM64Registers::lr);
2271+ #endif
2272+ auto spillState = state.preserveLiveRegistersToStackForCallWithoutExceptions (extraRegistersToPreserve);
22642273
22652274 jit.setupArguments <decltype (operationWriteBarrierSlowPath)>(CCallHelpers::TrustedImmPtr (&vm), scratchGPR);
22662275 jit.prepareCallOperation (vm);
@@ -2355,6 +2364,10 @@ void AccessCase::generateImpl(AccessGenerationState& state)
23552364 RegisterSet extraRegistersToPreserve;
23562365 extraRegistersToPreserve.set (baseGPR);
23572366 extraRegistersToPreserve.set (valueRegs);
2367+ #if CPU(ARM64)
2368+ if (codeBlock->useDataIC ())
2369+ extraRegistersToPreserve.set (ARM64Registers::lr);
2370+ #endif
23582371 AccessGenerationState::SpillState spillState = state.preserveLiveRegistersToStackForCall (extraRegistersToPreserve);
23592372
23602373 jit.store32 (
0 commit comments