Giacomo Travaglini has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/64612?usp=email )
Change subject: arch-arm: Fix QDADD/QDSUB implementation
......................................................................
arch-arm: Fix QDADD/QDSUB implementation
This got broken by a recent commit [1] which converted a bitwise
OR into the boolean version. While it conceptually made sense
as the saturateOp returns a boolean value, it is not taking
into consideration that saturateOp modifies the first argument
and the boolean version short-circuits the expression preventing
the second expression from being run if the first one is true
Therefore providing an incorrect midRes value.
[1]: https://gem5-review.googlesource.com/c/public/gem5/+/64172
Change-Id: Ibb9b3d37dcccda006006650ef759cdfe385dcfe2
Signed-off-by: Giacomo Travaglini <[email protected]>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/64612
Tested-by: kokoro <[email protected]>
Reviewed-by: Jason Lowe-Power <[email protected]>
Maintainer: Bobby Bruce <[email protected]>
Reviewed-by: Richard Cooper <[email protected]>
---
M src/arch/arm/isa/insts/data.isa
1 file changed, 32 insertions(+), 4 deletions(-)
Approvals:
Jason Lowe-Power: Looks good to me, approved
Bobby Bruce: Looks good to me, approved
kokoro: Regressions pass
Richard Cooper: Looks good to me, approved
diff --git a/src/arch/arm/isa/insts/data.isa
b/src/arch/arm/isa/insts/data.isa
index 066a2ab..31fc172 100644
--- a/src/arch/arm/isa/insts/data.isa
+++ b/src/arch/arm/isa/insts/data.isa
@@ -342,8 +342,9 @@
''', flagType="none", buildCc=False)
buildRegDataInst("qdadd", '''
int32_t midRes;
- resTemp = saturateOp<32>(midRes, Op2_sw, Op2_sw) ||
- saturateOp<32>(midRes, Op1_sw, midRes);
+ const bool res0 = saturateOp<32>(midRes, Op2_sw, Op2_sw);
+ const bool res1 = saturateOp<32>(midRes, Op1_sw, midRes);
+ resTemp = (res0 || res1) ? 1 : 0;
Dest = midRes;
''', flagType="saturate", buildNonCc=False)
buildRegDataInst("qsub", '''
@@ -377,8 +378,9 @@
''', flagType="none", buildCc=False)
buildRegDataInst("qdsub", '''
int32_t midRes;
- resTemp = saturateOp<32>(midRes, Op2_sw, Op2_sw) ||
- saturateOp<32>(midRes, Op1_sw, midRes, true);
+ const bool res0 = saturateOp<32>(midRes, Op2_sw, Op2_sw);
+ const bool res1 = saturateOp<32>(midRes, Op1_sw, midRes, true);
+ resTemp = (res0 || res1) ? 1 : 0;
Dest = midRes;
''', flagType="saturate", buildNonCc=False)
buildRegDataInst("qasx", '''
--
To view, visit
https://gem5-review.googlesource.com/c/public/gem5/+/64612?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ibb9b3d37dcccda006006650ef759cdfe385dcfe2
Gerrit-Change-Number: 64612
Gerrit-PatchSet: 3
Gerrit-Owner: Giacomo Travaglini <[email protected]>
Gerrit-Reviewer: Andreas Sandberg <[email protected]>
Gerrit-Reviewer: Bobby Bruce <[email protected]>
Gerrit-Reviewer: Giacomo Travaglini <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: Richard Cooper <[email protected]>
Gerrit-Reviewer: kokoro <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]