Implicitly set the rm-bit in generic grow tags

Our rbyds support changing the weight of a tag without knowing the
actual tag. This is useful for btrees, which always make weight changes
without knowing if the leading tag is a name or a branch (it depends on
the type of btree).

But to make this work, it needs the rm-bit to be set. This is because
internally the rm-bit indicates we don't want to write-out a tag. Which
we don't for grow tags, because, well, they're not real tags.

Previously this was done by putting LFSR_TAG_GROW(RM) everywhere a
generic grow as needed, but since this is so common we might as well
just set the rm-bit in LFSR_TAG_GROW.

Note that LFSR_TAG_GROW(tag) (the macro) does not set the rm-bit.

This makes the code a bit more readable at the risk of an unintuitive
relationship between LFSR_TAG_GROW and LFSR_TAG_GROW(tag).
This commit is contained in:
Christopher Haster
2023-08-18 13:33:04 -05:00
parent 6088180076
commit bacd09a673
3 changed files with 12 additions and 11 deletions
+3 -3
View File
@@ -10542,7 +10542,7 @@ code = '''
lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0;
lfsr_rbyd_commit(&lfs, &rbyd, LFSR_ATTRS(
LFSR_ATTR(j*W+W-1, GROW(RM), -D, NULL))) => 0;
LFSR_ATTR(j*W+W-1, GROW, -D, NULL))) => 0;
assert(rbyd.weight == N*W-D);
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, CFG->block_size) => 0;
@@ -11460,7 +11460,7 @@ code = '''
sim_weights[rid] += weight;
// update our rbyd
lfsr_rbyd_commit(&lfs, &rbyd, LFSR_ATTRS(
LFSR_ATTR(weighted_rid+weight_-1, GROW(RM), +weight,
LFSR_ATTR(weighted_rid+weight_-1, GROW, +weight,
NULL))) => 0;
} else if (op == 3) {
// get the correct weight from the sim
@@ -11472,7 +11472,7 @@ code = '''
sim_weights[rid] -= weight;
// update our rbyd
lfsr_rbyd_commit(&lfs, &rbyd, LFSR_ATTRS(
LFSR_ATTR(weighted_rid+weight_-1, GROW(RM), -weight,
LFSR_ATTR(weighted_rid+weight_-1, GROW, -weight,
NULL))) => 0;
}
}