Simplified lfsr_mtree_t now that we don't need to represent msprouts

We had to be a bit clever with our lfsr_mtree_t representation to
support msprouts. Now that we don't support msprouts, we can simplify
this and drop the lfsr_mtree_t type completely! which is nice for both
code cost and readability.

Saves a bit more code:

           code          stack          ctx
  before: 38344           2624          640
  after:  38284 (-0.2%)   2624 (+0.0%)  640 (+0.0%)

Which increases the total savings of dropping msprouts:

                 code          stack          ctx
  yes msprouts: 38508           2624          640
  no msprouts:  38284 (-0.6%)   2624 (+0.0%)  640 (+0.0%)
This commit is contained in:
Christopher Haster
2025-01-30 03:35:07 -06:00
parent 3f4984d33f
commit 01f2d613bd
4 changed files with 133 additions and 191 deletions
+42 -42
View File
@@ -3400,7 +3400,7 @@ code = '''
// create enough files for mroot to split
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "uloborus%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -3519,7 +3519,7 @@ code = '''
// create enough files for mroot to split
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "uloborus%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -3646,7 +3646,7 @@ code = '''
// create enough files for mroot to split
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "uloborus%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4170,7 +4170,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4180,8 +4180,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4205,8 +4205,8 @@ code = '''
// create enough files for mdir to split again
i = 0;
orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "vulsor%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4345,7 +4345,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4355,8 +4355,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4404,8 +4404,8 @@ code = '''
// create enough files for mdir to split again
i = 0;
orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "vulsor%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4527,7 +4527,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4537,8 +4537,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4591,8 +4591,8 @@ code = '''
// create enough files for mdir to split again
i = 0;
orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "vulsor%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4703,7 +4703,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4713,8 +4713,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4876,7 +4876,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4886,8 +4886,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -5067,7 +5067,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -5077,8 +5077,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -5246,7 +5246,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -5256,8 +5256,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -5946,7 +5946,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "hydroid%03x", i);
lfsr_file_t file;
@@ -5957,8 +5957,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "medusa%03x", i);
lfsr_file_t file;
@@ -6180,7 +6180,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.u.weight == 0x80000000) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "hydroid%03x", i);
lfsr_file_t file;
@@ -6191,8 +6191,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.u.weight;
while (lfs.mtree.u.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "polyp%03x", i);
lfsr_file_t file;
@@ -6461,7 +6461,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert((lfs.mtree.u.weight & 0x7fffffff) <= (2 << lfs.mdir_bits));
assert(lfs.mtree.weight <= (2 << lfs.mdir_bits));
assert(file1.o.o.mdir.rbyd.weight <= 3);
assert(file2.o.o.mdir.rbyd.weight <= 3);
@@ -6762,7 +6762,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert((lfs.mtree.u.weight & 0x7fffffff) <= (2 << lfs.mdir_bits));
assert(lfs.mtree.weight <= (2 << lfs.mdir_bits));
assert(file1.o.o.mdir.rbyd.weight <= 3);
assert(file2.o.o.mdir.rbyd.weight <= 3);
@@ -6920,7 +6920,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert((lfs.mtree.u.weight & 0x7fffffff) <= (2 << lfs.mdir_bits));
assert(lfs.mtree.weight <= (2 << lfs.mdir_bits));
assert(file1.o.o.mdir.rbyd.weight <= 3);
assert(file2.o.o.mdir.rbyd.weight <= 3);
@@ -7089,7 +7089,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert((lfs.mtree.u.weight & 0x7fffffff) <= (2 << lfs.mdir_bits));
assert(lfs.mtree.weight <= (2 << lfs.mdir_bits));
assert(file1.o.o.mdir.rbyd.weight <= 3);
assert(file2.o.o.mdir.rbyd.weight <= 3);
@@ -7256,7 +7256,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert((lfs.mtree.u.weight & 0x7fffffff) <= (2 << lfs.mdir_bits));
assert(lfs.mtree.weight <= (2 << lfs.mdir_bits));
assert(file1.o.o.mdir.rbyd.weight <= 3);
assert(file2.o.o.mdir.rbyd.weight <= 3);
@@ -7421,7 +7421,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert((lfs.mtree.u.weight & 0x7fffffff) <= (2 << lfs.mdir_bits));
assert(lfs.mtree.weight <= (2 << lfs.mdir_bits));
assert(file1.o.o.mdir.rbyd.weight <= 3);
assert(file2.o.o.mdir.rbyd.weight <= 3);