OSDN Git Service

softfloat: Fix exception flag handling for float32_to_float16()
authorPeter Maydell <peter.maydell@linaro.org>
Mon, 6 Jan 2014 11:47:21 +0000 (11:47 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Wed, 8 Jan 2014 19:07:22 +0000 (19:07 +0000)
commit38970efafdfa8a992c177563c4f0d77062b88fd9
tree26655e0f499abbc1256856473823e0df70c7e2bd
parent9df90ad078ec782d1339bd6879b6ea117f9759f7
softfloat: Fix exception flag handling for float32_to_float16()

Our float32 to float16 conversion routine was generating the correct
numerical answers, but not always setting the right set of exception
flags. Fix this, mostly by rearranging the code to more closely
resemble RoundAndPackFloat*, and in particular:
 * non-IEEE halfprec always raises Invalid for input NaNs
 * we need to check for the overflow case before underflow
 * we weren't getting the tininess-detected-after-rounding
   case correct (somewhat academic since only ARM uses halfprec
   and it is always tininess-detected-before-rounding)
 * non-IEEE halfprec overflow raises only Invalid, not
   Invalid + Inexact
 * we weren't setting Inexact when we should

Also add some clarifying comments about what the code is doing.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <rth@twiddle.net>
fpu/softfloat.c