RISC-V SiFive HiFive Unleashed FMADD(32) 下溢标志未在次正常结果上设置

RISC-V SiFive HiFive Unleashed FMADD(32) underflow flag not setting on subnormal result

所以我的问题要么是我对 fpu 机制的理解,要么是我使用的实现有问题。

问题:当使用源操作数值执行融合乘加指令时,rs1 = 0xBF800000,rs2 = 0x80542353,rs3 = 0x80800000 结果是 rd = 0x802BDCAD,这很好,但因为它是次正规的(微小的)值 我很确定应该设置 fpu 标志 U(下溢)。出于某种原因,事实并非如此。 RISC-V 文档指出次正规值处理符合 ieee754-2008 关于验证舍入后的微小值,其中指出如果结果小于(但不为 0)最小正规值(在这种情况下为 2^-126),将发出下溢信号,而这个结果显然是。

我是不是遗漏了一些东西并且不需要标记或者可能存在执行问题?

IEEE-754 并没有说,使用舍入后的微小检测,如果结果小于最小正常值但不为零,则总是发出下溢信号。尽管 IEEE-754 2008 7.5 在第一句中以此开头,但它的最后一段说“此外,在下溢的默认异常处理下,如果舍入结果不准确......应引发下溢标志并且不准确(参见 7.6)异常应提高。如果四舍五入的结果是准确的,则不会引发任何标志,也不会发出不准确的异常信号。...”

所以,如果没有为下溢异常启用陷阱(下溢异常将以默认方式处理,提供通常的结果而不中断程序执行),那么,只要结果是准确的,就没有信息了由于结果很小而丢失,不会引发下溢标志。