29 lines
1.2 KiB
Diff
29 lines
1.2 KiB
Diff
diff --git a/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp b/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp
|
|
index 0aba18b20..9bb75e7f4 100644
|
|
--- a/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp
|
|
+++ b/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp
|
|
@@ -33,6 +33,8 @@ ABI computeTargetABI(const Triple &TT, FeatureBitset FeatureBits,
|
|
auto TargetABI = getTargetABI(ABIName);
|
|
bool IsRV64 = TT.isArch64Bit();
|
|
bool IsRV32E = FeatureBits[RISCV::FeatureRV32E];
|
|
+ bool IsRV32D = FeatureBits[RISCV::FeatureStdExtD];
|
|
+ bool IsRV32F = FeatureBits[RISCV::FeatureStdExtF];
|
|
|
|
if (!ABIName.empty() && TargetABI == ABI_Unknown) {
|
|
errs()
|
|
@@ -56,10 +58,10 @@ ABI computeTargetABI(const Triple &TT, FeatureBitset FeatureBits,
|
|
if (TargetABI != ABI_Unknown)
|
|
return TargetABI;
|
|
|
|
- // For now, default to the ilp32/ilp32e/lp64 ABI if no explicit ABI is given
|
|
- // or an invalid/unrecognised string is given. In the future, it might be
|
|
- // worth changing this to default to ilp32f/lp64f and ilp32d/lp64d when
|
|
- // hardware support for floating point is present.
|
|
+ if (IsRV32D)
|
|
+ return ABI_ILP32D;
|
|
+ if (IsRV32F)
|
|
+ return ABI_ILP32F;
|
|
if (IsRV32E)
|
|
return ABI_ILP32E;
|
|
if (IsRV64)
|