Skip to content

Commit 3177fc8

Browse files
[clang] use mixin for aarch64 and x86_64 uefi
1 parent dfcd456 commit 3177fc8

File tree

3 files changed

+17
-34
lines changed

3 files changed

+17
-34
lines changed

clang/lib/Basic/Targets.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,10 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
170170
case llvm::Triple::OpenBSD:
171171
return std::make_unique<OpenBSDTargetInfo<AArch64leTargetInfo>>(Triple,
172172
Opts);
173+
case llvm::Triple::UEFI:
174+
return std::make_unique<UEFITargetInfo<AArch64leTargetInfo>>(Triple,
175+
Opts);
176+
173177
case llvm::Triple::Win32:
174178
switch (Triple.getEnvironment()) {
175179
case llvm::Triple::GNU:
@@ -631,7 +635,7 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
631635
return std::make_unique<SolarisTargetInfo<X86_64TargetInfo>>(Triple,
632636
Opts);
633637
case llvm::Triple::UEFI:
634-
return std::make_unique<UEFIX86_64TargetInfo>(Triple, Opts);
638+
return std::make_unique<UEFITargetInfo<X86_64TargetInfo>>(Triple, Opts);
635639

636640
case llvm::Triple::Win32: {
637641
switch (Triple.getEnvironment()) {

clang/lib/Basic/Targets/OSTargets.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#define LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H
1414

1515
#include "Targets.h"
16+
#include "clang/Basic/TargetInfo.h"
1617

1718
namespace clang {
1819
namespace targets {
@@ -806,6 +807,8 @@ class LLVM_LIBRARY_VISIBILITY ZOSTargetInfo : public OSTargetInfo<Target> {
806807
// UEFI target
807808
template <typename Target>
808809
class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> {
810+
llvm::Triple Triple;
811+
809812
protected:
810813
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
811814
MacroBuilder &Builder) const override {
@@ -814,11 +817,19 @@ class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> {
814817

815818
public:
816819
UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
817-
: OSTargetInfo<Target>(Triple, Opts) {
820+
: OSTargetInfo<Target>(Triple, Opts), Triple(Triple) {
818821
this->WCharType = TargetInfo::UnsignedShort;
819822
this->WIntType = TargetInfo::UnsignedShort;
820823
this->UseMicrosoftManglingForC = true;
821824
}
825+
826+
TargetInfo::CallingConvKind
827+
getCallingConvKind(bool ClangABICompat4) const override {
828+
if (Triple.getArch() == llvm::Triple::x86_64)
829+
return TargetInfo::CallingConvKind::CCK_MicrosoftWin64;
830+
831+
return Target::getCallingConvKind(ClangABICompat4);
832+
}
822833
};
823834

824835
void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,

clang/lib/Basic/Targets/X86.h

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -829,38 +829,6 @@ class LLVM_LIBRARY_VISIBILITY X86_64TargetInfo : public X86TargetInfo {
829829
}
830830
};
831831

832-
// x86-64 UEFI target
833-
class LLVM_LIBRARY_VISIBILITY UEFIX86_64TargetInfo
834-
: public UEFITargetInfo<X86_64TargetInfo> {
835-
public:
836-
UEFIX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
837-
: UEFITargetInfo<X86_64TargetInfo>(Triple, Opts) {
838-
this->TheCXXABI.set(TargetCXXABI::Microsoft);
839-
this->MaxTLSAlign = 8192u * this->getCharWidth();
840-
this->resetDataLayout("e-m:w-p270:32:32-p271:32:32-p272:64:64-"
841-
"i64:64-i128:128-f80:128-n8:16:32:64-S128");
842-
}
843-
844-
BuiltinVaListKind getBuiltinVaListKind() const override {
845-
return TargetInfo::CharPtrBuiltinVaList;
846-
}
847-
848-
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override {
849-
switch (CC) {
850-
case CC_C:
851-
case CC_Win64:
852-
return CCCR_OK;
853-
default:
854-
return CCCR_Warning;
855-
}
856-
}
857-
858-
TargetInfo::CallingConvKind
859-
getCallingConvKind(bool ClangABICompat4) const override {
860-
return CCK_MicrosoftWin64;
861-
}
862-
};
863-
864832
// x86-64 Windows target
865833
class LLVM_LIBRARY_VISIBILITY WindowsX86_64TargetInfo
866834
: public WindowsTargetInfo<X86_64TargetInfo> {

0 commit comments

Comments
 (0)