From: Zixing Liu <[email protected]>
gcc/ChangeLog:
* config/rs6000/rs6000-d.cc: define ELFv1 and ELFv2
version identifiers according to the target options.
gcc/testsuite/ChangeLog:
* gdc.dg/ppcabi.d: Add a test to test for code generation
correctness when using IEEE 128 and new ELFv1 and ELFv2
identifiers.
Signed-off-by: Zixing Liu <[email protected]>
---
gcc/config/rs6000/rs6000-d.cc | 5 +++++
gcc/testsuite/gdc.dg/ppcabi.d | 23 +++++++++++++++++++++++
2 files changed, 28 insertions(+)
create mode 100644 gcc/testsuite/gdc.dg/ppcabi.d
diff --git a/gcc/config/rs6000/rs6000-d.cc b/gcc/config/rs6000/rs6000-d.cc
index c9e1acad88..bc5d643d49 100644
--- a/gcc/config/rs6000/rs6000-d.cc
+++ b/gcc/config/rs6000/rs6000-d.cc
@@ -45,6 +45,11 @@ rs6000_d_target_versions (void)
d_add_builtin_version ("PPC_SoftFloat");
d_add_builtin_version ("D_SoftFloat");
}
+
+ if (DEFAULT_ABI == ABI_ELFv2)
+ d_add_builtin_version ("ELFv2");
+ else
+ d_add_builtin_version ("ELFv1");
}
/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */
diff --git a/gcc/testsuite/gdc.dg/ppcabi.d b/gcc/testsuite/gdc.dg/ppcabi.d
new file mode 100644
index 0000000000..9271c64436
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/ppcabi.d
@@ -0,0 +1,23 @@
+// { dg-do compile { target { powerpc64*-linux-gnu* } } }
+// { dg-options "-mabi=ieeelongdouble -mabi=elfv2 -mcpu=power9 -O2" }
+
+// { dg-final { scan-assembler "_Z13test_functionu9__ieee128" } }
+extern (C++) bool test_function(real arg) {
+ // { dg-final { scan-assembler "xscmpuqp" } }
+ // { dg-final { scan-assembler-not "fcmpu" } }
+ return arg > 0.0;
+}
+
+// { dg-final { scan-assembler "test_version" } }
+extern (C) bool test_version() {
+ // { dg-final { scan-assembler "li 3,1" } }
+ version (PPC64) return real.mant_dig == 113;
+ else return false;
+}
+
+// { dg-final { scan-assembler "test_elf_version" } }
+extern (C) bool test_elf_version() {
+ // { dg-final { scan-assembler "li 3,0" } }
+ version (ELFv2) return false;
+ else return true;
+}
--
2.48.1