Skip to content

Commit 23c47eb

Browse files
authored
[Driver] Enable __float128 support on X86 on FreeBSD / NetBSD (#72788)
1 parent aafd211 commit 23c47eb

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

clang/lib/Basic/Targets/OSTargets.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ class LLVM_LIBRARY_VISIBILITY FreeBSDTargetInfo : public OSTargetInfo<Target> {
187187
Builder.defineMacro("__FreeBSD_cc_version", Twine(CCVersion));
188188
Builder.defineMacro("__KPRINTF_ATTRIBUTE__");
189189
DefineStd(Builder, "unix", Opts);
190+
if (this->HasFloat128)
191+
Builder.defineMacro("__FLOAT128__");
190192

191193
// On FreeBSD, wchar_t contains the number of the code point as
192194
// used by the character set of the locale. These character sets are
@@ -204,9 +206,11 @@ class LLVM_LIBRARY_VISIBILITY FreeBSDTargetInfo : public OSTargetInfo<Target> {
204206
FreeBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
205207
: OSTargetInfo<Target>(Triple, Opts) {
206208
switch (Triple.getArch()) {
207-
default:
208209
case llvm::Triple::x86:
209210
case llvm::Triple::x86_64:
211+
this->HasFloat128 = true;
212+
[[fallthrough]];
213+
default:
210214
this->MCountName = ".mcount";
211215
break;
212216
case llvm::Triple::mips:
@@ -372,12 +376,22 @@ class LLVM_LIBRARY_VISIBILITY NetBSDTargetInfo : public OSTargetInfo<Target> {
372376
Builder.defineMacro("__unix__");
373377
if (Opts.POSIXThreads)
374378
Builder.defineMacro("_REENTRANT");
379+
if (this->HasFloat128)
380+
Builder.defineMacro("__FLOAT128__");
375381
}
376382

377383
public:
378384
NetBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
379385
: OSTargetInfo<Target>(Triple, Opts) {
380386
this->MCountName = "__mcount";
387+
switch (Triple.getArch()) {
388+
default:
389+
break;
390+
case llvm::Triple::x86:
391+
case llvm::Triple::x86_64:
392+
this->HasFloat128 = true;
393+
break;
394+
}
381395
}
382396
};
383397

clang/test/CodeGenCXX/float128-declarations.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,17 @@
66
// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86
77
// RUN: %clang_cc1 -emit-llvm -triple x86_64-unknown-linux-gnu -std=c++11 \
88
// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86
9-
// RUN: %clang_cc1 -emit-llvm -triple i686-pc-openbsd -std=c++11 \
9+
// RUN: %clang_cc1 -emit-llvm -triple i386-unknown-freebsd -std=c++11 \
1010
// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86
11-
// RUN: %clang_cc1 -emit-llvm -triple amd64-pc-openbsd -std=c++11 \
11+
// RUN: %clang_cc1 -emit-llvm -triple amd64-unknown-freebsd -std=c++11 \
12+
// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86
13+
// RUN: %clang_cc1 -emit-llvm -triple i386-unknown-netbsd -std=c++11 \
14+
// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86
15+
// RUN: %clang_cc1 -emit-llvm -triple amd64-unknown-netbsd -std=c++11 \
16+
// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86
17+
// RUN: %clang_cc1 -emit-llvm -triple i386-unknown-openbsd -std=c++11 \
18+
// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86
19+
// RUN: %clang_cc1 -emit-llvm -triple amd64-unknown-openbsd -std=c++11 \
1220
// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86
1321
// RUN: %clang_cc1 -emit-llvm -triple i386-pc-solaris2.11 -std=c++11 \
1422
// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86

0 commit comments

Comments
 (0)