26
26
using namespace clang ;
27
27
using namespace clang ::targets;
28
28
29
- static constexpr int NumNEONBuiltins =
30
- NEON::FirstTSBuiltin - Builtin::FirstTSBuiltin;
29
+ static constexpr int NumNeonBuiltins =
30
+ NEON::FirstFp16Builtin - Builtin::FirstTSBuiltin;
31
+ static constexpr int NumFp16Builtins =
32
+ NEON::FirstTSBuiltin - NEON::FirstFp16Builtin;
31
33
static constexpr int NumSVEBuiltins =
32
- SVE::FirstTSBuiltin - NEON::FirstTSBuiltin;
34
+ SVE::FirstNeonBridgeBuiltin - NEON::FirstTSBuiltin;
35
+ static constexpr int NumSVENeonBridgeBuiltins =
36
+ SVE::FirstTSBuiltin - SVE::FirstNeonBridgeBuiltin;
33
37
static constexpr int NumSMEBuiltins = SME::FirstTSBuiltin - SVE::FirstTSBuiltin;
34
38
static constexpr int NumAArch64Builtins =
35
39
AArch64::LastTSBuiltin - SME::FirstTSBuiltin;
36
40
static constexpr int NumBuiltins =
37
41
AArch64::LastTSBuiltin - Builtin::FirstTSBuiltin;
38
- static_assert (NumBuiltins == (NumNEONBuiltins + NumSVEBuiltins +
39
- NumSMEBuiltins + NumAArch64Builtins));
42
+ static_assert (NumBuiltins ==
43
+ (NumNeonBuiltins + NumFp16Builtins + NumSVEBuiltins +
44
+ NumSVENeonBridgeBuiltins + NumSMEBuiltins + NumAArch64Builtins));
45
+
46
+ namespace clang {
47
+ namespace NEON {
48
+ #define GET_NEON_BUILTIN_STR_TABLE
49
+ #include " clang/Basic/arm_neon.inc"
50
+ #undef GET_NEON_BUILTIN_STR_TABLE
51
+
52
+ static constexpr std::array<Builtin::Info, NumNeonBuiltins> BuiltinInfos = {
53
+ #define GET_NEON_BUILTIN_INFOS
54
+ #include " clang/Basic/arm_neon.inc"
55
+ #undef GET_NEON_BUILTIN_INFOS
56
+ };
40
57
41
- static constexpr llvm::StringTable BuiltinNEONStrings =
42
- CLANG_BUILTIN_STR_TABLE_START
43
- #define BUILTIN CLANG_BUILTIN_STR_TABLE
44
- #define TARGET_BUILTIN CLANG_TARGET_BUILTIN_STR_TABLE
45
- #include " clang/Basic/BuiltinsNEON.def"
46
- ;
47
- static constexpr llvm::StringTable BuiltinSVEStrings =
48
- CLANG_BUILTIN_STR_TABLE_START
49
- #define BUILTIN CLANG_BUILTIN_STR_TABLE
50
- #define TARGET_BUILTIN CLANG_TARGET_BUILTIN_STR_TABLE
51
- #include " clang/Basic/BuiltinsSVE.def"
52
- ;
53
- static constexpr llvm::StringTable BuiltinSMEStrings =
58
+ namespace FP16 {
59
+ #define GET_NEON_BUILTIN_STR_TABLE
60
+ #include " clang/Basic/arm_fp16.inc"
61
+ #undef GET_NEON_BUILTIN_STR_TABLE
62
+
63
+ static constexpr std::array<Builtin::Info, NumFp16Builtins> BuiltinInfos = {
64
+ #define GET_NEON_BUILTIN_INFOS
65
+ #include " clang/Basic/arm_fp16.inc"
66
+ #undef GET_NEON_BUILTIN_INFOS
67
+ };
68
+ } // namespace FP16
69
+ } // namespace NEON
70
+
71
+ namespace SVE {
72
+ #define GET_SVE_BUILTIN_STR_TABLE
73
+ #include " clang/Basic/arm_sve_builtins.inc"
74
+ #undef GET_SVE_BUILTIN_STR_TABLE
75
+
76
+ static constexpr std::array<Builtin::Info, NumSVEBuiltins> BuiltinInfos = {
77
+ #define GET_SVE_BUILTIN_INFOS
78
+ #include " clang/Basic/arm_sve_builtins.inc"
79
+ #undef GET_SVE_BUILTIN_INFOS
80
+ };
81
+ } // namespace SVE
82
+
83
+ namespace SME {
84
+ #define GET_SME_BUILTIN_STR_TABLE
85
+ #include " clang/Basic/arm_sme_builtins.inc"
86
+ #undef GET_SME_BUILTIN_STR_TABLE
87
+
88
+ static constexpr std::array<Builtin::Info, NumSMEBuiltins> BuiltinInfos = {
89
+ #define GET_SME_BUILTIN_INFOS
90
+ #include " clang/Basic/arm_sme_builtins.inc"
91
+ #undef GET_SME_BUILTIN_INFOS
92
+ };
93
+ } // namespace SME
94
+ } // namespace clang
95
+
96
+ static constexpr llvm::StringTable BuiltinSVENeonBridgeStrings =
54
97
CLANG_BUILTIN_STR_TABLE_START
55
- #define BUILTIN CLANG_BUILTIN_STR_TABLE
56
98
#define TARGET_BUILTIN CLANG_TARGET_BUILTIN_STR_TABLE
57
- #include " clang/Basic/BuiltinsSME.def"
99
+ #define GET_SVE_BUILTINS
100
+ #include " clang/Basic/BuiltinsAArch64NeonSVEBridge.def"
101
+ #undef GET_SVE_BUILTINS
102
+ #undef TARGET_BUILTIN
58
103
;
59
104
static constexpr llvm::StringTable BuiltinAArch64Strings =
60
105
CLANG_BUILTIN_STR_TABLE_START
@@ -64,21 +109,14 @@ static constexpr llvm::StringTable BuiltinAArch64Strings =
64
109
#include " clang/Basic/BuiltinsAArch64.def"
65
110
;
66
111
67
- static constexpr auto BuiltinNEONInfos = Builtin::MakeInfos<NumNEONBuiltins>({
68
- # define BUILTIN CLANG_BUILTIN_ENTRY
112
+ static constexpr auto BuiltinSVENeonBridgeInfos =
113
+ Builtin::MakeInfos<NumSVENeonBridgeBuiltins>({
69
114
#define TARGET_BUILTIN CLANG_TARGET_BUILTIN_ENTRY
70
- #include " clang/Basic/BuiltinsNEON.def"
71
- });
72
- static constexpr auto BuiltinSVEInfos = Builtin::MakeInfos<NumSVEBuiltins>({
73
- #define BUILTIN CLANG_BUILTIN_ENTRY
74
- #define TARGET_BUILTIN CLANG_TARGET_BUILTIN_ENTRY
75
- #include " clang/Basic/BuiltinsSVE.def"
76
- });
77
- static constexpr auto BuiltinSMEInfos = Builtin::MakeInfos<NumSMEBuiltins>({
78
- #define BUILTIN CLANG_BUILTIN_ENTRY
79
- #define TARGET_BUILTIN CLANG_TARGET_BUILTIN_ENTRY
80
- #include " clang/Basic/BuiltinsSME.def"
81
- });
115
+ #define GET_SVE_BUILTINS
116
+ #include " clang/Basic/BuiltinsAArch64NeonSVEBridge.def"
117
+ #undef GET_SVE_BUILTINS
118
+ #undef TARGET_BUILTIN
119
+ });
82
120
static constexpr auto BuiltinAArch64Infos =
83
121
Builtin::MakeInfos<NumAArch64Builtins>({
84
122
#define BUILTIN CLANG_BUILTIN_ENTRY
@@ -732,9 +770,12 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
732
770
llvm::SmallVector<Builtin::InfosShard>
733
771
AArch64TargetInfo::getTargetBuiltins () const {
734
772
return {
735
- {&BuiltinNEONStrings, BuiltinNEONInfos},
736
- {&BuiltinSVEStrings, BuiltinSVEInfos},
737
- {&BuiltinSMEStrings, BuiltinSMEInfos},
773
+ {&NEON::BuiltinStrings, NEON::BuiltinInfos, " __builtin_neon_" },
774
+ {&NEON::FP16::BuiltinStrings, NEON::FP16::BuiltinInfos,
775
+ " __builtin_neon_" },
776
+ {&SVE::BuiltinStrings, SVE::BuiltinInfos, " __builtin_sve_" },
777
+ {&BuiltinSVENeonBridgeStrings, BuiltinSVENeonBridgeInfos},
778
+ {&SME::BuiltinStrings, SME::BuiltinInfos, " __builtin_sme_" },
738
779
{&BuiltinAArch64Strings, BuiltinAArch64Infos},
739
780
};
740
781
}
0 commit comments