[ARC] generate signaling FDCMPF for hard float comparisons
authorVineet Gupta <vgupta@synopsys.com>
Thu, 12 Dec 2019 08:42:21 +0000 (08:42 +0000)
committerClaudiu Zissulescu <claziss@gcc.gnu.org>
Thu, 12 Dec 2019 08:42:21 +0000 (09:42 +0100)
commitfbf8314b0a8dc4e234997aaa850675379e0adc2a
tree1fa68ba3b4ce03df9d29f61d24daae3c0150806c
parent48f13fb118fe82efebf8fcec3a42be89486ec2dc
[ARC] generate signaling FDCMPF for hard float comparisons

PR 92846:
ARC gcc generates FDCMP instructions which raises Invalid operation for
signaling NaN only. This causes glibc iseqsig() primitives to fail (in
the current ongoing glibc port to ARC)

So break up the hard float compares into tw categories and for unordered
compares generate the FDCMPF instructions which raised exception for
either NaNs.

With this fix testsuite/gcc.dg/torture/pr52451.c passes for ARC.

Also no regressions for the glibc math testsuite, only 6 additional
passes for test*iseqsig

gcc/
xxxx-xx-xx  Vineet Gupta  <vgupta@synopsys.com>

* config/arc/arc-modes.def (CC_FPUE): New Mode CC_FPUE which
helps codegen generate exceptions even for quiet NaN.
* config/arc/arc.c (arc_init_reg_tables): Handle New CC_FPUE mode.
(get_arc_condition_code): Likewise.
(arc_select_cc_mode): LT, LE, GT, GE to use the New CC_FPUE mode.
* config/arc/arc.h (REVERSE_CONDITION): Handle New CC_FPUE mode.
* config/arc/predicates.md (proper_comparison_operator): Likewise.
* config/arc/fpu.md (cmpsf_fpu_trap): New Pattern for CC_FPUE.
(cmpdf_fpu_trap): Likewise.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
From-SVN: r279274
gcc/ChangeLog
gcc/config/arc/arc-modes.def
gcc/config/arc/arc.c
gcc/config/arc/arc.h
gcc/config/arc/fpu.md
gcc/config/arc/predicates.md