@@ -138,10 +138,16 @@ enum lostFraction { // Example of truncated bits:
138138// / New operations: sqrt, IEEE remainder, C90 fmod, nexttoward.
139139// /
140140
141+ namespace detail {
142+ class IEEEFloat ;
143+ class DoubleAPFloat ;
144+ } // namespace detail
145+
141146// This is the common type definitions shared by APFloat and its internal
142147// implementation classes. This struct should not define any non-static data
143148// members.
144- struct APFloatBase {
149+ class APFloatBase {
150+ public:
145151 typedef APInt::WordType integerPart;
146152 static constexpr unsigned integerPartWidth = APInt::APINT_BITS_PER_WORD;
147153
@@ -257,30 +263,64 @@ struct APFloatBase {
257263 LLVM_ABI static const llvm::fltSemantics &EnumToSemantics (Semantics S);
258264 LLVM_ABI static Semantics SemanticsToEnum (const llvm::fltSemantics &Sem);
259265
260- LLVM_ABI static const fltSemantics &IEEEhalf () LLVM_READNONE;
261- LLVM_ABI static const fltSemantics &BFloat () LLVM_READNONE;
262- LLVM_ABI static const fltSemantics &IEEEsingle () LLVM_READNONE;
263- LLVM_ABI static const fltSemantics &IEEEdouble () LLVM_READNONE;
264- LLVM_ABI static const fltSemantics &IEEEquad () LLVM_READNONE;
265- LLVM_ABI static const fltSemantics &PPCDoubleDouble () LLVM_READNONE;
266- LLVM_ABI static const fltSemantics &PPCDoubleDoubleLegacy () LLVM_READNONE;
267- LLVM_ABI static const fltSemantics &Float8E5M2 () LLVM_READNONE;
268- LLVM_ABI static const fltSemantics &Float8E5M2FNUZ () LLVM_READNONE;
269- LLVM_ABI static const fltSemantics &Float8E4M3 () LLVM_READNONE;
270- LLVM_ABI static const fltSemantics &Float8E4M3FN () LLVM_READNONE;
271- LLVM_ABI static const fltSemantics &Float8E4M3FNUZ () LLVM_READNONE;
272- LLVM_ABI static const fltSemantics &Float8E4M3B11FNUZ () LLVM_READNONE;
273- LLVM_ABI static const fltSemantics &Float8E3M4 () LLVM_READNONE;
274- LLVM_ABI static const fltSemantics &FloatTF32 () LLVM_READNONE;
275- LLVM_ABI static const fltSemantics &Float8E8M0FNU () LLVM_READNONE;
276- LLVM_ABI static const fltSemantics &Float6E3M2FN () LLVM_READNONE;
277- LLVM_ABI static const fltSemantics &Float6E2M3FN () LLVM_READNONE;
278- LLVM_ABI static const fltSemantics &Float4E2M1FN () LLVM_READNONE;
279- LLVM_ABI static const fltSemantics &x87DoubleExtended () LLVM_READNONE;
266+ private:
267+ LLVM_ABI static const fltSemantics semIEEEhalf;
268+ LLVM_ABI static const fltSemantics semBFloat;
269+ LLVM_ABI static const fltSemantics semIEEEsingle;
270+ LLVM_ABI static const fltSemantics semIEEEdouble;
271+ LLVM_ABI static const fltSemantics semIEEEquad;
272+ LLVM_ABI static const fltSemantics semFloat8E5M2;
273+ LLVM_ABI static const fltSemantics semFloat8E5M2FNUZ;
274+ LLVM_ABI static const fltSemantics semFloat8E4M3;
275+ LLVM_ABI static const fltSemantics semFloat8E4M3FN;
276+ LLVM_ABI static const fltSemantics semFloat8E4M3FNUZ;
277+ LLVM_ABI static const fltSemantics semFloat8E4M3B11FNUZ;
278+ LLVM_ABI static const fltSemantics semFloat8E3M4;
279+ LLVM_ABI static const fltSemantics semFloatTF32;
280+ LLVM_ABI static const fltSemantics semFloat8E8M0FNU;
281+ LLVM_ABI static const fltSemantics semFloat6E3M2FN;
282+ LLVM_ABI static const fltSemantics semFloat6E2M3FN;
283+ LLVM_ABI static const fltSemantics semFloat4E2M1FN;
284+ LLVM_ABI static const fltSemantics semX87DoubleExtended;
285+ LLVM_ABI static const fltSemantics semBogus;
286+ LLVM_ABI static const fltSemantics semPPCDoubleDouble;
287+ LLVM_ABI static const fltSemantics semPPCDoubleDoubleLegacy;
288+
289+ friend class detail ::IEEEFloat;
290+ friend class detail ::DoubleAPFloat;
291+ friend class APFloat ;
292+
293+ public:
294+ static const fltSemantics &IEEEhalf () { return semIEEEhalf; }
295+ static const fltSemantics &BFloat () { return semBFloat; }
296+ static const fltSemantics &IEEEsingle () { return semIEEEsingle; }
297+ static const fltSemantics &IEEEdouble () { return semIEEEdouble; }
298+ static const fltSemantics &IEEEquad () { return semIEEEquad; }
299+ static const fltSemantics &PPCDoubleDouble () { return semPPCDoubleDouble; }
300+ static const fltSemantics &PPCDoubleDoubleLegacy () {
301+ return semPPCDoubleDoubleLegacy;
302+ }
303+ static const fltSemantics &Float8E5M2 () { return semFloat8E5M2; }
304+ static const fltSemantics &Float8E5M2FNUZ () { return semFloat8E5M2FNUZ; }
305+ static const fltSemantics &Float8E4M3 () { return semFloat8E4M3; }
306+ static const fltSemantics &Float8E4M3FN () { return semFloat8E4M3FN; }
307+ static const fltSemantics &Float8E4M3FNUZ () { return semFloat8E4M3FNUZ; }
308+ static const fltSemantics &Float8E4M3B11FNUZ () {
309+ return semFloat8E4M3B11FNUZ;
310+ }
311+ static const fltSemantics &Float8E3M4 () { return semFloat8E3M4; }
312+ static const fltSemantics &FloatTF32 () { return semFloatTF32; }
313+ static const fltSemantics &Float8E8M0FNU () { return semFloat8E8M0FNU; }
314+ static const fltSemantics &Float6E3M2FN () { return semFloat6E3M2FN; }
315+ static const fltSemantics &Float6E2M3FN () { return semFloat6E2M3FN; }
316+ static const fltSemantics &Float4E2M1FN () { return semFloat4E2M1FN; }
317+ static const fltSemantics &x87DoubleExtended () {
318+ return semX87DoubleExtended;
319+ }
280320
281321 // / A Pseudo fltsemantic used to construct APFloats that cannot conflict with
282322 // / anything real.
283- LLVM_ABI static const fltSemantics &Bogus () LLVM_READNONE;
323+ static const fltSemantics &Bogus () { return semBogus; }
284324
285325 // Returns true if any number described by this semantics can be precisely
286326 // represented by the specified semantics. Does not take into account
0 commit comments