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