target-arm: Correct ABD's handling of negative zeroes
Implement ABD by taking the absolute value of the difference of the operands (as the ARM ARM specifies) rather than by flipping the order of the operands to the subtract based on the results of a comparison. The latter approch gives the wrong answers for some edge cases like negative zero. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
0e3261098f
commit
79c18be7df
@ -1789,9 +1789,7 @@ uint32_t HELPER(neon_abd_f32)(uint32_t a, uint32_t b)
|
|||||||
{
|
{
|
||||||
float32 f0 = make_float32(a);
|
float32 f0 = make_float32(a);
|
||||||
float32 f1 = make_float32(b);
|
float32 f1 = make_float32(b);
|
||||||
return float32_val((float32_compare_quiet(f0, f1, NFS) == 1)
|
return float32_val(float32_abs(float32_sub(f0, f1, NFS)));
|
||||||
? float32_sub(f0, f1, NFS)
|
|
||||||
: float32_sub(f1, f0, NFS));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t HELPER(neon_add_f32)(uint32_t a, uint32_t b)
|
uint32_t HELPER(neon_add_f32)(uint32_t a, uint32_t b)
|
||||||
|
Loading…
Reference in New Issue
Block a user