From b6a9f4682e62c686995cc1a1fe2ef4a57a92020b Mon Sep 17 00:00:00 2001 From: Petar Jovanovic Date: Mon, 29 Jul 2013 04:06:12 +0200 Subject: 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 Signed-off-by: Aurelien Jarno --- target-mips/dsp_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'target-mips/dsp_helper.c') diff --git a/target-mips/dsp_helper.c b/target-mips/dsp_helper.c index 93f5d9e023..b088a25017 100644 --- a/target-mips/dsp_helper.c +++ b/target-mips/dsp_helper.c @@ -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; -- cgit v1.2.3