base: Fix CircularQueue's operator-= when negative subtraction
Using operator-= when the rhs is a negative value is equivalent to using += on -rhs. This is fixing rounding in that scenario. Change-Id: Ia22e51f81a6805d27fd6b2115d288bb23421d00f Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17528 Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
This commit is contained in:
@@ -323,12 +323,12 @@ class CircularQueue : private std::vector<T>
|
||||
assert(_cq);
|
||||
|
||||
/* C does not do euclidean division, so we have to adjust */
|
||||
if (t >= 0)
|
||||
if (t >= 0) {
|
||||
_round += (-t + _idx) / _cq->capacity();
|
||||
else
|
||||
_round += (-t + _idx - _cq->capacity() + 1) / _cq->capacity();
|
||||
|
||||
_idx = _cq->moduloSub(_idx, t);
|
||||
_idx = _cq->moduloSub(_idx, t);
|
||||
} else {
|
||||
*this += -t;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user