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