From: Zixing Liu <liushuyu...@gmail.com>

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 <liushuyu...@gmail.com>
---
 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

Reply via email to