mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
target-mips: fix mipsdsp_mul_q31_q31
Multiplication of two fractional word elements is not correct when sign extension/promotion is needed. This change fixes it by adding correct casts from unsigned to signed values. In addition, the tests (dpaq_sa_l_w.c and dpsq_sa_l_w.c) have been extended to trigger the current issue. Signed-off-by: Petar Jovanovic <petar.jovanovic@imgtec.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
f05d4d94d6
commit
b6a9f4682e
3 changed files with 59 additions and 11 deletions
|
@ -583,7 +583,7 @@ static inline int64_t mipsdsp_mul_q31_q31(int32_t ac, uint32_t a, uint32_t b,
|
|||
temp = (0x01ull << 63) - 1;
|
||||
set_DSPControl_overflow_flag(1, 16 + ac, env);
|
||||
} else {
|
||||
temp = ((uint64_t)a * (uint64_t)b) << 1;
|
||||
temp = ((int64_t)(int32_t)a * (int32_t)b) << 1;
|
||||
}
|
||||
|
||||
return temp;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue