mirror of
https://github.com/xemu-project/xemu.git
synced 2025-02-02 10:12:03 +00:00
target-arm: Fix GE bits for v6media signed modulo arithmetic
Fix the signed modulo arithmetic helpers for the v6media instructions (SADD8, SSUB8, SADD16, SSUB16, SASX, SSAX) to set the GE bits correctly (based on the result of the add or subtract before it is truncated to 16 bits, not after). Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
2a0308c54f
commit
db6e2e65ad
@ -2171,7 +2171,7 @@ static inline uint8_t sub8_usat(uint8_t a, uint8_t b)
|
|||||||
/* Signed modulo arithmetic. */
|
/* Signed modulo arithmetic. */
|
||||||
#define SARITH16(a, b, n, op) do { \
|
#define SARITH16(a, b, n, op) do { \
|
||||||
int32_t sum; \
|
int32_t sum; \
|
||||||
sum = (int16_t)((uint16_t)(a) op (uint16_t)(b)); \
|
sum = (int32_t)(int16_t)(a) op (int32_t)(int16_t)(b); \
|
||||||
RESULT(sum, n, 16); \
|
RESULT(sum, n, 16); \
|
||||||
if (sum >= 0) \
|
if (sum >= 0) \
|
||||||
ge |= 3 << (n * 2); \
|
ge |= 3 << (n * 2); \
|
||||||
@ -2179,7 +2179,7 @@ static inline uint8_t sub8_usat(uint8_t a, uint8_t b)
|
|||||||
|
|
||||||
#define SARITH8(a, b, n, op) do { \
|
#define SARITH8(a, b, n, op) do { \
|
||||||
int32_t sum; \
|
int32_t sum; \
|
||||||
sum = (int8_t)((uint8_t)(a) op (uint8_t)(b)); \
|
sum = (int32_t)(int8_t)(a) op (int32_t)(int8_t)(b); \
|
||||||
RESULT(sum, n, 8); \
|
RESULT(sum, n, 8); \
|
||||||
if (sum >= 0) \
|
if (sum >= 0) \
|
||||||
ge |= 1 << n; \
|
ge |= 1 << n; \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user