From: Christophe Lyon <christophe.lyon@arm.com>
To: <gcc-patches@gcc.gnu.org>
Subject: [PATCH 00/10] Enable Decimal Floating Point (DFP) on AArch64
Date: Mon, 9 May 2022 16:34:57 +0200 [thread overview]
Message-ID: <20220509143507.239804-1-christophe.lyon@arm.com> (raw)
This patch series enables support of DFP on AArch64, using the BID
format (Binary Integer Decimal). There is no HW support for DFP on
AArch64, and we made a choice similar to x86: BID format using
libgcc's libbid for software emulation.
This work was done independently from Andrew's patch, which I
discovered some time after I started [1]. The essence is similar
although the AArch64 back-end evolved quite a bit since then, and I add
several tests.
The ABI has been documented a few months ago: _Decimal32 is treated
like float, _Decimal64 is treated like double and _Decimal128 is
treated like long double, using the same registers and conventions
(sN, dN, qN, varargs handling).
I have patches for GDB, which I'll send once this series is committed
in GCC since the first GDB patch is to merge the libdecnumber updated.
As of testing, I have also used libdfp, which required only a couple
of minor patches, and its testsuite passes.
I have tested the whole series on aarch64, aarch64_be and x86_64, no
regression, all the DFP tests pass.
OK?
Thanks,
Christophe
[1] https://gcc.gnu.org/legacy-ml/gcc-patches/2017-07/msg00788.html
Christophe Lyon (10):
aarch64: Enable DFP (Decimal Floating-point) (BID format)
aarch64: Add backend support for DFP
libgcc: Enable XF mode conversions to/from DFP modes only if supported
libgcc: enable DFP for AArch64
testsuite:: Fix pr39986.c testcase for AArch64
testsuite: Add new tests for DFP under aarch64/aapcs64
testsuite: enable more BID DFP tests for AArch64
testsuite: Add C++ unwinding tests with Decimal Floating-Point
libgcc: Add support for HF mode (aka __fp16) in libbid
libgcc: use __builtin_clz and __builtin_ctz in libbid
config/dfp.m4 | 3 +-
gcc/config/aarch64/aarch64.cc | 95 ++++++++++---
gcc/config/aarch64/aarch64.md | 86 ++++++------
gcc/config/aarch64/iterators.md | 28 +++-
gcc/configure | 3 +-
gcc/doc/sourcebuild.texi | 3 +
gcc/testsuite/c-c++-common/dfp/pr39986.c | 22 +--
gcc/testsuite/g++.dg/eh/dfp-1.C | 54 +++++++
gcc/testsuite/g++.dg/eh/dfp-2.C | 54 +++++++
gcc/testsuite/g++.dg/eh/dfp-saves-aarch64.C | 49 +++++++
.../gcc.dg/dfp/bid-non-canonical-d128-1.c | 3 +-
.../gcc.dg/dfp/bid-non-canonical-d128-2.c | 3 +-
.../gcc.dg/dfp/bid-non-canonical-d128-3.c | 3 +-
.../gcc.dg/dfp/bid-non-canonical-d128-4.c | 3 +-
.../gcc.dg/dfp/bid-non-canonical-d32-1.c | 3 +-
.../gcc.dg/dfp/bid-non-canonical-d32-2.c | 3 +-
.../gcc.dg/dfp/bid-non-canonical-d64-1.c | 3 +-
.../gcc.dg/dfp/bid-non-canonical-d64-2.c | 3 +-
.../gcc.target/aarch64/aapcs64/aapcs64.exp | 8 ++
.../gcc.target/aarch64/aapcs64/dfp-1.c | 24 ++++
.../gcc.target/aarch64/aapcs64/func-ret-1.c | 7 +
.../gcc.target/aarch64/aapcs64/func-ret-3.c | 67 +++++++++
.../gcc.target/aarch64/aapcs64/ice_dfp_5.c | 20 +++
.../aarch64/aapcs64/test_align_dfp-1.c | 126 +++++++++++++++++
.../aarch64/aapcs64/test_align_dfp-4.c | 42 ++++++
.../gcc.target/aarch64/aapcs64/test_dfp_1.c | 31 ++++
.../gcc.target/aarch64/aapcs64/test_dfp_10.c | 26 ++++
.../gcc.target/aarch64/aapcs64/test_dfp_11.c | 34 +++++
.../gcc.target/aarch64/aapcs64/test_dfp_12.c | 44 ++++++
.../gcc.target/aarch64/aapcs64/test_dfp_13.c | 34 +++++
.../gcc.target/aarch64/aapcs64/test_dfp_14.c | 35 +++++
.../gcc.target/aarch64/aapcs64/test_dfp_15.c | 21 +++
.../gcc.target/aarch64/aapcs64/test_dfp_16.c | 32 +++++
.../gcc.target/aarch64/aapcs64/test_dfp_17.c | 37 +++++
.../gcc.target/aarch64/aapcs64/test_dfp_18.c | 34 +++++
.../gcc.target/aarch64/aapcs64/test_dfp_19.c | 35 +++++
.../gcc.target/aarch64/aapcs64/test_dfp_2.c | 17 +++
.../gcc.target/aarch64/aapcs64/test_dfp_20.c | 22 +++
.../gcc.target/aarch64/aapcs64/test_dfp_21.c | 21 +++
.../gcc.target/aarch64/aapcs64/test_dfp_22.c | 19 +++
.../gcc.target/aarch64/aapcs64/test_dfp_23.c | 42 ++++++
.../gcc.target/aarch64/aapcs64/test_dfp_24.c | 22 +++
.../gcc.target/aarch64/aapcs64/test_dfp_25.c | 61 ++++++++
.../gcc.target/aarch64/aapcs64/test_dfp_26.c | 54 +++++++
.../gcc.target/aarch64/aapcs64/test_dfp_27.c | 46 ++++++
.../gcc.target/aarch64/aapcs64/test_dfp_3.c | 18 +++
.../gcc.target/aarch64/aapcs64/test_dfp_5.c | 24 ++++
.../gcc.target/aarch64/aapcs64/test_dfp_6.c | 26 ++++
.../gcc.target/aarch64/aapcs64/test_dfp_7.c | 30 ++++
.../gcc.target/aarch64/aapcs64/test_dfp_8.c | 24 ++++
.../gcc.target/aarch64/aapcs64/test_dfp_9.c | 32 +++++
.../aarch64/aapcs64/test_quad_double_dfp.c | 26 ++++
.../gcc.target/aarch64/aapcs64/type-def.h | 132 ++++++++++++++++++
.../gcc.target/aarch64/aapcs64/va_arg_dfp-1.c | 60 ++++++++
.../aarch64/aapcs64/va_arg_dfp-10.c | 29 ++++
.../aarch64/aapcs64/va_arg_dfp-11.c | 32 +++++
.../aarch64/aapcs64/va_arg_dfp-12.c | 64 +++++++++
.../aarch64/aapcs64/va_arg_dfp-13.c | 59 ++++++++
.../aarch64/aapcs64/va_arg_dfp-14.c | 35 +++++
.../aarch64/aapcs64/va_arg_dfp-16.c | 28 ++++
.../gcc.target/aarch64/aapcs64/va_arg_dfp-2.c | 75 ++++++++++
.../gcc.target/aarch64/aapcs64/va_arg_dfp-3.c | 94 +++++++++++++
.../gcc.target/aarch64/aapcs64/va_arg_dfp-4.c | 90 ++++++++++++
.../gcc.target/aarch64/aapcs64/va_arg_dfp-5.c | 47 +++++++
.../gcc.target/aarch64/aapcs64/va_arg_dfp-6.c | 40 ++++++
.../gcc.target/aarch64/aapcs64/va_arg_dfp-8.c | 25 ++++
.../gcc.target/aarch64/aapcs64/va_arg_dfp-9.c | 31 ++++
.../gcc.target/aarch64/convert-dfp-2.c | 42 ++++++
.../gcc.target/aarch64/convert-dfp.c | 60 ++++++++
gcc/testsuite/lib/target-supports.exp | 11 ++
libdecnumber/configure | 3 +-
libgcc/Makefile.in | 9 +-
libgcc/config.host | 6 +
libgcc/config/libbid/_dd_to_hf.c | 36 +++++
libgcc/config/libbid/_dd_to_xf.c | 2 +
libgcc/config/libbid/_hf_to_dd.c | 36 +++++
libgcc/config/libbid/_hf_to_sd.c | 36 +++++
libgcc/config/libbid/_hf_to_td.c | 36 +++++
libgcc/config/libbid/_sd_to_hf.c | 36 +++++
libgcc/config/libbid/_sd_to_xf.c | 2 +
libgcc/config/libbid/_td_to_hf.c | 36 +++++
libgcc/config/libbid/_td_to_xf.c | 2 +
libgcc/config/libbid/_xf_to_dd.c | 2 +
libgcc/config/libbid/_xf_to_sd.c | 2 +
libgcc/config/libbid/_xf_to_td.c | 2 +
libgcc/config/libbid/bid_binarydecimal.c | 51 +------
libgcc/config/libbid/bid_gcc_intrinsics.h | 30 +++-
libgcc/configure | 3 +-
88 files changed, 2698 insertions(+), 148 deletions(-)
create mode 100644 gcc/testsuite/g++.dg/eh/dfp-1.C
create mode 100644 gcc/testsuite/g++.dg/eh/dfp-2.C
create mode 100644 gcc/testsuite/g++.dg/eh/dfp-saves-aarch64.C
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/dfp-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/ice_dfp_5.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_align_dfp-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_align_dfp-4.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_10.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_11.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_12.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_13.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_14.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_15.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_16.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_17.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_18.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_19.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_20.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_21.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_22.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_23.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_24.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_25.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_26.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_27.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_3.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_5.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_6.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_7.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_8.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_dfp_9.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/test_quad_double_dfp.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-10.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-11.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-12.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-13.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-14.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-16.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-3.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-4.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-5.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-6.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-8.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg_dfp-9.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/convert-dfp-2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/convert-dfp.c
create mode 100644 libgcc/config/libbid/_dd_to_hf.c
create mode 100644 libgcc/config/libbid/_hf_to_dd.c
create mode 100644 libgcc/config/libbid/_hf_to_sd.c
create mode 100644 libgcc/config/libbid/_hf_to_td.c
create mode 100644 libgcc/config/libbid/_sd_to_hf.c
create mode 100644 libgcc/config/libbid/_td_to_hf.c
--
2.25.1
next reply other threads:[~2022-05-09 14:35 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-09 14:34 Christophe Lyon [this message]
2022-05-09 14:34 ` [PATCH 01/10] aarch64: Enable DFP (Decimal Floating-point) (BID format) Christophe Lyon
2022-05-09 14:34 ` [PATCH 02/10] aarch64: Add backend support for DFP Christophe Lyon
2022-05-10 9:23 ` Richard Sandiford
2022-05-10 9:30 ` Richard Sandiford
2022-05-10 10:18 ` Christophe Lyon
2022-05-13 16:08 ` [PATCH v2 " Christophe Lyon
2022-05-13 16:35 ` Richard Sandiford
2022-05-16 12:17 ` Christophe Lyon
2022-05-09 14:35 ` [PATCH 03/10] libgcc: Enable XF mode conversions to/from DFP modes only if supported Christophe Lyon
2022-05-09 14:35 ` [PATCH 04/10] libgcc: enable DFP for AArch64 Christophe Lyon
2022-05-09 14:35 ` [PATCH 05/10] testsuite:: Fix pr39986.c testcase " Christophe Lyon
2022-05-09 14:35 ` [PATCH 06/10] testsuite: Add new tests for DFP under aarch64/aapcs64 Christophe Lyon
2022-05-09 14:35 ` [PATCH 07/10] testsuite: enable more BID DFP tests for AArch64 Christophe Lyon
2022-05-09 14:35 ` [PATCH 08/10] testsuite: Add C++ unwinding tests with Decimal Floating-Point Christophe Lyon
2022-05-10 9:27 ` Richard Sandiford
2022-05-13 16:35 ` [PATCH v2 " Christophe Lyon
2022-05-13 17:52 ` Christophe Lyon
2022-05-16 10:33 ` Richard Sandiford
2022-05-09 14:35 ` [PATCH 09/10] libgcc: Add support for HF mode (aka __fp16) in libbid Christophe Lyon
2022-05-09 21:27 ` Joseph Myers
2022-05-10 8:08 ` Christophe Lyon
2022-05-10 20:26 ` Joseph Myers
2022-05-13 16:34 ` [PATCH v2 " Christophe Lyon
2022-05-13 17:52 ` Christophe Lyon
2022-05-13 18:23 ` Joseph Myers
2022-05-13 18:30 ` Christophe Lyon
2022-05-16 13:47 ` [PATCH v3 09/10] libgcc: Add support for HF mode (aka _Float16) " Christophe Lyon
2022-05-19 13:03 ` Christophe Lyon
2022-05-19 19:35 ` Joseph Myers
2022-05-20 7:47 ` Christophe Lyon
2022-05-09 14:35 ` [PATCH 10/10] libgcc: use __builtin_clz and __builtin_ctz " Christophe Lyon
2022-05-10 9:37 ` [PATCH 00/10] Enable Decimal Floating Point (DFP) on AArch64 Richard Sandiford
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220509143507.239804-1-christophe.lyon@arm.com \
--to=christophe.lyon@arm.com \
--cc=gcc-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).