From: Geoffrey Blake Date: Mon, 23 May 2011 15:40:21 +0000 (-0500) Subject: O3: Fix offset calculation into storeQueue buffer for store->load forwarding X-Git-Tag: stable_2012_02_02~308 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d0b0a555151232566550c837f9d4d061bf3d4686;p=gem5.git O3: Fix offset calculation into storeQueue buffer for store->load forwarding Calculation of offset to copy from storeQueue[idx].data structure for load to store forwarding fixed to be difference in bytes between store and load virtual addresses. Previous method would induce bug where a load would index into buffer at the wrong location. --- diff --git a/src/cpu/o3/lsq_unit.hh b/src/cpu/o3/lsq_unit.hh index 8e311d275..d83dc868f 100644 --- a/src/cpu/o3/lsq_unit.hh +++ b/src/cpu/o3/lsq_unit.hh @@ -616,7 +616,7 @@ LSQUnit::read(Request *req, Request *sreqLow, Request *sreqHigh, // If the store's data has all of the data needed, we can forward. if ((store_has_lower_limit && store_has_upper_limit)) { // Get shift amount for offset into the store's data. - int shift_amt = req->getVaddr() & (store_size - 1); + int shift_amt = req->getVaddr() - storeQueue[store_idx].inst->effAddr; memcpy(data, storeQueue[store_idx].data + shift_amt, req->getSize());