Tweaked rbyd deletes, added MKUNR, simplified upper layers
Just like inserting tags (MKBRANCH, MKREG, etc), the interaction with ids is a bit more intuitive with an implicit +1. To make the internal implementation consistent, this is can be accomplished by combining "rm" and "mk" bits into a so-called MKUNR tag. Describing deletes as "make unreachable" makes a bit of twisted sense, though I won't argue it's a bit of a stretch. Worst case, this is device-side only so it can change easily in the future. We strip the "mk" bits on any tags, so MKUNR turns into a normal UNR on disk. Also continued minor refactoring of lfsr_rbyd_append.
This commit is contained in:
@@ -450,19 +450,25 @@ static inline lfs_size_t lfs_tag_dsize(lfs_tag_t tag) {
|
||||
// 16-bit metadata tags
|
||||
enum lfsr_tag_type {
|
||||
LFSR_TAG_UNR = 0x0002,
|
||||
LFSR_TAG_MKUNR = 0x0006, // in-device only
|
||||
|
||||
LFSR_TAG_NAME = 0x1000,
|
||||
LFSR_TAG_BNAME = 0x1000,
|
||||
LFSR_TAG_MKBNAME = 0x1004, // in-device only
|
||||
LFSR_TAG_REG = 0x1010,
|
||||
LFSR_TAG_MKREG = 0x1014, // in-device only
|
||||
LFSR_TAG_DIR = 0x1020,
|
||||
LFSR_TAG_MKDIR = 0x1024, // in-device only
|
||||
|
||||
LFSR_TAG_STRUCT = 0x3000,
|
||||
LFSR_TAG_INLINED = 0x3000,
|
||||
LFSR_TAG_BLOCK = 0x3100,
|
||||
LFSR_TAG_BRANCH = 0x3200,
|
||||
LFSR_TAG_MKBRANCH = 0x3204, // in-device only
|
||||
LFSR_TAG_BTREE = 0x3300,
|
||||
|
||||
LFSR_TAG_UATTR = 0x4000,
|
||||
LFSR_TAG_MKUATTR = 0x4004, // in-device only
|
||||
LFSR_TAG_RMUATTR = 0x4002,
|
||||
|
||||
LFSR_TAG_ALT = 0x0008,
|
||||
@@ -475,15 +481,9 @@ enum lfsr_tag_type {
|
||||
LFSR_TAG_FCRC = 0x1004,
|
||||
|
||||
// in-device only
|
||||
LFSR_TAG_MKBNAME = 0x1004,
|
||||
LFSR_TAG_MKREG = 0x1014,
|
||||
LFSR_TAG_MKDIR = 0x1024,
|
||||
|
||||
LFSR_TAG_MKUATTR = 0x4004,
|
||||
|
||||
LFSR_TAG_GROW = 0x0006,
|
||||
LFSR_TAG_SHRINK = 0x0016,
|
||||
LFSR_TAG_FROM = 0x0026,
|
||||
LFSR_TAG_GROW = 0xf000,
|
||||
LFSR_TAG_SHRINK = 0xf010,
|
||||
LFSR_TAG_FROM = 0xf020,
|
||||
};
|
||||
|
||||
#define LFSR_TAG_ALT_(color, dir, key) \
|
||||
@@ -1964,21 +1964,14 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
// 0 tags shouldn't be written to disk, use unr if tag is unreachable
|
||||
LFS_ASSERT(tag != 0);
|
||||
|
||||
// we can't do anything if we're not erased
|
||||
if (!rbyd->erased) {
|
||||
return LFS_ERR_RANGE;
|
||||
}
|
||||
|
||||
// ignore noops
|
||||
if (tag == LFSR_TAG_UNR && delta == 0) {
|
||||
if (lfsr_tag_setnomk(tag) == LFSR_TAG_UNR && delta == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// treat weightless mks the same as non-mks, easier to just clear
|
||||
// the bit here than make sure the following logic works out
|
||||
if (lfsr_tag_ismk(tag) && delta <= 0) {
|
||||
LFS_ASSERT(delta >= 0);
|
||||
tag = lfsr_tag_setnomk(tag);
|
||||
// we can't do anything if we're not erased
|
||||
if (!rbyd->erased) {
|
||||
return LFS_ERR_RANGE;
|
||||
}
|
||||
|
||||
// make sure every rbyd starts with its revision count
|
||||
@@ -1993,6 +1986,47 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
}
|
||||
}
|
||||
|
||||
// figure out the range of tags we're operating on
|
||||
lfs_ssize_t id_;
|
||||
lfs_ssize_t other_id_;
|
||||
lfsr_tag_t tag_;
|
||||
lfsr_tag_t other_tag_;
|
||||
if (lfsr_tag_ismk(tag) && delta > 0) {
|
||||
LFS_ASSERT(id <= rbyd->weight);
|
||||
|
||||
// it's a bit ugly, but adjusting the id here makes the following
|
||||
// logic work out more consistently
|
||||
id -= 1;
|
||||
id_ = id + 1;
|
||||
other_id_ = id + 1;
|
||||
tag_ = 0;
|
||||
other_tag_ = 0;
|
||||
} else if (lfsr_tag_ismk(tag) && delta < 0) {
|
||||
LFS_ASSERT(id < rbyd->weight);
|
||||
|
||||
// it's a bit ugly, but adjusting the id here makes the following
|
||||
// logic work out more consistently
|
||||
id += 1;
|
||||
id_ = id - lfs_smax32(-delta, 0);
|
||||
other_id_ = id;
|
||||
tag_ = 0;
|
||||
other_tag_ = 0;
|
||||
} else if (lfsr_tag_isrm(tag)) {
|
||||
LFS_ASSERT(id < rbyd->weight);
|
||||
|
||||
id_ = id - lfs_smax32(-delta, 0);
|
||||
other_id_ = id;
|
||||
tag_ = tag & ~0x2;
|
||||
other_tag_ = (tag & ~0x2) + 0x10;
|
||||
} else {
|
||||
LFS_ASSERT(id < rbyd->weight);
|
||||
|
||||
id_ = id - lfs_smax32(-delta, 0);
|
||||
other_id_ = id;
|
||||
tag_ = tag;
|
||||
other_tag_ = tag;
|
||||
}
|
||||
|
||||
// keep track of bounds as we descend down the tree
|
||||
//
|
||||
// this gets a bit confusing as we also may need to keep
|
||||
@@ -2004,47 +2038,6 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
lfsr_tag_t lower_tag = 0;
|
||||
lfsr_tag_t upper_tag = 0xffff;
|
||||
|
||||
// figure out the range of tags we're operating on and go ahead and
|
||||
// update the rbyd's weight
|
||||
//
|
||||
// note lfsr_rbyd_commit will throw out this copy of the rbyd if an
|
||||
// error occurs
|
||||
lfs_ssize_t id_;
|
||||
lfs_ssize_t other_id_;
|
||||
lfsr_tag_t tag_;
|
||||
lfsr_tag_t other_tag_;
|
||||
if (lfsr_tag_ismk(tag) && delta > 0) {
|
||||
LFS_ASSERT(id < rbyd->weight+delta);
|
||||
LFS_ASSERT(delta >= -(lfs_ssize_t)rbyd->weight);
|
||||
rbyd->weight += delta;
|
||||
|
||||
// it's a bit ugly, but adjusting the id here makes the following
|
||||
// logic work out more consistently
|
||||
id -= delta;
|
||||
id_ = id + 1;
|
||||
other_id_ = id + 1;
|
||||
tag_ = 0;
|
||||
other_tag_ = 0;
|
||||
} else if (lfsr_tag_isrm(tag)) {
|
||||
LFS_ASSERT(id <= rbyd->weight);
|
||||
LFS_ASSERT(delta >= -(lfs_ssize_t)rbyd->weight);
|
||||
rbyd->weight += delta;
|
||||
|
||||
id_ = id - lfs_smax32(-delta, 0);
|
||||
other_id_ = id;
|
||||
tag_ = tag & ~0x2;
|
||||
other_tag_ = (tag & ~0x2) + 0x10;
|
||||
} else {
|
||||
LFS_ASSERT(id < rbyd->weight);
|
||||
LFS_ASSERT(delta >= -(lfs_ssize_t)rbyd->weight);
|
||||
rbyd->weight += delta;
|
||||
|
||||
id_ = id - lfs_smax32(-delta, 0);
|
||||
other_id_ = id;
|
||||
tag_ = tag;
|
||||
other_tag_ = tag;
|
||||
}
|
||||
|
||||
// diverged state in case we are removing a range from the tree
|
||||
//
|
||||
// this is a second copy of the search path state, used to keep track
|
||||
@@ -2066,6 +2059,11 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
lfsr_tag_t other_lower_tag = 0;
|
||||
lfsr_tag_t other_upper_tag = 0;
|
||||
|
||||
// go ahead and update the rbyd's weight, note that lfsr_rbyd_commit
|
||||
// will through out this copy of the rbyd if an error occurs
|
||||
LFS_ASSERT(delta >= -(lfs_ssize_t)rbyd->weight);
|
||||
rbyd->weight += delta;
|
||||
|
||||
// assume we'll update our trunk
|
||||
rbyd->trunk = rbyd->off;
|
||||
|
||||
@@ -2343,7 +2341,7 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
|
||||
} else if (id_ < id-lfs_smax32(-delta, 0)
|
||||
|| (id_ == id-lfs_smax32(-delta, 0)
|
||||
&& (lfsr_tag_ismk(tag)
|
||||
&& ((lfsr_tag_ismk(tag) && delta > 0)
|
||||
|| lfsr_tag_key(tag_) < lfsr_tag_key(tag)))) {
|
||||
if (lfsr_tag_isrm(tag)) {
|
||||
// if removed make our tag unreachable
|
||||
@@ -2357,7 +2355,7 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
|
||||
} else if (id_ > id
|
||||
|| (id_ == id
|
||||
&& (lfsr_tag_ismk(tag)
|
||||
&& ((lfsr_tag_ismk(tag) && delta > 0)
|
||||
|| lfsr_tag_key(tag_) > lfsr_tag_key(tag)))) {
|
||||
if (lfsr_tag_isrm(tag)) {
|
||||
// if removed make our tag unreachable
|
||||
|
||||
+63
-63
@@ -6723,7 +6723,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4,
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, NULL))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 1+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 1, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4;
|
||||
@@ -6743,7 +6743,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4,
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, NULL))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4;
|
||||
@@ -6764,7 +6764,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 2+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 2, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4;
|
||||
@@ -6787,7 +6787,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4;
|
||||
@@ -6810,7 +6810,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 1+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 1, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4;
|
||||
@@ -6853,7 +6853,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(UATTR(1), 1, 0, "\xbb\xbb", 2, NULL))))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 1+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 1, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -6889,7 +6889,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(UATTR(1), 1, 0, "\xbb\xbb", 2, NULL))))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -6927,7 +6927,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSD_ATTR(UATTR(1), 2, 0, "\xcc\xcc", 2, NULL))))))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 2+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 2, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4;
|
||||
@@ -6976,7 +6976,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSD_ATTR(UATTR(1), 2, 0, "\xcc\xcc", 2, NULL))))))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7026,7 +7026,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSD_ATTR(UATTR(1), 2, 0, "\xcc\xcc", 2, NULL))))))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 1+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 1, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7160,7 +7160,7 @@ code = '''
|
||||
lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0;
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, j+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, j, -1, NULL, 0, NULL)) => 0;
|
||||
assert(rbyd.weight == N-1);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block,
|
||||
@@ -7325,7 +7325,7 @@ code = '''
|
||||
lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0;
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, j+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, j, -1, NULL, 0, NULL)) => 0;
|
||||
assert(rbyd.weight == N-1);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block,
|
||||
@@ -7513,7 +7513,7 @@ code = '''
|
||||
lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0;
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, j+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, j, -1, NULL, 0, NULL)) => 0;
|
||||
assert(rbyd.weight == N-1);
|
||||
|
||||
// try traversing over the tags
|
||||
@@ -7648,7 +7648,7 @@ code = '''
|
||||
lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0;
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, j+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, j, -1, NULL, 0, NULL)) => 0;
|
||||
assert(rbyd.weight == N-1);
|
||||
|
||||
// try traversing over the tags
|
||||
@@ -7723,7 +7723,7 @@ code = '''
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4, NULL)) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7741,8 +7741,8 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4,
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, NULL))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL))) => 0;
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL))) => 0;
|
||||
|
||||
assert(rbyd.weight == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7760,8 +7760,8 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4,
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, NULL))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 1+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL))) => 0;
|
||||
LFSD_ATTR(MKUNR, 1, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL))) => 0;
|
||||
|
||||
assert(rbyd.weight == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7780,9 +7780,9 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)))) => 0;
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)))) => 0;
|
||||
|
||||
assert(rbyd.weight == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7801,9 +7801,9 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 2+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 1+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)))) => 0;
|
||||
LFSD_ATTR(MKUNR, 2, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 1, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)))) => 0;
|
||||
|
||||
assert(rbyd.weight == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7840,7 +7840,7 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4,
|
||||
LFSD_ATTR(UATTR(1), 0, 0, "\xaa\xaa", 2, NULL))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
assert(rbyd.weight == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7860,8 +7860,8 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(UATTR(1), 1, 0, "\xbb\xbb", 2, NULL))))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL))) => 0;
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL))) => 0;
|
||||
|
||||
assert(rbyd.weight == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7881,8 +7881,8 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(UATTR(1), 1, 0, "\xbb\xbb", 2, NULL))))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 1+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL))) => 0;
|
||||
LFSD_ATTR(MKUNR, 1, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL))) => 0;
|
||||
|
||||
assert(rbyd.weight == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7904,9 +7904,9 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSD_ATTR(UATTR(1), 2, 0, "\xcc\xcc", 2, NULL))))))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)))) => 0;
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)))) => 0;
|
||||
|
||||
assert(rbyd.weight == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -7928,9 +7928,9 @@ code = '''
|
||||
LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSD_ATTR(UATTR(1), 2, 0, "\xcc\xcc", 2, NULL))))))) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 2+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 1+1, -1, NULL, 0,
|
||||
LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)))) => 0;
|
||||
LFSD_ATTR(MKUNR, 2, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 1, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)))) => 0;
|
||||
|
||||
assert(rbyd.weight == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4)
|
||||
@@ -8035,7 +8035,7 @@ code = '''
|
||||
|
||||
lfs_size_t rbyd_weight_before = rbyd.weight;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, id+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, id, -1, NULL, 0, NULL)) => 0;
|
||||
assert(rbyd.weight == rbyd_weight_before-1);
|
||||
}
|
||||
|
||||
@@ -8187,7 +8187,7 @@ code = '''
|
||||
|
||||
lfs_size_t rbyd_weight_before = rbyd.weight;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, id+1, -1, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, id, -1, NULL, 0, NULL)) => 0;
|
||||
assert(rbyd.weight == rbyd_weight_before-1);
|
||||
}
|
||||
|
||||
@@ -8340,7 +8340,7 @@ code = '''
|
||||
count -= 1;
|
||||
// update our rbyd
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, id+1, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, id, -1, NULL, 0,
|
||||
NULL)) => 0;
|
||||
}
|
||||
}
|
||||
@@ -8431,7 +8431,7 @@ code = '''
|
||||
|
||||
// delete the last two
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, 2+1, -2, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, 2, -2, NULL, 0,
|
||||
NULL)) => 0;
|
||||
|
||||
// create some new ids, if unconditional altgts are used this
|
||||
@@ -8525,7 +8525,7 @@ code = '''
|
||||
|
||||
// make id2 with weight w2
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, 2, +2, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(MKREG, 1, +2, "\xbb\xbb\xbb\xbb", 4,
|
||||
NULL)) => 0;
|
||||
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG_REG, 0,
|
||||
@@ -8557,7 +8557,7 @@ code = '''
|
||||
|
||||
// make id5 with weight w3
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, 5, +3, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSD_ATTR(MKREG, 3, +3, "\xcc\xcc\xcc\xcc", 4,
|
||||
NULL)) => 0;
|
||||
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG_REG, 0,
|
||||
@@ -8601,7 +8601,7 @@ code = '''
|
||||
|
||||
// make id9 with weight w4
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, 9, +4, "\xdd\xdd\xdd\xdd", 4,
|
||||
LFSD_ATTR(MKREG, 6, +4, "\xdd\xdd\xdd\xdd", 4,
|
||||
NULL)) => 0;
|
||||
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG_REG, 0,
|
||||
@@ -8657,7 +8657,7 @@ code = '''
|
||||
|
||||
// make id14 with weight w5
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, 14, +5, "\xee\xee\xee\xee", 4,
|
||||
LFSD_ATTR(MKREG, 10, +5, "\xee\xee\xee\xee", 4,
|
||||
NULL)) => 0;
|
||||
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG_REG, 0,
|
||||
@@ -8752,13 +8752,13 @@ code = '''
|
||||
// make id0 with weight w1
|
||||
LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4,
|
||||
// make id2 with weight w2
|
||||
LFSD_ATTR(MKREG, 2, +2, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSD_ATTR(MKREG, 1, +2, "\xbb\xbb\xbb\xbb", 4,
|
||||
// make id5 with weight w3
|
||||
LFSD_ATTR(MKREG, 5, +3, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSD_ATTR(MKREG, 3, +3, "\xcc\xcc\xcc\xcc", 4,
|
||||
// make id9 with weight w4
|
||||
LFSD_ATTR(MKREG, 9, +4, "\xdd\xdd\xdd\xdd", 4,
|
||||
LFSD_ATTR(MKREG, 6, +4, "\xdd\xdd\xdd\xdd", 4,
|
||||
// make id14 with weight w5
|
||||
LFSD_ATTR(MKREG, 14, +5, "\xee\xee\xee\xee", 4,
|
||||
LFSD_ATTR(MKREG, 10, +5, "\xee\xee\xee\xee", 4,
|
||||
NULL)))))) => 0;
|
||||
|
||||
// traverse, finding tags and weights
|
||||
@@ -8900,7 +8900,7 @@ code = '''
|
||||
}
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4,
|
||||
LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4,
|
||||
NULL)) => 0;
|
||||
}
|
||||
|
||||
@@ -8990,7 +8990,7 @@ code = '''
|
||||
}
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4,
|
||||
LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4,
|
||||
NULL)) => 0;
|
||||
}
|
||||
|
||||
@@ -10256,7 +10256,7 @@ code = '''
|
||||
}
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4,
|
||||
LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4,
|
||||
NULL)) => 0;
|
||||
}
|
||||
assert(rbyd.weight == N*W);
|
||||
@@ -10388,7 +10388,7 @@ code = '''
|
||||
}
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4,
|
||||
LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4,
|
||||
NULL)) => 0;
|
||||
}
|
||||
assert(rbyd.weight == N*W);
|
||||
@@ -10528,7 +10528,7 @@ code = '''
|
||||
}
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKUATTR(2), id*W+W-1, +W, names[perm[j] % 6], 4,
|
||||
LFSD_ATTR(MKUATTR(2), id*W, +W, names[perm[j] % 6], 4,
|
||||
NULL)) => 0;
|
||||
}
|
||||
assert(rbyd.weight == N*W);
|
||||
@@ -10676,7 +10676,7 @@ code = '''
|
||||
}
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4,
|
||||
LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4,
|
||||
NULL)) => 0;
|
||||
}
|
||||
assert(rbyd.weight == N*W);
|
||||
@@ -10807,7 +10807,7 @@ code = '''
|
||||
}
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4,
|
||||
LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4,
|
||||
NULL)) => 0;
|
||||
}
|
||||
assert(rbyd.weight == N*W);
|
||||
@@ -10947,7 +10947,7 @@ code = '''
|
||||
}
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKUATTR(2), id*W+W-1, +W, names[perm[j] % 6], 4,
|
||||
LFSD_ATTR(MKUATTR(2), id*W, +W, names[perm[j] % 6], 4,
|
||||
NULL)) => 0;
|
||||
}
|
||||
assert(rbyd.weight == N*W);
|
||||
@@ -11094,7 +11094,7 @@ code = '''
|
||||
}
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4,
|
||||
LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4,
|
||||
NULL)) => 0;
|
||||
}
|
||||
assert(rbyd.weight == N*W);
|
||||
@@ -11117,7 +11117,7 @@ code = '''
|
||||
lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0;
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, j*W+W-1+1, -W, NULL, 0, NULL)) => 0;
|
||||
LFSD_ATTR(MKUNR, j*W+W-1, -W, NULL, 0, NULL)) => 0;
|
||||
assert(rbyd.weight == (N-1)*W);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block,
|
||||
@@ -11150,7 +11150,7 @@ code = '''
|
||||
// try recreating the id to make sure things still work
|
||||
printf("--- create: %d ---\n", j);
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, j*W+W-1, +W, names[j % 6], 6,
|
||||
LFSD_ATTR(MKREG, j*W, +W, names[j % 6], 6,
|
||||
NULL)) => 0;
|
||||
assert(rbyd.weight == N*W);
|
||||
|
||||
@@ -11254,7 +11254,7 @@ code = '''
|
||||
}
|
||||
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4,
|
||||
LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4,
|
||||
NULL)) => 0;
|
||||
}
|
||||
assert(rbyd.weight == N*W);
|
||||
@@ -11469,7 +11469,7 @@ code = '''
|
||||
count -= 1;
|
||||
// update our rbyd
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, id+1, -1, NULL, 0,
|
||||
LFSD_ATTR(MKUNR, id, -1, NULL, 0,
|
||||
NULL)) => 0;
|
||||
} else if (op == 2) {
|
||||
// update our sim
|
||||
@@ -11664,7 +11664,7 @@ code = '''
|
||||
count += 1;
|
||||
// update our rbyd
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(MKREG, weighted_id+weight-1,
|
||||
LFSD_ATTR(MKREG, weighted_id,
|
||||
+weight, &alpha[i % 26], 1,
|
||||
NULL)) => 0;
|
||||
} else if (op == 1) {
|
||||
@@ -11677,7 +11677,7 @@ code = '''
|
||||
count -= 1;
|
||||
// update our rbyd
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSD_ATTR(UNR, weighted_id+weight_-1+1,
|
||||
LFSD_ATTR(MKUNR, weighted_id+weight_-1,
|
||||
-weight_, NULL, 0,
|
||||
NULL)) => 0;
|
||||
} else if (op == 2) {
|
||||
|
||||
Reference in New Issue
Block a user