diff options
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64CallingConvention.td')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64CallingConvention.td | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64CallingConvention.td b/llvm/lib/Target/AArch64/AArch64CallingConvention.td index 1b5a713..e2a79a4 100644 --- a/llvm/lib/Target/AArch64/AArch64CallingConvention.td +++ b/llvm/lib/Target/AArch64/AArch64CallingConvention.td @@ -162,7 +162,13 @@ def RetCC_AArch64_AAPCS : CallingConv<[ ]>; let Entry = 1 in -def CC_AArch64_Win64PCS : CallingConv<AArch64_Common>; +def CC_AArch64_Win64PCS : CallingConv<!listconcat( + [ + // 'CFGuardTarget' is used for Arm64EC; it passes its parameter in X9. + CCIfCFGuardTarget<CCAssignToReg<[X9]>> + ], + AArch64_Common) +>; // Vararg functions on windows pass floats in integer registers let Entry = 1 in @@ -177,6 +183,9 @@ def CC_AArch64_Win64_VarArg : CallingConv<[ // a stack layout compatible with the x64 calling convention. let Entry = 1 in def CC_AArch64_Arm64EC_VarArg : CallingConv<[ + // 'CFGuardTarget' is used for Arm64EC; it passes its parameter in X9. + CCIfCFGuardTarget<CCAssignToReg<[X9]>>, + CCIfNest<CCAssignToReg<[X15]>>, // Convert small floating-point values to integer. @@ -345,7 +354,7 @@ def CC_AArch64_Arm64EC_CFGuard_Check : CallingConv<[ let Entry = 1 in def RetCC_AArch64_Arm64EC_CFGuard_Check : CallingConv<[ - CCIfType<[i64], CCAssignToReg<[X11]>> + CCIfType<[i64], CCAssignToReg<[X11, X9]>> ]>; @@ -601,6 +610,12 @@ def CSR_Win_AArch64_AAPCS_SwiftError def CSR_Win_AArch64_AAPCS_SwiftTail : CalleeSavedRegs<(sub CSR_Win_AArch64_AAPCS, X20, X22)>; +def CSR_Win_AArch64_RT_MostRegs + : CalleeSavedRegs<(add CSR_Win_AArch64_AAPCS, (sequence "X%u", 9, 15))>; + +def CSR_Win_AArch64_RT_AllRegs + : CalleeSavedRegs<(add CSR_Win_AArch64_RT_MostRegs, (sequence "Q%u", 8, 31))>; + // The Control Flow Guard check call uses a custom calling convention that also // preserves X0-X8 and Q0-Q7. def CSR_Win_AArch64_CFGuard_Check : CalleeSavedRegs<(add CSR_Win_AArch64_AAPCS, |
