Improve codegen for nextLogical

This commit is contained in:
2024-10-16 15:54:05 -07:00
parent e7ed47e288
commit b963d481c9

View File

@@ -1574,10 +1574,21 @@ Node *nextPhysical(Node *node) {
}
Node *nextLogical(Node *node) {
for (node = nextPhysical(node); node != nullptr && !node->entryPresent;
node = nextPhysical(node))
;
return node;
int index = -1;
for (;;) {
auto nextChild = getChildGeq(node, index + 1);
if (nextChild != nullptr) {
for (node = nextChild; !node->entryPresent;
node = getFirstChildExists(node)) {
}
return node;
}
index = node->parentsIndex;
node = node->parent;
if (node == nullptr) {
return nullptr;
}
}
}
// Invalidates `self`, replacing it with a node of at least capacity.