diff mbox

target-arm: Fix GE bits for v6media signed modulo arithmetic

Message ID 1299783109-19977-1-git-send-email-peter.maydell@linaro.org
State Accepted
Commit db6e2e65adddfcdc3f81026df7fd490e13813e8a
Headers show

Commit Message

Peter Maydell March 10, 2011, 6:51 p.m. UTC
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>
---
 target-arm/helper.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

Comments

Aurelien Jarno March 22, 2011, 6:54 a.m. UTC | #1
On Thu, Mar 10, 2011 at 06:51:49PM +0000, Peter Maydell wrote:
> 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>
> ---
>  target-arm/helper.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)

Thanks, applied.

> diff --git a/target-arm/helper.c b/target-arm/helper.c
> index d360121..4f2b440 100644
> --- a/target-arm/helper.c
> +++ b/target-arm/helper.c
> @@ -2171,7 +2171,7 @@ static inline uint8_t sub8_usat(uint8_t a, uint8_t b)
>  /* Signed modulo arithmetic.  */
>  #define SARITH16(a, b, n, op) do { \
>      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); \
>      if (sum >= 0) \
>          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 { \
>      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); \
>      if (sum >= 0) \
>          ge |= 1 << n; \
> -- 
> 1.7.1
> 
> 
>
diff mbox

Patch

diff --git a/target-arm/helper.c b/target-arm/helper.c
index d360121..4f2b440 100644
--- a/target-arm/helper.c
+++ b/target-arm/helper.c
@@ -2171,7 +2171,7 @@  static inline uint8_t sub8_usat(uint8_t a, uint8_t b)
 /* Signed modulo arithmetic.  */
 #define SARITH16(a, b, n, op) do { \
     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); \
     if (sum >= 0) \
         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 { \
     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); \
     if (sum >= 0) \
         ge |= 1 << n; \