qiucf created this revision. qiucf added reviewers: nemanjai, jsji, steven.zhang, PowerPC, kbarton. Herald added subscribers: cfe-commits, dexonsmith, shchenz. Herald added a project: clang. qiucf requested review of this revision.
We have option `-mabi=ieeelongdouble` to set current `long double` to IEEEquad semantics. Like what GCC does, we need to define `__LONG_DOUBLE_IEEE128__` macro in this case, and `__LONG_DOUBLE_IBM128__` if using PPCDoubleDouble. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D90208 Files: clang/lib/Basic/Targets/PPC.cpp clang/test/CodeGen/ppc64-long-double.cpp Index: clang/test/CodeGen/ppc64-long-double.cpp =================================================================== --- clang/test/CodeGen/ppc64-long-double.cpp +++ clang/test/CodeGen/ppc64-long-double.cpp @@ -16,6 +16,20 @@ // RUN: %clang_cc1 -triple powerpc64-linux-musl -emit-llvm -o - -mlong-double-128 %s | \ // RUN: FileCheck --check-prefix=IBM128 %s +// Check IBM-quad and IEEE-quad macros are defined. +// RUN: %clang -E -dM -ffreestanding -target powerpc64le-linux-gnu %s \ +// RUN: -mabi=ibmlongdouble | FileCheck -check-prefix=CHECK-DEF-IBM128 %s +// RUN: %clang -E -dM -ffreestanding -target powerpc64le-linux-gnu %s \ +// RUN: -mabi=ieeelongdouble | FileCheck -check-prefix=CHECK-DEF-IEEE128 %s +// RUN: %clang -E -dM -ffreestanding -target powerpc64le-linux-gnu %s \ +// RUN: -mlong-double-64 | FileCheck -check-prefix=CHECK-DEF-F64 %s + +// CHECK-DEF-IBM128: #define __LONG_DOUBLE_128__ +// CHECK-DEF-IBM128: #define __LONG_DOUBLE_IBM128__ +// CHECK-DEF-IEEE128: #define __LONG_DOUBLE_128__ +// CHECK-DEF-IEEE128: #define __LONG_DOUBLE_IEEE128__ +// CHECK-DEF-F64-NOT: #define __LONG_DOUBLE_128__ + long double x = 0; int size = sizeof(x); Index: clang/lib/Basic/Targets/PPC.cpp =================================================================== --- clang/lib/Basic/Targets/PPC.cpp +++ clang/lib/Basic/Targets/PPC.cpp @@ -122,6 +122,10 @@ if (LongDoubleWidth == 128) { Builder.defineMacro("__LONG_DOUBLE_128__"); Builder.defineMacro("__LONGDOUBLE128"); + if (Opts.PPCIEEELongDouble) + Builder.defineMacro("__LONG_DOUBLE_IEEE128__"); + else + Builder.defineMacro("__LONG_DOUBLE_IBM128__"); } // Define this for elfv2 (64-bit only) or 64-bit darwin.
Index: clang/test/CodeGen/ppc64-long-double.cpp =================================================================== --- clang/test/CodeGen/ppc64-long-double.cpp +++ clang/test/CodeGen/ppc64-long-double.cpp @@ -16,6 +16,20 @@ // RUN: %clang_cc1 -triple powerpc64-linux-musl -emit-llvm -o - -mlong-double-128 %s | \ // RUN: FileCheck --check-prefix=IBM128 %s +// Check IBM-quad and IEEE-quad macros are defined. +// RUN: %clang -E -dM -ffreestanding -target powerpc64le-linux-gnu %s \ +// RUN: -mabi=ibmlongdouble | FileCheck -check-prefix=CHECK-DEF-IBM128 %s +// RUN: %clang -E -dM -ffreestanding -target powerpc64le-linux-gnu %s \ +// RUN: -mabi=ieeelongdouble | FileCheck -check-prefix=CHECK-DEF-IEEE128 %s +// RUN: %clang -E -dM -ffreestanding -target powerpc64le-linux-gnu %s \ +// RUN: -mlong-double-64 | FileCheck -check-prefix=CHECK-DEF-F64 %s + +// CHECK-DEF-IBM128: #define __LONG_DOUBLE_128__ +// CHECK-DEF-IBM128: #define __LONG_DOUBLE_IBM128__ +// CHECK-DEF-IEEE128: #define __LONG_DOUBLE_128__ +// CHECK-DEF-IEEE128: #define __LONG_DOUBLE_IEEE128__ +// CHECK-DEF-F64-NOT: #define __LONG_DOUBLE_128__ + long double x = 0; int size = sizeof(x); Index: clang/lib/Basic/Targets/PPC.cpp =================================================================== --- clang/lib/Basic/Targets/PPC.cpp +++ clang/lib/Basic/Targets/PPC.cpp @@ -122,6 +122,10 @@ if (LongDoubleWidth == 128) { Builder.defineMacro("__LONG_DOUBLE_128__"); Builder.defineMacro("__LONGDOUBLE128"); + if (Opts.PPCIEEELongDouble) + Builder.defineMacro("__LONG_DOUBLE_IEEE128__"); + else + Builder.defineMacro("__LONG_DOUBLE_IBM128__"); } // Define this for elfv2 (64-bit only) or 64-bit darwin.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits