Some small tweaks

- Moved alt encoding 0x1 => 0x4, which can lead to slightly better
  lookup tables, the perturb bit takes the same place as the color bit,
  which means both can be ignored in readonly operations.

- Dropped lfs_rbyd_fetchmatch, asking each lfs_rbyd_fetch to include NULL
  isn't that bad.

New encoding:

  tags:
  iiii iiiiiii iiiiiTT TTTTTTt ttt0tpv
                   ^--------^------^^^- 16-bit id
                            '------|||- 8-bit type2
                                   '||- 5-bit type1
                                    '|- perturb bit
                                     '- valid bit
  llll lllllll lllllll lllllll lllllll
                                     ^- n-bit length

  alts:
  wwww wwwwwww wwwwwww wwwwwww www1dcv
                                 ^^^-^- 28-bit weight
                                  '|-|- color bit
                                   '-|- direction bit
                                     '- valid bit
  jjjj jjjjjjj jjjjjjj jjjjjjj jjjjjjj
                                     ^- n-bit jump
This commit is contained in:
Christopher Haster
2022-12-21 12:05:17 -06:00
parent 9a0e3fc749
commit 024aaeba56
3 changed files with 45 additions and 47 deletions
+6 -6
View File
@@ -22,14 +22,14 @@ code = '''
lfs_rbyd_t rbyd_ = rbyd;
lfs_bd_erase(&lfs, rbyd_.block) => 0;
lfs_rbyd_commit(&lfs, &rbyd_, NULL) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// commit with one attribute
rbyd_ = rbyd;
lfs_bd_erase(&lfs, rbyd_.block) => 0;
lfs_rbyd_commit(&lfs, &rbyd_,
LFS_MKRATTR(UATTR, 1, 0, &(uint32_t){0xaaaaaaaa}, 4, NULL)) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// commit with two attributes
rbyd_ = rbyd;
@@ -38,7 +38,7 @@ code = '''
LFS_MKRATTR(UATTR, 1, 0, &(uint32_t){0xaaaaaaaa}, 4,
LFS_MKRATTR(UATTR, 2, 0, &(uint32_t){0xbbbbbbbb}, 4,
NULL))) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// // commit with three attributes
// rbyd_ = rbyd;
@@ -74,7 +74,7 @@ code = '''
lfs_rbyd_t rbyd_ = rbyd;
lfs_bd_erase(&lfs, rbyd_.block) => 0;
lfs_rbyd_commit(&lfs, &rbyd_, NULL) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// commit with one attribute
rbyd_ = rbyd;
@@ -82,7 +82,7 @@ code = '''
lfs_rbyd_commit(&lfs, &rbyd_, NULL) => 0;
lfs_rbyd_commit(&lfs, &rbyd_,
LFS_MKRATTR(UATTR, 1, 0, &(uint32_t){0xaaaaaaaa}, 4, NULL)) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// commit with two attributes
rbyd_ = rbyd;
@@ -91,7 +91,7 @@ code = '''
LFS_MKRATTR(UATTR, 1, 0, &(uint32_t){0xaaaaaaaa}, 4, NULL)) => 0;
lfs_rbyd_commit(&lfs, &rbyd_,
LFS_MKRATTR(UATTR, 2, 0, &(uint32_t){0xbbbbbbbb}, 4, NULL)) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// // commit with three attributes
// rbyd_ = rbyd;