• Shivaprasad G Bhat's avatar
    softfloat: Fix the incorrect computation in float32_exp2 · 1098cc3f
    Shivaprasad G Bhat authored and Richard Henderson's avatar Richard Henderson committed
    The float32_exp2 function is computing wrong exponent of 2.
    
    For example, with the following set of values {0.1, 2.0, 2.0, -1.0},
    the expected output would be {1.071773, 4.000000, 4.000000, 0.500000}.
    Instead, the function is computing {1.119102, 3.382044, 3.382044, -0.191022}
    
    Looking at the code, the float32_exp2() attempts to do this
    
                      2     3     4     5           n
      x        x     x     x     x     x           x
     e  = 1 + --- + --- + --- + --- + --- + ... + --- + ...
               1!    2!    3!    4!    5!          n!
    
    But because of the typo it ends up doing
    
      x        x     x     x     x     x           x
     e  = 1 + --- + --- + --- + --- + --- + ... + --- + ...
               1!    2!    3!    4!    5!          n!
    
    This is because instead of the xnp which holds the numerator, parts_muladd
    is using the xp which is just 'x'.  Commit '572c4d86' refactored this
    function, and mistakenly used xp instead of xnp.
    
    Cc: qemu-stable@nong...
    1098cc3f