所以我的问题要么是我对 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)异常将被提高。如果四舍五入的结果是准确的,则不会引发任何标志,也不会发出不准确的异常信号......”
因此,如果没有为下溢异常启用陷阱(下溢异常将以默认方式处理,提供通常的结果而不中断程序执行),那么,只要结果准确,就不会因为结果很小,并且不会引发下溢标志。
关于assembly - RISC-V SiFive HiFive Unleashed FMADD(32) 下溢标志未在次正常结果上设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58200992/