Hello Maciej, > > I tested the calculation with the type "float". > > ABI o32 with -mhard-float and -msingle-float produces the following > results: > > 1.000000 (0x3f800000) / 0.000000 (0x00000000) = nan (0x7fffffff) > > 0.000000 (0x00000000) / 0.000000 (0x00000000) = nan (0x7fffffff) > > 0.000000 (0x00000000) / nan (0x7fc00000) = 0.000000 (0x00000000) > > 1.000000 (0x3f800000) + 1.000000 (0x3f800000) = 2.000000 (0x40000000) > > 1.000000 (0x3f800000) + inf (0x7f800000) = inf (0x7f800000) > > inf (0x7f800000) + inf (0x7f800000) = nan (0x7fffffff) > > inf (0x7f800000) + -inf (0xff800000) = 0.000000 (0x00000000) > > nan (0x7fc00000) + nan (0x7fc00000) = nan (0x7fffffff) > > nan (0x7fc00000) + nan (0xffc00000) = 0.000000 (0x00000000) > > > > The r5900 manual calls the result of 0/0 Fmax. So 0x7fffffff seems to be > Fmax. > > So presumably you can get 0x7fffffff as an arithmetic result of a > calculation involving regular numbers as well, right? Say 0x7f7ffffe + > 0x74000000 (using the binary-encoded notation)? That would be beyond the > IEEE-754 single range.
The FPU of the r5900 calculates the following: 340282306073709652508363335590014353408.000000 (0x7f7ffffd) + 40564819207303340847894502572032.000000 (0x74000000) = 340282346638528859811704183484516925440.000000 (0x7f7fffff) 340282326356119256160033759537265639424.000000 (0x7f7ffffe) + 40564819207303340847894502572032.000000 (0x74000000) = inf (0x7f800000) 340282346638528859811704183484516925440.000000 (0x7f7fffff) + 40564819207303340847894502572032.000000 (0x74000000) = inf (0x7f800000) inf (0x7f800000) + 40564819207303340847894502572032.000000 (0x74000000) = nan (0x7f800001) nan (0x7f800001) + 40564819207303340847894502572032.000000 (0x74000000) = nan (0x7f800002) nan (0x7f900000) + 40564819207303340847894502572032.000000 (0x74000000) = nan (0x7f900001) nan (0x7f900001) + 40564819207303340847894502572032.000000 (0x74000000) = nan (0x7f900002) nan (0x7ffffff1) + 40564819207303340847894502572032.000000 (0x74000000) = nan (0x7ffffff2) nan (0x7ffffffc) + 40564819207303340847894502572032.000000 (0x74000000) = nan (0x7ffffffd) nan (0x7ffffffd) + 40564819207303340847894502572032.000000 (0x74000000) = nan (0x7ffffffe) nan (0x7ffffffe) + 40564819207303340847894502572032.000000 (0x74000000) = nan (0x7fffffff) nan (0x7fffffff) + 40564819207303340847894502572032.000000 (0x74000000) = nan (0x7fffffff) So it seems that it interprets nan and inf as normal numbers, but it stops at 0x7fffffff. So 0x7fffffff should be interpreted as overflow. Best regards Jürgen