Skip to content

Commit 022e782

Browse files
committed
[AArch64] Add support for __builtin_ms_va_list on aarch64
Move builtins from the x86 specific scope into the global scope. Their use is still limited to x86_64 and aarch64 though. This allows wine on aarch64 to properly handle variadic functions. Differential Revision: https://reviews.llvm.org/D34475 llvm-svn: 308218
1 parent 20f5a5c commit 022e782

File tree

19 files changed

+138
-54
lines changed

19 files changed

+138
-54
lines changed

clang/include/clang-c/Index.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3205,7 +3205,7 @@ enum CXCallingConv {
32053205
CXCallingConv_AAPCS_VFP = 7,
32063206
CXCallingConv_X86RegCall = 8,
32073207
CXCallingConv_IntelOclBicc = 9,
3208-
CXCallingConv_X86_64Win64 = 10,
3208+
CXCallingConv_Win64 = 10,
32093209
CXCallingConv_X86_64SysV = 11,
32103210
CXCallingConv_X86VectorCall = 12,
32113211
CXCallingConv_Swift = 13,

clang/include/clang/Basic/Builtins.def

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1413,6 +1413,11 @@ BUILTIN(__builtin_os_log_format, "v*v*cC*.", "p:0:nt")
14131413
// Builtins for XRay
14141414
BUILTIN(__xray_customevent, "vcC*z", "")
14151415

1416+
// Win64-compatible va_list functions
1417+
BUILTIN(__builtin_ms_va_start, "vc*&.", "nt")
1418+
BUILTIN(__builtin_ms_va_end, "vc*&", "n")
1419+
BUILTIN(__builtin_ms_va_copy, "vc*&c*&", "n")
1420+
14161421
#undef BUILTIN
14171422
#undef LIBBUILTIN
14181423
#undef LANGBUILTIN

clang/include/clang/Basic/BuiltinsX86.def

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,6 @@
3434
// can use it?
3535
BUILTIN(__builtin_cpu_supports, "bcC*", "nc")
3636

37-
// Win64-compatible va_list functions
38-
BUILTIN(__builtin_ms_va_start, "vc*&.", "nt")
39-
BUILTIN(__builtin_ms_va_end, "vc*&", "n")
40-
BUILTIN(__builtin_ms_va_copy, "vc*&c*&", "n")
41-
4237
// Undefined Values
4338
//
4439
TARGET_BUILTIN(__builtin_ia32_undef128, "V2d", "nc", "")

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8113,10 +8113,10 @@ def err_systemz_invalid_tabort_code : Error<
81138113
"invalid transaction abort code">;
81148114
def err_64_bit_builtin_32_bit_tgt : Error<
81158115
"this builtin is only available on 64-bit targets">;
8116+
def err_builtin_x64_aarch64_only : Error<
8117+
"this builtin is only available on x86-64 and aarch64 targets">;
81168118
def err_ppc_builtin_only_on_pwr7 : Error<
81178119
"this builtin is only valid on POWER7 or later CPUs">;
8118-
def err_x86_builtin_64_only : Error<
8119-
"this builtin is only available on x86-64 targets">;
81208120
def err_x86_builtin_invalid_rounding : Error<
81218121
"invalid rounding argument">;
81228122
def err_x86_builtin_invalid_scale : Error<

clang/include/clang/Basic/Specifiers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ namespace clang {
236236
CC_X86ThisCall, // __attribute__((thiscall))
237237
CC_X86VectorCall, // __attribute__((vectorcall))
238238
CC_X86Pascal, // __attribute__((pascal))
239-
CC_X86_64Win64, // __attribute__((ms_abi))
239+
CC_Win64, // __attribute__((ms_abi))
240240
CC_X86_64SysV, // __attribute__((sysv_abi))
241241
CC_X86RegCall, // __attribute__((regcall))
242242
CC_AAPCS, // __attribute__((pcs("aapcs")))

clang/lib/AST/ItaniumMangle.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2529,7 +2529,7 @@ StringRef CXXNameMangler::getCallingConvQualifierName(CallingConv CC) {
25292529
case CC_X86ThisCall:
25302530
case CC_X86VectorCall:
25312531
case CC_X86Pascal:
2532-
case CC_X86_64Win64:
2532+
case CC_Win64:
25332533
case CC_X86_64SysV:
25342534
case CC_X86RegCall:
25352535
case CC_AAPCS:

clang/lib/AST/MicrosoftMangle.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2122,7 +2122,7 @@ void MicrosoftCXXNameMangler::mangleCallingConvention(CallingConv CC) {
21222122
switch (CC) {
21232123
default:
21242124
llvm_unreachable("Unsupported CC for mangling");
2125-
case CC_X86_64Win64:
2125+
case CC_Win64:
21262126
case CC_X86_64SysV:
21272127
case CC_C: Out << 'A'; break;
21282128
case CC_X86Pascal: Out << 'C'; break;

clang/lib/AST/Type.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2630,7 +2630,7 @@ StringRef FunctionType::getNameForCallConv(CallingConv CC) {
26302630
case CC_X86ThisCall: return "thiscall";
26312631
case CC_X86Pascal: return "pascal";
26322632
case CC_X86VectorCall: return "vectorcall";
2633-
case CC_X86_64Win64: return "ms_abi";
2633+
case CC_Win64: return "ms_abi";
26342634
case CC_X86_64SysV: return "sysv_abi";
26352635
case CC_X86RegCall : return "regcall";
26362636
case CC_AAPCS: return "aapcs";

clang/lib/AST/TypePrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,7 @@ void TypePrinter::printFunctionAfter(const FunctionType::ExtInfo &Info,
751751
case CC_IntelOclBicc:
752752
OS << " __attribute__((intel_ocl_bicc))";
753753
break;
754-
case CC_X86_64Win64:
754+
case CC_Win64:
755755
OS << " __attribute__((ms_abi))";
756756
break;
757757
case CC_X86_64SysV:

clang/lib/Basic/Targets.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4899,7 +4899,7 @@ class X86_64TargetInfo : public X86TargetInfo {
48994899
case CC_Swift:
49004900
case CC_X86VectorCall:
49014901
case CC_IntelOclBicc:
4902-
case CC_X86_64Win64:
4902+
case CC_Win64:
49034903
case CC_PreserveMost:
49044904
case CC_PreserveAll:
49054905
case CC_X86RegCall:
@@ -6290,6 +6290,9 @@ class AArch64TargetInfo : public TargetInfo {
62906290
LongDoubleWidth = LongDoubleAlign = SuitableAlign = 128;
62916291
LongDoubleFormat = &llvm::APFloat::IEEEquad();
62926292

6293+
// Make __builtin_ms_va_list available.
6294+
HasBuiltinMSVaList = true;
6295+
62936296
// {} in inline assembly are neon specifiers, not assembly variant
62946297
// specifiers.
62956298
NoAsmVariants = true;
@@ -6473,6 +6476,7 @@ class AArch64TargetInfo : public TargetInfo {
64736476
case CC_PreserveMost:
64746477
case CC_PreserveAll:
64756478
case CC_OpenCLKernel:
6479+
case CC_Win64:
64766480
return CCCR_OK;
64776481
default:
64786482
return CCCR_Warning;

0 commit comments

Comments
 (0)