1 /* ffs_tables.c 6.1 83/07/29 */ 2 3 #include "../h/param.h" 4 5 /* 6 * Bit patterns for identifying fragments in the block map 7 * used as ((map & around) == inside) 8 */ 9 int around[9] = { 10 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff, 0x1ff, 0x3ff 11 }; 12 int inside[9] = { 13 0x0, 0x2, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe 14 }; 15 16 /* 17 * Given a block map bit pattern, the frag tables tell whether a 18 * particular size fragment is available. 19 * 20 * used as: 21 * if ((1 << (size - 1)) & fragtbl[fs->fs_frag][map] { 22 * at least one fragment of the indicated size is available 23 * } 24 * 25 * These tables are used by the scanc instruction on the VAX to 26 * quickly find an appropriate fragment. 27 */ 28 u_char fragtbl124[256] = { 29 0x00, 0x16, 0x16, 0x2a, 0x16, 0x16, 0x26, 0x4e, 30 0x16, 0x16, 0x16, 0x3e, 0x2a, 0x3e, 0x4e, 0x8a, 31 0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e, 32 0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e, 33 0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e, 34 0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e, 35 0x2a, 0x3e, 0x3e, 0x2a, 0x3e, 0x3e, 0x2e, 0x6e, 36 0x3e, 0x3e, 0x3e, 0x3e, 0x2a, 0x3e, 0x6e, 0xaa, 37 0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e, 38 0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e, 39 0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e, 40 0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e, 41 0x26, 0x36, 0x36, 0x2e, 0x36, 0x36, 0x26, 0x6e, 42 0x36, 0x36, 0x36, 0x3e, 0x2e, 0x3e, 0x6e, 0xae, 43 0x4e, 0x5e, 0x5e, 0x6e, 0x5e, 0x5e, 0x6e, 0x4e, 44 0x5e, 0x5e, 0x5e, 0x7e, 0x6e, 0x7e, 0x4e, 0xce, 45 0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e, 46 0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e, 47 0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e, 48 0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e, 49 0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e, 50 0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e, 51 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e, 52 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e, 0xbe, 53 0x2a, 0x3e, 0x3e, 0x2a, 0x3e, 0x3e, 0x2e, 0x6e, 54 0x3e, 0x3e, 0x3e, 0x3e, 0x2a, 0x3e, 0x6e, 0xaa, 55 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e, 56 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e, 0xbe, 57 0x4e, 0x5e, 0x5e, 0x6e, 0x5e, 0x5e, 0x6e, 0x4e, 58 0x5e, 0x5e, 0x5e, 0x7e, 0x6e, 0x7e, 0x4e, 0xce, 59 0x8a, 0x9e, 0x9e, 0xaa, 0x9e, 0x9e, 0xae, 0xce, 60 0x9e, 0x9e, 0x9e, 0xbe, 0xaa, 0xbe, 0xce, 0x8a, 61 }; 62 63 u_char fragtbl8[256] = { 64 0x00, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x04, 65 0x01, 0x01, 0x01, 0x03, 0x02, 0x03, 0x04, 0x08, 66 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05, 67 0x02, 0x03, 0x03, 0x02, 0x04, 0x05, 0x08, 0x10, 68 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05, 69 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09, 70 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x06, 71 0x04, 0x05, 0x05, 0x06, 0x08, 0x09, 0x10, 0x20, 72 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05, 73 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09, 74 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05, 75 0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x09, 0x11, 76 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x06, 77 0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x06, 0x0a, 78 0x04, 0x05, 0x05, 0x06, 0x05, 0x05, 0x06, 0x04, 79 0x08, 0x09, 0x09, 0x0a, 0x10, 0x11, 0x20, 0x40, 80 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05, 81 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09, 82 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05, 83 0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x09, 0x11, 84 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05, 85 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09, 86 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 87 0x05, 0x05, 0x05, 0x07, 0x09, 0x09, 0x11, 0x21, 88 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x06, 89 0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x06, 0x0a, 90 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 91 0x02, 0x03, 0x03, 0x02, 0x06, 0x07, 0x0a, 0x12, 92 0x04, 0x05, 0x05, 0x06, 0x05, 0x05, 0x06, 0x04, 93 0x05, 0x05, 0x05, 0x07, 0x06, 0x07, 0x04, 0x0c, 94 0x08, 0x09, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x0c, 95 0x10, 0x11, 0x11, 0x12, 0x20, 0x21, 0x40, 0x80, 96 }; 97 98 /* 99 * The actual fragtbl array. 100 */ 101 u_char *fragtbl[MAXFRAG + 1] = { 102 0, fragtbl124, fragtbl124, 0, fragtbl124, 0, 0, 0, fragtbl8, 103 }; 104