OSDN Git Service

softfloat: add APIs to handle alternative sNaN propagation for fmax/fmin
authorChih-Min Chao <chihmin.chao@sifive.com>
Thu, 21 Oct 2021 16:08:45 +0000 (00:08 +0800)
committerAlistair Francis <alistair.francis@wdc.com>
Fri, 29 Oct 2021 06:55:45 +0000 (16:55 +1000)
commit0e9030376e1a8eb6d15cb5e69dffa09a6ff16b92
tree62971887576fbe63cded429e387ce35127ffa79b
parent50d160876414e91e51ac718ac6edea6dbadf4694
softfloat: add APIs to handle alternative sNaN propagation for fmax/fmin

For "fmax/fmin ft0, ft1, ft2" and if one of the inputs is sNaN,

  The original logic:
    Return NaN and set invalid flag if ft1 == sNaN || ft2 == sNan.

  The alternative path:
    Set invalid flag if ft1 == sNaN || ft2 == sNaN.
    Return NaN only if ft1 == NaN && ft2 == NaN.

The IEEE 754 spec allows both implementation and some architecture such
as riscv choose different defintions in two spec versions.
(riscv-spec-v2.2 use original version, riscv-spec-20191213 changes to
 alternative)

Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
Signed-off-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20211021160847.2748577-2-frank.chang@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
fpu/softfloat-parts.c.inc
fpu/softfloat.c
include/fpu/softfloat.h