[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v6 11/14] Hexagon (target/hexagon) Change subtract from zero to c
From: |
Taylor Simpson |
Subject: |
[PATCH v6 11/14] Hexagon (target/hexagon) Change subtract from zero to change sign |
Date: |
Mon, 6 Mar 2023 18:58:25 -0800 |
The F2_sffms instruction [r0 -= sfmpy(r1, r2)] doesn't properly
handle -0. Previously we would negate the input operand by subtracting
from zero. Instead, we negate by changing the sign bit.
Test case added to tests/tcg/hexagon/fpstuff.c
Signed-off-by: Taylor Simpson <tsimpson@quicinc.com>
Reviewed-by: Anton Johansson <anjo@rev.ng>
---
target/hexagon/op_helper.c | 2 +-
tests/tcg/hexagon/fpstuff.c | 31 ++++++++++++++++++++++++++++++-
2 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/target/hexagon/op_helper.c b/target/hexagon/op_helper.c
index 38b8aee193..9425941c69 100644
--- a/target/hexagon/op_helper.c
+++ b/target/hexagon/op_helper.c
@@ -1169,7 +1169,7 @@ float32 HELPER(sffms)(CPUHexagonState *env, float32 RxV,
{
float32 neg_RsV;
arch_fpop_start(env);
- neg_RsV = float32_sub(float32_zero, RsV, &env->fp_status);
+ neg_RsV = float32_set_sign(RsV, float32_is_neg(RsV) ? 0 : 1);
RxV = internal_fmafx(neg_RsV, RtV, RxV, 0, &env->fp_status);
arch_fpop_end(env);
return RxV;
diff --git a/tests/tcg/hexagon/fpstuff.c b/tests/tcg/hexagon/fpstuff.c
index 56bf562a40..90ce9a6ef3 100644
--- a/tests/tcg/hexagon/fpstuff.c
+++ b/tests/tcg/hexagon/fpstuff.c
@@ -1,5 +1,5 @@
/*
- * Copyright(c) 2020-2022 Qualcomm Innovation Center, Inc. All Rights
Reserved.
+ * Copyright(c) 2020-2023 Qualcomm Innovation Center, Inc. All Rights
Reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -40,6 +40,7 @@ const int SF_HEX_NAN = 0xffffffff;
const int SF_small_neg = 0xab98fba8;
const int SF_denorm = 0x00000001;
const int SF_random = 0x346001d6;
+const int SF_neg_zero = 0x80000000;
const long long DF_QNaN = 0x7ff8000000000000ULL;
const long long DF_SNaN = 0x7ff7000000000000ULL;
@@ -536,6 +537,33 @@ static void check_sffixupd(void)
check32(result, 0x146001d6);
}
+static void check_sffms(void)
+{
+ int result;
+
+ /* Check that sffms properly deals with -0 */
+ result = SF_neg_zero;
+ asm ("%0 -= sfmpy(%1 , %2)\n\t"
+ : "+r"(result)
+ : "r"(SF_ZERO), "r"(SF_ZERO)
+ : "r12", "r8");
+ check32(result, SF_neg_zero);
+
+ result = SF_ZERO;
+ asm ("%0 -= sfmpy(%1 , %2)\n\t"
+ : "+r"(result)
+ : "r"(SF_neg_zero), "r"(SF_ZERO)
+ : "r12", "r8");
+ check32(result, SF_ZERO);
+
+ result = SF_ZERO;
+ asm ("%0 -= sfmpy(%1 , %2)\n\t"
+ : "+r"(result)
+ : "r"(SF_ZERO), "r"(SF_neg_zero)
+ : "r12", "r8");
+ check32(result, SF_ZERO);
+}
+
static void check_float2int_convs()
{
int res32;
@@ -688,6 +716,7 @@ int main()
check_invsqrta();
check_sffixupn();
check_sffixupd();
+ check_sffms();
check_float2int_convs();
puts(err ? "FAIL" : "PASS");
--
2.25.1
- [PATCH v6 00/14] Hexagon: COF overrides, new generator, test/bug update, Taylor Simpson, 2023/03/06
- [PATCH v6 04/14] Hexagon (target/hexagon) Add overrides for dealloc-return instructions, Taylor Simpson, 2023/03/06
- [PATCH v6 03/14] Hexagon (target/hexagon) Add overrides for endloop1/endloop01, Taylor Simpson, 2023/03/06
- [PATCH v6 01/14] Hexagon (target/hexagon) Add overrides for jumpr31 instructions, Taylor Simpson, 2023/03/06
- [PATCH v6 07/14] Hexagon (target/hexagon) Analyze packet for HVX, Taylor Simpson, 2023/03/06
- [PATCH v6 11/14] Hexagon (target/hexagon) Change subtract from zero to change sign,
Taylor Simpson <=
- [PATCH v6 09/14] Hexagon (tests/tcg/hexagon) Remove __builtin from scatter_gather, Taylor Simpson, 2023/03/06
- [PATCH v6 13/14] Hexagon (target/hexagon) Reduce manipulation of slot_cancelled, Taylor Simpson, 2023/03/06
- [PATCH v6 02/14] Hexagon (target/hexagon) Add overrides for callr, Taylor Simpson, 2023/03/06
- [PATCH v6 05/14] Hexagon (target/hexagon) Analyze packet before generating TCG, Taylor Simpson, 2023/03/06
- [PATCH v6 06/14] Hexagon (target/hexagon) Don't set pkt_has_store_s1 when not needed, Taylor Simpson, 2023/03/06
- [PATCH v6 08/14] Hexagon (tests/tcg/hexagon) Update preg_alias.c, Taylor Simpson, 2023/03/06
- [PATCH v6 12/14] Hexagon (target/hexagon) Remove gen_log_predicated_reg_write[_pair], Taylor Simpson, 2023/03/06
- [PATCH v6 10/14] Hexagon (tests/tcg/hexagon) Enable HVX tests, Taylor Simpson, 2023/03/06
- [PATCH v6 14/14] Hexagon (target/hexagon) Improve code gen for predicated HVX instructions, Taylor Simpson, 2023/03/06