cpu: Fix issue with MinorCPU predicated-false mem. accesses
The code block was relying on passed_predicate only (conditional execution). This was not covering the case where the instruction gets executed, but the predicate register is false. Using the inLSQ variable is covering both cases and it makes more sense in terms of readibility. Change-Id: Ie1954f37968379a5bda9d0dc9f824a68304cc229 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23280 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
committed by
Giacomo Travaglini
parent
bd32682445
commit
68288f344b
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2014,2018 ARM Limited
|
||||
* Copyright (c) 2013-2014,2018-2019 ARM Limited
|
||||
* All rights reserved
|
||||
*
|
||||
* The license below extends only to copyright in the software and shall
|
||||
@@ -498,12 +498,15 @@ Execute::executeMemRefInst(MinorDynInstPtr inst, BranchData &branch,
|
||||
if (inst->traceData)
|
||||
inst->traceData->setPredicate(passed_predicate);
|
||||
|
||||
/* If the instruction didn't pass its predicate (and so will not
|
||||
* progress from here) Try to branch to correct and branch
|
||||
* mis-prediction. */
|
||||
if (!passed_predicate) {
|
||||
/* If the instruction didn't pass its predicate
|
||||
* or it is a predicated vector instruction and the
|
||||
* associated predicate register is all-false (and so will not
|
||||
* progress from here) Try to branch to correct and branch
|
||||
* mis-prediction. */
|
||||
if (!inst->inLSQ) {
|
||||
/* Leave it up to commit to handle the fault */
|
||||
lsq.pushFailedRequest(inst);
|
||||
inst->inLSQ = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user