mirror of https://github.com/YosysHQ/yosys.git
Merge pull request #1982 from AsuMagic/asu/cxxrtl-memory-queue-opt
cxxrtl: keep the memory write queue sorted on insertion.
This commit is contained in:
commit
cf14e186eb
|
@ -641,13 +641,15 @@ struct memory {
|
||||||
|
|
||||||
void update(size_t index, const value<Width> &val, const value<Width> &mask, int priority = 0) {
|
void update(size_t index, const value<Width> &val, const value<Width> &mask, int priority = 0) {
|
||||||
assert(index < data.size());
|
assert(index < data.size());
|
||||||
write_queue.emplace_back(write { index, val, mask, priority });
|
// Queue up the write while keeping the queue sorted by priority.
|
||||||
|
write_queue.insert(
|
||||||
|
std::upper_bound(write_queue.begin(), write_queue.end(), priority,
|
||||||
|
[](const int a, const write& b) { return a < b.priority; }),
|
||||||
|
write { index, val, mask, priority });
|
||||||
}
|
}
|
||||||
|
|
||||||
bool commit() {
|
bool commit() {
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
std::sort(write_queue.begin(), write_queue.end(),
|
|
||||||
[](const write &a, const write &b) { return a.priority < b.priority; });
|
|
||||||
for (const write &entry : write_queue) {
|
for (const write &entry : write_queue) {
|
||||||
value<Width> elem = data[entry.index];
|
value<Width> elem = data[entry.index];
|
||||||
elem = elem.update(entry.val, entry.mask);
|
elem = elem.update(entry.val, entry.mask);
|
||||||
|
|
Loading…
Reference in New Issue