mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 13:30:52 +00:00
target/s390x: fix handling of zeroes in vfmin/vfmax
vfmin_res() / vfmax_res() are trying to check whether a and b are both
zeroes, but in reality they check that they are the same kind of zero.
This causes incorrect results when comparing positive and negative
zeroes.
Fixes: da4807527f
("s390x/tcg: Implement VECTOR FP (MAXIMUM|MINIMUM)")
Co-developed-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-Id: <20220713182612.3780050-2-iii@linux.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
b8bb9bbf46
commit
13c59eb09b
@ -824,7 +824,7 @@ static S390MinMaxRes vfmin_res(uint16_t dcmask_a, uint16_t dcmask_b,
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
} else if (unlikely(dcmask_a & dcmask_b & DCMASK_ZERO)) {
|
||||
} else if (unlikely((dcmask_a & DCMASK_ZERO) && (dcmask_b & DCMASK_ZERO))) {
|
||||
switch (type) {
|
||||
case S390_MINMAX_TYPE_JAVA:
|
||||
return neg_a ? S390_MINMAX_RES_A : S390_MINMAX_RES_B;
|
||||
@ -874,7 +874,7 @@ static S390MinMaxRes vfmax_res(uint16_t dcmask_a, uint16_t dcmask_b,
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
} else if (unlikely(dcmask_a & dcmask_b & DCMASK_ZERO)) {
|
||||
} else if (unlikely((dcmask_a & DCMASK_ZERO) && (dcmask_b & DCMASK_ZERO))) {
|
||||
const bool neg_a = dcmask_a & DCMASK_NEGATIVE;
|
||||
|
||||
switch (type) {
|
||||
|
Loading…
Reference in New Issue
Block a user