2 <MSETG BITS-PER-FIELD 8>
4 <MSETG FIELDS-PER-WORD 4>
6 <MSETG FIELDS-PER-OP <* ,FIELDS-PER-WORD 3>>
10 <MSETG INIT-SHIFT <- <* ,BITS-PER-FIELD ,FIELDS-PER-WORD> ,BITS-PER-FIELD>>
12 <MSETG FIELD-MASK *377*>
14 <DEFINE DEFOP (STR CODE "TUPLE" MODES "AUX" STR-I (WD1 0) (SHFT ,INIT-SHIFT))
15 #DECL ((STR STR-I) STRING (MODES) <TUPLE [REST FIX]> (CODE SHFT WD1) FIX)
16 <MSETG <OR <LOOKUP <SET STR-I <STRING "INST-" .STR>> ,OP-OBLIST>
17 <INSERT .STR-I ,OP-OBLIST>>
19 <PUT ,OP-VECTOR <SET CODE <+ <* .CODE ,WORDS-PER-OP> 1>> <SQUOZE .STR>>
20 <SET WD1 <CHTYPE <LSH <LENGTH .MODES> .SHFT> FIX>>
27 <SET SHFT <- .SHFT ,BITS-PER-FIELD>>>>
30 <SET SHFT <+ ,INIT-SHIFT ,BITS-PER-FIELD>>
31 <PUT ,OP-VECTOR <+ .CODE 1> .WD1>
33 <SET CODE <+ .CODE 1>>)>>
35 <PUT ,OP-VECTOR <+ .CODE 1> .WD1>>
37 <DEFINE GET-INST-INFO (INST) #DECL ((INST) FIX)
38 <REST ,OP-VECTOR <* .INST ,WORDS-PER-OP>>>
40 <DEFINE GET-OP-INFO (FNUM OP-INF "AUX" WD)
41 #DECL ((WD FNUM) FIX (OP-INF) <UVECTOR [4 FIX]>)
42 <COND (<G=? .FNUM <* 2 ,FIELDS-PER-WORD>>
43 <SET FNUM <- .FNUM <* 2 ,FIELDS-PER-WORD> 1>>
45 (<G=? .FNUM ,FIELDS-PER-WORD>
46 <SET FNUM <- .FNUM ,FIELDS-PER-WORD 1>>
50 <SET FNUM <+ .FNUM 1>>)>
51 <CHTYPE <ANDB <LSH .WD
52 <* <- .FNUM ,FIELDS-PER-WORD> ,BITS-PER-FIELD>>
55 <DEFINE ADDRESS-MODES (MODES SIZES "AUX" (MODEN 0) (SIZEN 0))
56 #DECL ((MODES SIZES) STRING (MODEN SIZEN) FIX)
61 <FUNCTION (SIZE "AUX" ST)
62 <MSETG <OR <LOOKUP <SET ST
66 <INSERT .ST ,OP-OBLIST>>
67 <+ <CHTYPE <LSH .MODEN 3> FIX> .SIZEN>>
68 <SET SIZEN <+ .SIZEN 1>>>
70 <SET MODEN <+ .MODEN 1>>>
74 <FUNCTION (A "AUX" ST)
75 <MSETG <OR <LOOKUP <SET ST
78 <INSERT .ST ,OP-OBLIST>>
79 <SET SIZEN <+ .SIZEN 1>>> > .SIZES>>
81 <SETG OP-OBLIST <OBLIST? DEFOP>>
83 <DEFINE INIT-OP-DEFS ()
84 <SETG OP-VECTOR <IUVECTOR <* 256 ,WORDS-PER-OP> 0>>>
86 <GDECL (OP-VECTOR) <UVECTOR [REST FIX]>>
88 <MSETG SQUOZE-MULF <* 40 40 40 40 40>>
90 <DEFINE SQUOZE (STR "AUX" (VAL 0) (COUNT 6) C (TC 0) (MULF ,SQUOZE-MULF))
91 #DECL ((VAL COUNT TC MULF) FIX (C) CHARACTER (STR) STRING)
93 <COND (<OR <EMPTY? .STR> <L? .COUNT 1>> <RETURN .VAL>)>
94 <SET TC <CHTYPE <SET C <1 .STR>> FIX>>
96 <COND (<AND <G=? .TC <ASCII !\0>> <L=? .TC <ASCII !\9>>>
98 (<AND <G=? .TC <ASCII !\A>> <L=? .TC <ASCII !\Z>>>
100 (<AND <G=? .TC <ASCII !\a>> <L=? .TC <ASCII !\z>>>
102 (<==? .C !\.> <SET TC 37>)
103 (<==? .C !\$> <SET TC 38>)
104 (<==? .C !\%> <SET TC 39>)
106 <SET COUNT <- .COUNT 1>>
107 <SET VAL <+ .VAL <* .TC .MULF>>>
108 <SET MULF </ .MULF 40>>>>
110 <MSETG SQUOZE-DIVF <* 40 40 40 40 40>>
112 <DEFINE PRINT-SQUOZE (NUM
113 "OPTIONAL" (OUTCHAN .OUTCHAN)
114 "AUX" (DIVF ,SQUOZE-DIVF))
115 #DECL ((NUM) FIX (OUTCHAN) <SPECIAL CHANNEL>)
117 <SET VAL <MOD </ .NUM .DIVF> 40>>
118 <COND (<AND <L? .NUM 0> <G? .VAL 0>>
120 <SET NUM <- .NUM <* .VAL .DIVF>>>)>
121 <COND (<0? .VAL> <RETURN>)
122 (<AND <G? .VAL 10> <L? .VAL 37>>
123 <PRINC <CHTYPE <+ .VAL 54> CHARACTER>>)
124 (<L=? .VAL 10> <PRINC <CHTYPE <+ .VAL 47> CHARACTER>>)
125 (<==? .VAL 37> <PRINC !\.>)
126 (<==? .VAL 38> <PRINC !\$>)
127 (<==? .VAL 39> <PRINC !\%>)>
128 <COND (<1? .DIVF> <RETURN>)>
129 <SET DIVF </ .DIVF 40>>>>