1//=== AArch64CallingConvention.h - AArch64 CC entry points ------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares the entry points for AArch64 calling convention analysis.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_TARGET_AARCH64_AARCH64CALLINGCONVENTION_H
14#define LLVM_LIB_TARGET_AARCH64_AARCH64CALLINGCONVENTION_H
15
16#include "llvm/CodeGen/CallingConvLower.h"
17
18namespace llvm {
19bool CC_AArch64_AAPCS(unsigned ValNo, MVT ValVT, MVT LocVT,
20                      CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags,
21                      CCState &State);
22bool CC_AArch64_Arm64EC_VarArg(unsigned ValNo, MVT ValVT, MVT LocVT,
23                               CCValAssign::LocInfo LocInfo,
24                               ISD::ArgFlagsTy ArgFlags, CCState &State);
25bool CC_AArch64_Arm64EC_Thunk(unsigned ValNo, MVT ValVT, MVT LocVT,
26                              CCValAssign::LocInfo LocInfo,
27                              ISD::ArgFlagsTy ArgFlags, CCState &State);
28bool CC_AArch64_Arm64EC_Thunk_Native(unsigned ValNo, MVT ValVT, MVT LocVT,
29                                     CCValAssign::LocInfo LocInfo,
30                                     ISD::ArgFlagsTy ArgFlags, CCState &State);
31bool CC_AArch64_DarwinPCS_VarArg(unsigned ValNo, MVT ValVT, MVT LocVT,
32                                 CCValAssign::LocInfo LocInfo,
33                                 ISD::ArgFlagsTy ArgFlags, CCState &State);
34bool CC_AArch64_DarwinPCS(unsigned ValNo, MVT ValVT, MVT LocVT,
35                          CCValAssign::LocInfo LocInfo,
36                          ISD::ArgFlagsTy ArgFlags, CCState &State);
37bool CC_AArch64_DarwinPCS_ILP32_VarArg(unsigned ValNo, MVT ValVT, MVT LocVT,
38                          CCValAssign::LocInfo LocInfo,
39                          ISD::ArgFlagsTy ArgFlags, CCState &State);
40bool CC_AArch64_Win64PCS(unsigned ValNo, MVT ValVT, MVT LocVT,
41                         CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags,
42                         CCState &State);
43bool CC_AArch64_Win64_VarArg(unsigned ValNo, MVT ValVT, MVT LocVT,
44                             CCValAssign::LocInfo LocInfo,
45                             ISD::ArgFlagsTy ArgFlags, CCState &State);
46bool CC_AArch64_Win64_CFGuard_Check(unsigned ValNo, MVT ValVT, MVT LocVT,
47                                    CCValAssign::LocInfo LocInfo,
48                                    ISD::ArgFlagsTy ArgFlags, CCState &State);
49bool CC_AArch64_Arm64EC_CFGuard_Check(unsigned ValNo, MVT ValVT, MVT LocVT,
50                                      CCValAssign::LocInfo LocInfo,
51                                      ISD::ArgFlagsTy ArgFlags, CCState &State);
52bool CC_AArch64_GHC(unsigned ValNo, MVT ValVT, MVT LocVT,
53                    CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags,
54                    CCState &State);
55bool RetCC_AArch64_AAPCS(unsigned ValNo, MVT ValVT, MVT LocVT,
56                         CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags,
57                         CCState &State);
58bool RetCC_AArch64_Arm64EC_Thunk(unsigned ValNo, MVT ValVT, MVT LocVT,
59                                 CCValAssign::LocInfo LocInfo,
60                                 ISD::ArgFlagsTy ArgFlags, CCState &State);
61bool RetCC_AArch64_Arm64EC_CFGuard_Check(unsigned ValNo, MVT ValVT, MVT LocVT,
62                                         CCValAssign::LocInfo LocInfo,
63                                         ISD::ArgFlagsTy ArgFlags,
64                                         CCState &State);
65} // namespace llvm
66
67#endif
68