llvm-project
16bd5ce1 - Reland [AArch64] Copy x4/x5 vararg payload into the x64 stack in Arm64EC exit thunks (#208453)

Commit
13 hours ago
Reland [AArch64] Copy x4/x5 vararg payload into the x64 stack in Arm64EC exit thunks (#208453) Reland llvm/llvm-project#190933, which was reverted by llvm/llvm-project#198540 due to an EXPENSIVE_CHECKS build failure. The fix relative to the reverted patch is to do the memcpy before the final CALLSEQ_START for the dispatch call, avoiding nested call-frame pseudos if memcpy lowers to a call. Original commit message: Currently the x4/x5 in a variadic Arm64EC exit thunks are treated by LLVM like any other outgoing arguments. x4/x5 contain a pointer to the first stack parameter and the size of the parameters passed on the stack, and the generated exit thunk must memcpy these to the x86-64 stack. Current MSVC does this correctly. Rather than introducing a new entry to the CallingConv enum, we mark the call as vararg in AArch64ArmECCallLowering so that the lowering logic in AArch64ISelLowering.cpp can recognise this case, perform the necessary memcpy, and drop the x4/x5 arguments. LLVM should additionally ensure that x0-x3 are mirrored to f0-f3 in order to match the Windows x86-64 vararg ABI, but that change is left for a follow-up patch.
Author
asb asb
Parents
Loading