Assembly RISC-V SiFive HiFive释放FMADD(32)下溢标志未设置为低于正常结果

Assembly RISC-V SiFive HiFive释放FMADD(32)下溢标志未设置为低于正常结果,assembly,floating-point,cpu-architecture,ieee-754,riscv,Assembly,Floating Point,Cpu Architecture,Ieee 754,Riscv,所以我的问题要么是我对fpu机制的理解不够,要么是我使用的实现有问题 问题:当使用源操作数值(rs1=0xBF800000,rs2=0x80542353,rs3=0x80800000)执行融合乘法加法指令时,结果是rd=0x802BDCAD,这很好,但由于它是低于正常(微小)值,我非常确定应该设置fpu标志U(下溢)。出于某种原因,它不是。 RISC-V文件规定,在四舍五入后验证微小度方面,低于正常值的处理符合ieee754-2008的规定,该文件规定,如果结果小于(但不是0)最小正常值(在这种

所以我的问题要么是我对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)应引发异常。如果四舍五入结果准确,则不会引发标志,也不会发出不准确异常的信号……”

因此,如果未为下溢异常启用陷阱(将以默认方式处理下溢异常,在不中断程序执行的情况下提供通常的结果),那么,只要结果准确,不会因为结果很小而丢失任何信息,并且不会引发下溢标志