Skip to content

Commit 1faf9f6

Browse files
committed
re-git apply WebKit/pull/51369
1 parent 4b3aafc commit 1faf9f6

File tree

7 files changed

+40
-20
lines changed

7 files changed

+40
-20
lines changed

Source/JavaScriptCore/heap/MachineStackMarker.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,16 @@ static inline int osRedZoneAdjustment()
5959
// See http://people.freebsd.org/~obrien/amd64-elf-abi.pdf Section 3.2.2.
6060
redZoneAdjustment = -128;
6161
#elif CPU(ARM64)
62+
#if OS(DARWIN)
6263
// See https://developer.apple.com/library/ios/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARM64FunctionCallingConventions.html#//apple_ref/doc/uid/TP40013702-SW7
6364
redZoneAdjustment = -128;
65+
#elif OS(WINDOWS)
66+
// https://devblogs.microsoft.com/oldnewthing/20220726-00/?p=106898
67+
redZoneAdjustment = -16;
68+
#else
69+
// There is no red zone.
70+
// https://stackoverflow.com/questions/77908878/aarch64-is-there-a-red-zone-on-linux-if-so-16-or-128-bytes
71+
#endif
6472
#endif
6573
return redZoneAdjustment;
6674
}

Source/JavaScriptCore/llint/InPlaceInterpreter.asm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,11 +1399,11 @@ end
13991399
addp t1, t0
14001400
mulp StackValueSize, t0
14011401
addp IPIntCalleeSaveSpaceStackAligned, t0
1402-
if ARMv7
1403-
move cfr, sp
1404-
subp sp, t0, sp
1405-
else
1402+
if ARM64 or ARM64E
14061403
subp cfr, t0, sp
1404+
else
1405+
subp cfr, t0, t0
1406+
move t0, sp
14071407
end
14081408

14091409
if X86_64

Source/JavaScriptCore/llint/LowLevelInterpreter.asm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,11 +1217,11 @@ end
12171217
macro restoreStackPointerAfterCall()
12181218
loadp CodeBlock[cfr], t2
12191219
getFrameRegisterSizeForCodeBlock(t2, t2)
1220-
if ARMv7
1220+
if ARM64 or ARM64E
1221+
subp cfr, t2, sp
1222+
else
12211223
subp cfr, t2, t2
12221224
move t2, sp
1223-
else
1224-
subp cfr, t2, sp
12251225
end
12261226
end
12271227

Source/JavaScriptCore/wasm/WasmBBQJIT.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3151,7 +3151,7 @@ ControlData WARN_UNUSED_RETURN BBQJIT::addTopLevel(BlockSignature signature)
31513151

31523152
m_pcToCodeOriginMapBuilder.appendItem(m_jit.label(), PCToCodeOriginMapBuilder::defaultCodeOrigin());
31533153
m_jit.emitFunctionPrologue();
3154-
emitSaveCalleeSaves();
3154+
emitPushCalleeSaves();
31553155
m_topLevel = ControlData(*this, BlockType::TopLevel, signature, 0);
31563156

31573157
JIT_COMMENT(m_jit, "Store boxed JIT callee");
@@ -3332,7 +3332,7 @@ MacroAssembler::Label BBQJIT::addLoopOSREntrypoint()
33323332
// - Don't need to zero our locals, since they are restored from the OSR entry scratch buffer anyway.
33333333
auto label = m_jit.label();
33343334
m_jit.emitFunctionPrologue();
3335-
emitSaveCalleeSaves();
3335+
emitPushCalleeSaves();
33363336

33373337
m_jit.move(CCallHelpers::TrustedImmPtr(CalleeBits::boxNativeCallee(&m_callee)), wasmScratchGPR);
33383338
static_assert(CallFrameSlot::codeBlock + 1 == CallFrameSlot::callee);
@@ -4469,11 +4469,11 @@ PartialResult WARN_UNUSED_RETURN BBQJIT::addCall(unsigned callProfileIndex, Func
44694469

44704470
// Our callee could have tail called someone else and changed SP so we need to restore it. Do this before restoring our results since results are stored at the top of the reserved stack space.
44714471
m_frameSizeLabels.append(m_jit.moveWithPatch(TrustedImmPtr(nullptr), wasmScratchGPR));
4472-
#if CPU(ARM_THUMB2)
4472+
#if CPU(ARM64)
4473+
m_jit.subPtr(GPRInfo::callFrameRegister, wasmScratchGPR, MacroAssembler::stackPointerRegister);
4474+
#else
44734475
m_jit.subPtr(GPRInfo::callFrameRegister, wasmScratchGPR, wasmScratchGPR);
44744476
m_jit.move(wasmScratchGPR, MacroAssembler::stackPointerRegister);
4475-
#else
4476-
m_jit.subPtr(GPRInfo::callFrameRegister, wasmScratchGPR, MacroAssembler::stackPointerRegister);
44774477
#endif
44784478

44794479
// Push return value(s) onto the expression stack
@@ -4541,11 +4541,11 @@ void BBQJIT::emitIndirectCall(const char* opcode, unsigned callProfileIndex, con
45414541

45424542
// Our callee could have tail called someone else and changed SP so we need to restore it. Do this before restoring our results since results are stored at the top of the reserved stack space.
45434543
m_frameSizeLabels.append(m_jit.moveWithPatch(TrustedImmPtr(nullptr), wasmScratchGPR));
4544-
#if CPU(ARM_THUMB2)
4544+
#if CPU(ARM64)
4545+
m_jit.subPtr(GPRInfo::callFrameRegister, wasmScratchGPR, MacroAssembler::stackPointerRegister);
4546+
#else
45454547
m_jit.subPtr(GPRInfo::callFrameRegister, wasmScratchGPR, wasmScratchGPR);
45464548
m_jit.move(wasmScratchGPR, MacroAssembler::stackPointerRegister);
4547-
#else
4548-
m_jit.subPtr(GPRInfo::callFrameRegister, wasmScratchGPR, MacroAssembler::stackPointerRegister);
45494549
#endif
45504550

45514551
returnValuesFromCall(results, *signature.as<FunctionSignature>(), wasmCalleeInfo);
@@ -5318,8 +5318,15 @@ Expected<std::unique_ptr<InternalFunction>, String> parseAndCompileBBQ(Compilati
53185318
return result;
53195319
}
53205320

5321-
void BBQJIT::emitSaveCalleeSaves()
5321+
void BBQJIT::emitPushCalleeSaves()
53225322
{
5323+
size_t stackSizeForCalleeSaves = WTF::roundUpToMultipleOf<stackAlignmentBytes()>(RegisterAtOffsetList::bbqCalleeSaveRegisters().registerCount() * sizeof(UCPURegister));
5324+
#if CPU(X86_64) || CPU(ARM64)
5325+
m_jit.subPtr(GPRInfo::callFrameRegister, TrustedImm32(stackSizeForCalleeSaves), MacroAssembler::stackPointerRegister);
5326+
#else
5327+
m_jit.subPtr(GPRInfo::callFrameRegister, TrustedImm32(stackSizeForCalleeSaves), wasmScratchGPR);
5328+
m_jit.move(wasmScratchGPR, MacroAssembler::stackPointerRegister);
5329+
#endif
53235330
m_jit.emitSaveCalleeSavesFor(&RegisterAtOffsetList::bbqCalleeSaveRegisters());
53245331
}
53255332

Source/JavaScriptCore/wasm/WasmBBQJIT.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2230,7 +2230,7 @@ class BBQJIT {
22302230

22312231
void emitIncrementCallProfileCount(unsigned callProfileIndex);
22322232

2233-
void emitSaveCalleeSaves();
2233+
void emitPushCalleeSaves();
22342234
void emitRestoreCalleeSaves();
22352235

22362236
WasmOrigin origin();

Source/JavaScriptCore/wasm/WasmBBQJIT64.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3036,7 +3036,12 @@ PartialResult WARN_UNUSED_RETURN BBQJIT::addRefAsNonNull(Value value, Value& res
30363036
void BBQJIT::emitCatchPrologue()
30373037
{
30383038
m_frameSizeLabels.append(m_jit.moveWithPatch(TrustedImmPtr(nullptr), GPRInfo::nonPreservedNonArgumentGPR0));
3039+
#if CPU(ARM64)
30393040
m_jit.subPtr(GPRInfo::callFrameRegister, GPRInfo::nonPreservedNonArgumentGPR0, MacroAssembler::stackPointerRegister);
3041+
#else
3042+
m_jit.subPtr(GPRInfo::callFrameRegister, GPRInfo::nonPreservedNonArgumentGPR0, GPRInfo::nonPreservedNonArgumentGPR0);
3043+
m_jit.move(GPRInfo::nonPreservedNonArgumentGPR0, CCallHelpers::stackPointerRegister);
3044+
#endif
30403045
if (!!m_info.memory)
30413046
loadWebAssemblyGlobalState(wasmBaseMemoryPointer, wasmBoundsCheckingSizeRegister);
30423047
static_assert(noOverlap(GPRInfo::nonPreservedNonArgumentGPR0, GPRInfo::returnValueGPR, GPRInfo::returnValueGPR2));

Source/JavaScriptCore/wasm/js/JSToWasm.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -380,11 +380,11 @@ MacroAssemblerCodeRef<JITThunkPtrTag> createJSToWasmJITShared()
380380

381381
jit.load32(CCallHelpers::Address(GPRInfo::regWS0, JSToWasmCallee::offsetOfFrameSize()), GPRInfo::regWS1);
382382
jit.addPtr(CCallHelpers::TrustedImmPtr(JSToWasmCallee::SpillStackSpaceAligned), GPRInfo::regWS1);
383-
#if CPU(ARM_THUMB2)
383+
#if CPU(ARM64)
384+
jit.subPtr(GPRInfo::callFrameRegister, GPRInfo::regWS1, CCallHelpers::stackPointerRegister);
385+
#else
384386
jit.subPtr(GPRInfo::callFrameRegister, GPRInfo::regWS1, GPRInfo::regWS1);
385387
jit.move(GPRInfo::regWS1, CCallHelpers::stackPointerRegister);
386-
#else
387-
jit.subPtr(GPRInfo::callFrameRegister, GPRInfo::regWS1, CCallHelpers::stackPointerRegister);
388388
#endif
389389

390390
// Save return registers

0 commit comments

Comments
 (0)