2c2
< * Copyright (c) 2012-2014 ARM Limited
---
> * Copyright (c) 2012-2014,2017 ARM Limited
653c653,658
< if (store_size == 0)
---
> if (!store_size || storeQueue[store_idx].inst->strictlyOrdered() ||
> (storeQueue[store_idx].req &&
> storeQueue[store_idx].req->isCacheMaintenance())) {
> // Cache maintenance instructions go down via the store
> // path but they carry no data and they shouldn't be
> // considered for forwarding
655,656c660
< else if (storeQueue[store_idx].inst->strictlyOrdered())
< continue;
---
> }
897,899c901,903
< storeQueue[store_idx].isAllZeros = req->getFlags() & Request::CACHE_BLOCK_ZERO;
< assert(size <= sizeof(storeQueue[store_idx].data) ||
< (req->getFlags() & Request::CACHE_BLOCK_ZERO));
---
> bool store_no_data = req->getFlags() & Request::STORE_NO_DATA;
> storeQueue[store_idx].isAllZeros = store_no_data;
> assert(size <= sizeof(storeQueue[store_idx].data) || store_no_data);
907c911,912
< if (!(req->getFlags() & Request::CACHE_BLOCK_ZERO))
---
> if (!(req->getFlags() & Request::CACHE_BLOCK_ZERO) && \
> !req->isCacheMaintenance())