Commit 3892ac1447eebffdb3316d029c55b20398210b7f

Stephen White 2023-10-12T13:35:33

Do not flush normal float constants to zero. It's ok to flush denormalized constants to zero. It's not ok to flush perfectly valid normal float constants >= FLT_MIN to zero. Two problems: 1) Values when parsed as doubles with a value less than FLT_MIN are being flushed to zero. This is incorrect when the comparison is done in double, since some values below FLT_MIN in double are equal to FLT_MIN when cast to float. The fix is to perform the comparison in float. 2) Values with a decimal exponent less than FLT_MIN_10_EXP are being flushed to zero. FLT_MIN_10_EXP is -37 but FLT_MIN is 1.1754943E-38. 10^-37 may be the "minimum negative integer such that 10 raised to that power is a normalized float", but being constrained to powers of ten it's above FLT_MIN (which is 2^-126). Since this comparison is done before #1 above, it's only present (AFAIK) to ensure that the exponent will not make the pow() function overflow. Comparing against -38 (FLT_MIN_10_EXP - 1) instead will do the trick. Bug: angleproject:8373, dawn:2077 Change-Id: I1ddf410c2caa9f0d1ba3529ace693dcd326a2cb3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4936714 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Stephen White <senorblanco@chromium.org>