arm64 VEX frontend and backend support for Iop_M{Add,Sub}F{32,64}
commit04cdc29b007594a0e58ffef0c9dd87df3ea595ea
authorMark Wielaard <mark@klomp.org>
Wed, 14 Oct 2020 10:11:34 +0000 (14 06:11 -0400)
committerMark Wielaard <mark@klomp.org>
Tue, 15 Dec 2020 15:23:35 +0000 (15 16:23 +0100)
treed59bf0faee108cf9d2ddb2464eac3fb78093ccd2
parentab257bc49a6c8beefa794470446f917ec441f718
arm64 VEX frontend and backend support for Iop_M{Add,Sub}F{32,64}

The arm64 frontend used to implement the scalar fmadd, fmsub, fnmadd
and fnmsub iinstructions into separate addition/substraction and
multiplication instructions, which caused rounding issues.

This patch turns them into Iop_M{Add,Sub}F{32,64} instructions
(with some arguments negated). And the backend now emits fmadd or fmsub
instructions.

Alexandra Hajkova <ahajkova@redhat.com> added tests and fixed up the
implementation to make sure rounding (and sign) are correct now.

https://bugs.kde.org/show_bug.cgi?id=426014
VEX/priv/guest_arm64_toIR.c
VEX/priv/host_arm64_defs.c
VEX/priv/host_arm64_defs.h
VEX/priv/host_arm64_isel.c
none/tests/arm64/Makefile.am
none/tests/arm64/fmadd_sub.c [new file with mode: 0644]
none/tests/arm64/fmadd_sub.stderr.exp [new file with mode: 0644]
none/tests/arm64/fmadd_sub.stdout.exp [new file with mode: 0644]
none/tests/arm64/fmadd_sub.vgtest [new file with mode: 0644]