• John David Anglin's avatar
    parisc: avoid undefined shift in cnv_float.h · cabd91c3
    John David Anglin authored
    The attached change fixes a float conversion problem found running the
    GCC testsuite with GCC configured with --with-arch=2.0.
    
    The actual problem occurs for an exponent value of 63. This is the
    maximum exponent value that can be passed. This causes a left shift by
    32 in the else hunk of the macro. This causes undefined behavior and the
    wrong value is returned for dresultB. The fix is the check "exponent <=
    62". If the exponent is 63, dresultB is set to 0. The patch also
    optimizes the operation a bit by copying "Sall(sgl_value) <<
    SGL_EXP_LENGTH" to val, so that sgl_value is not modified.
    Signed-off-by: default avatarJohn David Anglin <dave.anglin@bell.net>
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    cabd91c3
cnv_float.h 12.6 KB