Dropped lfsr_mtree_seek for explicit mtree lookups

lfsr_mtree_seek is a bit of an odd function, a hammer for too many
nails.

Using lfsr_mtree_lookup directly with manual mdir.mid manipulation gives
the internal layers more flexibility and room for optimizations.

Code changes:

           code          stack
  before: 34426           2624
  after:  34406 (-0.1%)   2624 (+0.0%)
This commit is contained in:
Christopher Haster
2024-06-21 10:58:50 -05:00
parent 4a5de70b00
commit ec44831381
2 changed files with 136 additions and 133 deletions
+20 -4
View File
@@ -476,7 +476,11 @@ code = '''
char name[256];
name[0] = '\0';
sprintf(name+1, "%03x", i);
lfsr_mtree_seek(&lfs, &mdir, +1) => 0;
mdir.mid += 1;
if (lfsr_mid_rid(&lfs, mdir.mid) >= (lfsr_srid_t)mdir.rbyd.weight) {
lfsr_mtree_lookup(&lfs, lfsr_mid_bid(&lfs, mdir.mid) + 1,
&mdir) => 0;
}
lfsr_mdir_lookup(&lfs, &mdir, LFSR_TAG_REG, &data) => 0;
lfsr_data_read(&lfs, &data, buffer, sizeof(buffer)) => 4;
assert(memcmp(buffer, name, 4) == 0);
@@ -494,7 +498,11 @@ code = '''
char name[256];
name[0] = '\0';
sprintf(name+1, "%03x", i);
lfsr_mtree_seek(&lfs, &mdir, +1) => 0;
mdir.mid += 1;
if (lfsr_mid_rid(&lfs, mdir.mid) >= (lfsr_srid_t)mdir.rbyd.weight) {
lfsr_mtree_lookup(&lfs, lfsr_mid_bid(&lfs, mdir.mid) + 1,
&mdir) => 0;
}
lfsr_mdir_lookup(&lfs, &mdir, LFSR_TAG_REG, &data) => 0;
lfsr_data_read(&lfs, &data, buffer, sizeof(buffer)) => 4;
assert(memcmp(buffer, name, 4) == 0);
@@ -4089,7 +4097,11 @@ code = '''
char name[256];
name[0] = '\0';
sprintf(name+1, "%03x", i);
lfsr_mtree_seek(&lfs, &mdir, +1) => 0;
mdir.mid += 1;
if (lfsr_mid_rid(&lfs, mdir.mid) >= (lfsr_srid_t)mdir.rbyd.weight) {
lfsr_mtree_lookup(&lfs, lfsr_mid_bid(&lfs, mdir.mid) + 1,
&mdir) => 0;
}
lfsr_mdir_lookup(&lfs, &mdir, LFSR_TAG_REG, &data) => 0;
lfsr_data_read(&lfs, &data, buffer, sizeof(buffer)) => 4;
assert(memcmp(buffer, name, 4) == 0);
@@ -4107,7 +4119,11 @@ code = '''
char name[256];
name[0] = '\0';
sprintf(name+1, "%03x", i);
lfsr_mtree_seek(&lfs, &mdir, +1) => 0;
mdir.mid += 1;
if (lfsr_mid_rid(&lfs, mdir.mid) >= (lfsr_srid_t)mdir.rbyd.weight) {
lfsr_mtree_lookup(&lfs, lfsr_mid_bid(&lfs, mdir.mid) + 1,
&mdir) => 0;
}
lfsr_mdir_lookup(&lfs, &mdir, LFSR_TAG_REG, &data) => 0;
lfsr_data_read(&lfs, &data, buffer, sizeof(buffer)) => 4;
assert(memcmp(buffer, name, 4) == 0);