Pristine Ack-5.5
[Ack-5.5.git] / mach / ns / as / mach3.c
1 /*
2  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3  * See the copyright notice in the ACK home directory, in the file "Copyright".
4  */
5 #define RCSID3 "$Id: mach3.c,v 0.3 1994/06/24 13:09:52 ceriel Exp $"
6
7 /*
8  * NS 16032 keywords
9  */
10
11 /* Registers */
12 0,      REG,            0,              "r0",
13 0,      REG,            1,              "r1",
14 0,      REG,            2,              "r2",
15 0,      REG,            3,              "r3",
16 0,      REG,            4,              "r4",
17 0,      REG,            5,              "r5",
18 0,      REG,            6,              "r6",
19 0,      REG,            7,              "r7",
20 0,      FREG,           0,              "f0",
21 0,      FREG,           1,              "f1",
22 0,      FREG,           2,              "f2",
23 0,      FREG,           3,              "f3",
24 0,      FREG,           4,              "f4",
25 0,      FREG,           5,              "f5",
26 0,      FREG,           6,              "f6",
27 0,      FREG,           7,              "f7",
28 /* CPU dedicated registers */
29 0,      AREG,           0x0,            "us",
30 0,      AREG,           0x8,            "fp",
31 0,      AREG,           0x9,            "sp",
32 0,      AREG,           0xA,            "sb",
33 0,      AREG,           0xD,            "psr",
34 0,      AREG,           0xE,            "intbase",
35 0,      AREG,           0xF,            "mod",
36 /* Tokens dedicated to addressing modes */
37 0,      TOS,            0x17,           "tos",
38 0,      EXTERNAL,       0x16,           "external",
39 0,      PC,             0,              "pc",
40 0,      INDICATOR,      'b',            "b",
41 0,      INDICATOR,      'c',            "c",
42 0,      INDICATOR,      'd',            "d",
43 0,      INDICATOR,      'f',            "f",
44 0,      INDICATOR,      'i',            "i",
45 0,      INDICATOR,      'm',            "m",
46 0,      INDICATOR,      'q',            "q",
47 0,      INDICATOR,      'u',            "u",
48 0,      INDICATOR,      'w',            "w",
49 /* Memory management registers */
50 0,      MREG,           0x0,            "bpr0",
51 0,      MREG,           0x1,            "bpr1",
52 0,      MREG,           0x4,            "pf0",
53 0,      MREG,           0x5,            "pf1",
54 0,      MREG,           0x8,            "sc",
55 0,      MREG,           0xA,            "msr",
56 0,      MREG,           0xB,            "bcnt",
57 0,      MREG,           0xC,            "ptb0",
58 0,      MREG,           0xD,            "ptb1",
59 0,      MREG,           0xF,            "eia",
60 /* Instruction types */
61 /* Integer instructions */
62 0,      ADD_I,  mk_op2(0x5,I_BYTE,I_BYTE),      "movb",
63 0,      ADD_I,  mk_op2(0x5,I_WORD,I_WORD),      "movw",
64 0,      ADD_I,  mk_op2(0x5,I_DOUBLE,I_DOUBLE),  "movd",
65 0,      ADD_I,  mk_op2(0x1,I_BYTE,I_BYTE),      "cmpb",
66 0,      ADD_I,  mk_op2(0x1,I_WORD,I_WORD),      "cmpw",
67 0,      ADD_I,  mk_op2(0x1,I_DOUBLE,I_DOUBLE),  "cmpd",
68 0,      ADD_I,  mk_op2(0x0,I_BYTE,I_BYTE),      "addb",
69 0,      ADD_I,  mk_op2(0x0,I_WORD,I_WORD),      "addw",
70 0,      ADD_I,  mk_op2(0x0,I_DOUBLE,I_DOUBLE),  "addd",
71 0,      ADD_I,  mk_op2(0x4,I_BYTE,I_BYTE),      "addcb",
72 0,      ADD_I,  mk_op2(0x4,I_WORD,I_WORD),      "addcw",
73 0,      ADD_I,  mk_op2(0x4,I_DOUBLE,I_DOUBLE),  "addcd",
74 0,      ADD_I,  mk_op2(0x8,I_BYTE,I_BYTE),      "subb",
75 0,      ADD_I,  mk_op2(0x8,I_WORD,I_WORD),      "subw",
76 0,      ADD_I,  mk_op2(0x8,I_DOUBLE,I_DOUBLE),  "subd",
77 0,      ADD_I,  mk_op2(0xC,I_BYTE,I_BYTE),      "subcb",
78 0,      ADD_I,  mk_op2(0xC,I_WORD,I_WORD),      "subcw",
79 0,      ADD_I,  mk_op2(0xC,I_DOUBLE,I_DOUBLE),  "subcd",
80 0,      COM,    mk_op2(0x8,I_BYTE,I_BYTE),      "negb",
81 0,      COM,    mk_op2(0x8,I_WORD,I_WORD),      "negw",
82 0,      COM,    mk_op2(0x8,I_DOUBLE,I_DOUBLE),  "negd",
83 0,      COM,    mk_op2(0xC,I_BYTE,I_BYTE),      "absb",
84 0,      COM,    mk_op2(0xC,I_WORD,I_WORD),      "absw",
85 0,      COM,    mk_op2(0xC,I_DOUBLE,I_DOUBLE),  "absd",
86 0,      MUL_I,  mk_op2(0x8,I_BYTE,I_BYTE),      "mulb",
87 0,      MUL_I,  mk_op2(0x8,I_WORD,I_WORD),      "mulw",
88 0,      MUL_I,  mk_op2(0x8,I_DOUBLE,I_DOUBLE),  "muld",
89 0,      MUL_I,  mk_op2(0xF,I_BYTE,I_BYTE),      "divb",
90 0,      MUL_I,  mk_op2(0xF,I_WORD,I_WORD),      "divw",
91 0,      MUL_I,  mk_op2(0xF,I_DOUBLE,I_DOUBLE),  "divd",
92 0,      MUL_I,  mk_op2(0xE,I_BYTE,I_BYTE),      "modb",
93 0,      MUL_I,  mk_op2(0xE,I_WORD,I_WORD),      "modw",
94 0,      MUL_I,  mk_op2(0xE,I_DOUBLE,I_DOUBLE),  "modd",
95 0,      MUL_I,  mk_op2(0xC,I_BYTE,I_BYTE),      "quob",
96 0,      MUL_I,  mk_op2(0xC,I_WORD,I_WORD),      "quow",
97 0,      MUL_I,  mk_op2(0xC,I_DOUBLE,I_DOUBLE),  "quod",
98 0,      MUL_I,  mk_op2(0xD,I_BYTE,I_BYTE),      "remb",
99 0,      MUL_I,  mk_op2(0xD,I_WORD,I_WORD),      "remw",
100 0,      MUL_I,  mk_op2(0xD,I_DOUBLE,I_DOUBLE),  "remd",
101 0,      ADD_I,  mk_op2(0xA,I_BYTE,I_BYTE),      "andb",
102 0,      ADD_I,  mk_op2(0xA,I_WORD,I_WORD),      "andw",
103 0,      ADD_I,  mk_op2(0xA,I_DOUBLE,I_DOUBLE),  "andd",
104 0,      ADD_I,  mk_op2(0x6,I_BYTE,I_BYTE),      "orb",
105 0,      ADD_I,  mk_op2(0x6,I_WORD,I_WORD),      "orw",
106 0,      ADD_I,  mk_op2(0x6,I_DOUBLE,I_DOUBLE),  "ord",
107 0,      ADD_I,  mk_op2(0x2,I_BYTE,I_BYTE),      "bicb",
108 0,      ADD_I,  mk_op2(0x2,I_WORD,I_WORD),      "bicw",
109 0,      ADD_I,  mk_op2(0x2,I_DOUBLE,I_DOUBLE),  "bicd",
110 0,      ADD_I,  mk_op2(0xE,I_BYTE,I_BYTE),      "xorb",
111 0,      ADD_I,  mk_op2(0xE,I_WORD,I_WORD),      "xorw",
112 0,      ADD_I,  mk_op2(0xE,I_DOUBLE,I_DOUBLE),  "xord",
113 0,      COM,    mk_op2(0xD,I_BYTE,I_BYTE),      "comb",
114 0,      COM,    mk_op2(0xD,I_WORD,I_WORD),      "comw",
115 0,      COM,    mk_op2(0xD,I_DOUBLE,I_DOUBLE),  "comd",
116 0,      COM,    mk_op2(0x1,I_BYTE,I_BYTE),      "ashb",
117 0,      COM,    mk_op2(0x1,I_BYTE,I_WORD),      "ashw",
118 0,      COM,    mk_op2(0x1,I_BYTE,I_DOUBLE),    "ashd",
119 0,      COM,    mk_op2(0x5,I_BYTE,I_BYTE),      "lshb",
120 0,      COM,    mk_op2(0x5,I_BYTE,I_WORD),      "lshw",
121 0,      COM,    mk_op2(0x5,I_BYTE,I_DOUBLE),    "lshd",
122 0,      COM,    mk_op2(0x0,I_BYTE,I_BYTE),      "rotb",
123 0,      COM,    mk_op2(0x0,I_BYTE,I_WORD),      "rotw",
124 0,      COM,    mk_op2(0x0,I_BYTE,I_DOUBLE),    "rotd",
125 0,      MOVID,  mk_op2(0x4,I_BYTE,I_WORD),      "movxbw",
126 0,      MOVID,  mk_op2(0x7,I_BYTE,I_DOUBLE),    "movxbd",
127 0,      MOVID,  mk_op2(0x7,I_WORD,I_DOUBLE),    "movxwd",
128 0,      MOVID,  mk_op2(0x5,I_BYTE,I_WORD),      "movzbw",
129 0,      MOVID,  mk_op2(0x6,I_BYTE,I_DOUBLE),    "movzbd",
130 0,      MOVID,  mk_op2(0x6,I_WORD,I_DOUBLE),    "movzwd",
131 #ifdef UNUSED
132 0,      MOVID,  mk_op2(0x7,I_DOUBLE,I_DOUBLE),  "movxdd",
133 0,      MOVID,  mk_op2(0x6,I_DOUBLE,I_DOUBLE),  "movzdd",
134 #endif
135 0,      ADD_I,  mk_op2(0x9,I_DOUBLE,I_DOUBLE),  "addr",
136 /* Quick integer instructions */
137 0,      MOVQ,   mk_op1(0x5,I_BYTE),     "movqb",
138 0,      MOVQ,   mk_op1(0x5,I_WORD),     "movqw",
139 0,      MOVQ,   mk_op1(0x5,I_DOUBLE),   "movqd",
140 0,      MOVQ,   mk_op1(0x1,I_BYTE),     "cmpqb",
141 0,      MOVQ,   mk_op1(0x1,I_WORD),     "cmpqw",
142 0,      MOVQ,   mk_op1(0x1,I_DOUBLE),   "cmpqd",
143 0,      MOVQ,   mk_op1(0x0,I_BYTE),     "addqb",
144 0,      MOVQ,   mk_op1(0x0,I_WORD),     "addqw",
145 0,      MOVQ,   mk_op1(0x0,I_DOUBLE),   "addqd",
146 /* Extended integer instructions */
147 0,      MUL_I,  mk_op2(0x9,I_BYTE,I_BYTE),      "meib",
148 0,      MUL_I,  mk_op2(0x9,I_WORD,I_WORD),      "meiw",
149 0,      MUL_I,  mk_op2(0x9,I_DOUBLE,I_DOUBLE),  "meid",
150 0,      MUL_I,  mk_op2(0xB,I_BYTE,I_BYTE),      "deib",
151 0,      MUL_I,  mk_op2(0xB,I_WORD,I_WORD),      "deiw",
152 0,      MUL_I,  mk_op2(0xB,I_DOUBLE,I_DOUBLE),  "deid",
153 /* Boolean instructions */
154 0,      COM,    mk_op2(0x9,I_BYTE,I_BYTE),      "notb",
155 0,      COM,    mk_op2(0x9,I_WORD,I_WORD),      "notw",
156 0,      COM,    mk_op2(0x9,I_DOUBLE,I_DOUBLE),  "notd",
157 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_EQ),       "seqb",
158 0,      SEQ,    mk_op1c(0x3,I_WORD,B_EQ),       "seqw",
159 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_EQ),     "seqd",
160 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_NE),       "sneb",
161 0,      SEQ,    mk_op1c(0x3,I_WORD,B_NE),       "snew",
162 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_NE),     "sned",
163 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_CS),       "scsb",
164 0,      SEQ,    mk_op1c(0x3,I_WORD,B_CS),       "scsw",
165 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_CS),     "scsd",
166 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_CC),       "sccb",
167 0,      SEQ,    mk_op1c(0x3,I_WORD,B_CC),       "sccw",
168 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_CC),     "sccd",
169 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_HI),       "shib",
170 0,      SEQ,    mk_op1c(0x3,I_WORD,B_HI),       "shiw",
171 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_HI),     "shid",
172 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_LS),       "slsb",
173 0,      SEQ,    mk_op1c(0x3,I_WORD,B_LS),       "slsw",
174 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_LS),     "slsd",
175 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_GT),       "sgtb",
176 0,      SEQ,    mk_op1c(0x3,I_WORD,B_GT),       "sgtw",
177 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_GT),     "sgtd",
178 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_LE),       "sleb",
179 0,      SEQ,    mk_op1c(0x3,I_WORD,B_LE),       "slew",
180 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_LE),     "sled",
181 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_FS),       "sfsb",
182 0,      SEQ,    mk_op1c(0x3,I_WORD,B_FS),       "sfsw",
183 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_FS),     "sfsd",
184 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_FC),       "sfcb",
185 0,      SEQ,    mk_op1c(0x3,I_WORD,B_FC),       "sfcw",
186 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_FC),     "sfcd",
187 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_LO),       "slob",
188 0,      SEQ,    mk_op1c(0x3,I_WORD,B_LO),       "slow",
189 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_LO),     "slod",
190 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_HS),       "shsb",
191 0,      SEQ,    mk_op1c(0x3,I_WORD,B_HS),       "shsw",
192 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_HS),     "shsd",
193 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_LT),       "sltb",
194 0,      SEQ,    mk_op1c(0x3,I_WORD,B_LT),       "sltw",
195 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_LT),     "sltd",
196 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_GE),       "sgeb",
197 0,      SEQ,    mk_op1c(0x3,I_WORD,B_GE),       "sgew",
198 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_GE),     "sged",
199 #ifdef UNUSED
200 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_TRUE),     "strueb",
201 0,      SEQ,    mk_op1c(0x3,I_WORD,B_TRUE),     "struew",
202 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_TRUE),   "strued",
203 0,      SEQ,    mk_op1c(0x3,I_BYTE,B_FALSE),    "sfalseb",
204 0,      SEQ,    mk_op1c(0x3,I_WORD,B_FALSE),    "sfalsew",
205 0,      SEQ,    mk_op1c(0x3,I_DOUBLE,B_FALSE),  "sfalsed",
206 #endif
207 /* Bit instructions */
208 0,      ADD_I,  mk_op2(0xD,I_BYTE,I_BYTE),      "tbitb",
209 0,      ADD_I,  mk_op2(0xD,I_WORD,I_WORD),      "tbitw",
210 0,      ADD_I,  mk_op2(0xD,I_DOUBLE,I_DOUBLE),  "tbitd",
211 0,      COM,    mk_op2(0x6,I_BYTE,I_BYTE),      "sbitb",
212 0,      COM,    mk_op2(0x6,I_WORD,I_WORD),      "sbitw",
213 0,      COM,    mk_op2(0x6,I_DOUBLE,I_DOUBLE),  "sbitd",
214 0,      COM,    mk_op2(0x7,I_BYTE,I_BYTE),      "sbitib",
215 0,      COM,    mk_op2(0x7,I_WORD,I_WORD),      "sbitiw",
216 0,      COM,    mk_op2(0x7,I_DOUBLE,I_DOUBLE),  "sbitid",
217 0,      COM,    mk_op2(0x2,I_BYTE,I_BYTE),      "cbitb",
218 0,      COM,    mk_op2(0x2,I_WORD,I_WORD),      "cbitw",
219 0,      COM,    mk_op2(0x2,I_DOUBLE,I_DOUBLE),  "cbitd",
220 0,      COM,    mk_op2(0x3,I_BYTE,I_BYTE),      "cbitib",
221 0,      COM,    mk_op2(0x3,I_WORD,I_WORD),      "cbitiw",
222 0,      COM,    mk_op2(0x3,I_DOUBLE,I_DOUBLE),  "cbitid",
223 0,      COM,    mk_op2(0xE,I_BYTE,I_BYTE),      "ibitb",
224 0,      COM,    mk_op2(0xE,I_WORD,I_WORD),      "ibitw",
225 0,      COM,    mk_op2(0xE,I_DOUBLE,I_DOUBLE),  "ibitd",
226 0,      CHECK,  mk_op1(0x1,I_DOUBLE),           "cvtp",
227 0,      FFS,    mk_op2c(0x5,I_BYTE,I_BYTE,0),   "ffsb",
228 0,      FFS,    mk_op2c(0x5,I_WORD,I_BYTE,0),   "ffsw",
229 0,      FFS,    mk_op2c(0x5,I_DOUBLE,I_BYTE,0), "ffsd",
230 /* Field instructions */
231 0,      INS,    mk_op2(0x0,I_BYTE,I_BYTE),      "extb",
232 0,      INS,    mk_op2(0x0,I_WORD,I_WORD),      "extw",
233 0,      INS,    mk_op2(0x0,I_DOUBLE,I_DOUBLE),  "extd",
234 0,      INSS,   mk_op2(0x3,I_BYTE,I_BYTE),      "extsb",
235 0,      INSS,   mk_op2(0x3,I_WORD,I_WORD),      "extsw",
236 0,      INSS,   mk_op2(0x3,I_DOUBLE,I_DOUBLE),  "extsd",
237 0,      INS,    mk_op2(0x2,I_BYTE,I_BYTE),      "insb",
238 0,      INS,    mk_op2(0x2,I_WORD,I_WORD),      "insw",
239 0,      INS,    mk_op2(0x2,I_DOUBLE,I_DOUBLE),  "insd",
240 0,      INSS,   mk_op2(0x2,I_BYTE,I_BYTE),      "inssb",
241 0,      INSS,   mk_op2(0x2,I_WORD,I_WORD),      "inssw",
242 0,      INSS,   mk_op2(0x2,I_DOUBLE,I_DOUBLE),  "inssd",
243 /* String instructions */
244 0,      MOVS,   mk_op1c(0x0,I_BYTE,0),          "movsb",
245 0,      MOVS,   mk_op1c(0x0,I_WORD,0),          "movsw",
246 0,      MOVS,   mk_op1c(0x0,I_DOUBLE,0),        "movsd",
247 0,      MOVS,   mk_op1c(0x0,I_BYTE,SO_TRANS),   "movst",
248 0,      MOVS,   mk_op1c(0x1,I_BYTE,0),          "cmpsb",
249 0,      MOVS,   mk_op1c(0x1,I_WORD,0),          "cmpsw",
250 0,      MOVS,   mk_op1c(0x1,I_DOUBLE,0),        "cmpsd",
251 0,      MOVS,   mk_op1c(0x1,I_BYTE,SO_TRANS),   "cmpst",
252 0,      MOVS,   mk_op1c(0x3,I_BYTE,0),          "skpsb",
253 0,      MOVS,   mk_op1c(0x3,I_WORD,0),          "skpsw",
254 0,      MOVS,   mk_op1c(0x3,I_DOUBLE,0),        "skpsd",
255 0,      MOVS,   mk_op1c(0x3,I_BYTE,SO_TRANS),   "skpst",
256 /* Block instructions */
257 0,      MOVM,   mk_op2(0x0,I_BYTE,I_BYTE),      "movmb",
258 0,      MOVM,   mk_op2(0x0,I_WORD,I_WORD),      "movmw",
259 0,      MOVM,   mk_op2(0x0,I_DOUBLE,I_DOUBLE),  "movmd",
260 0,      MOVM,   mk_op2(0x1,I_BYTE,I_BYTE),      "cmpmb",
261 0,      MOVM,   mk_op2(0x1,I_WORD,I_WORD),      "cmpmw",
262 0,      MOVM,   mk_op2(0x1,I_DOUBLE,I_DOUBLE),  "cmpmd",
263 /* Packed decimal instructions */
264 0,      COM,    mk_op2(0xF,I_BYTE,I_BYTE),      "addpb",
265 0,      COM,    mk_op2(0xF,I_WORD,I_WORD),      "addpw",
266 0,      COM,    mk_op2(0xF,I_DOUBLE,I_DOUBLE),  "addpd",
267 0,      COM,    mk_op2(0xB,I_BYTE,I_BYTE),      "subpb",
268 0,      COM,    mk_op2(0xB,I_WORD,I_WORD),      "subpw",
269 0,      COM,    mk_op2(0xB,I_DOUBLE,I_DOUBLE),  "subpd",
270 /* Array instructions */
271 0,      CHECK,  mk_op2(0x4,I_BYTE,I_BYTE),      "indexb",
272 0,      CHECK,  mk_op2(0x4,I_WORD,I_WORD),      "indexw",
273 0,      CHECK,  mk_op2(0x4,I_DOUBLE,I_DOUBLE),  "indexd",
274 0,      CHECK,  mk_op2(0x3,I_BYTE,I_BYTE),      "checkb",
275 0,      CHECK,  mk_op2(0x3,I_WORD,I_WORD),      "checkw",
276 0,      CHECK,  mk_op2(0x3,I_DOUBLE,I_DOUBLE),  "checkd",
277 /* Processor control instructions */
278 0,      JUMP,   mk_op1(0x4,I_DOUBLE),   "jump",
279 0,      BR,     mk_c(B_EQ),             "beq",
280 0,      BR,     mk_c(B_NE),             "bne",
281 0,      BR,     mk_c(B_CS),             "bcs",
282 0,      BR,     mk_c(B_CC),             "bcc",
283 0,      BR,     mk_c(B_HI),             "bhi",
284 0,      BR,     mk_c(B_LS),             "bls",
285 0,      BR,     mk_c(B_GT),             "bgt",
286 0,      BR,     mk_c(B_LE),             "ble",
287 0,      BR,     mk_c(B_FS),             "bfs",
288 0,      BR,     mk_c(B_FC),             "bfc",
289 0,      BR,     mk_c(B_LO),             "blo",
290 0,      BR,     mk_c(B_HS),             "bhs",
291 0,      BR,     mk_c(B_LT),             "blt",
292 0,      BR,     mk_c(B_GE),             "bge",
293 0,      BR,     mk_c(B_TRUE),           "br",
294 #ifdef UNUSED
295 0,      BR,     mk_c(B_FALSE),          "bfalse",
296 #endif
297 0,      ADJSP,  mk_op1(0xE,I_BYTE),     "caseb",
298 0,      ADJSP,  mk_op1(0xE,I_WORD),     "casew",
299 0,      ADJSP,  mk_op1(0xE,I_DOUBLE),   "cased",
300 0,      ACB,    mk_op1(0x4,I_BYTE),     "acbb",
301 0,      ACB,    mk_op1(0x4,I_WORD),     "acbw",
302 0,      ACB,    mk_op1(0x4,I_DOUBLE),   "acbd",
303 0,      JSR,    mk_op1(0xC,I_DOUBLE),   "jsr",
304 0,      BSR,    mk_op(0x0),             "bsr",
305 0,      RET,    mk_op(0x1),             "ret",
306 0,      RET,    mk_op(0x2),             "cxp",
307 0,      ADJSP,  mk_op1(0x0,I_DOUBLE),   "cxpd",
308 0,      RET,    mk_op(0x3),             "rxp",
309 0,      RET,    mk_op(0x4),             "rett",
310 0,      WAIT,   mk_op(0x5),             "reti",
311 0,      WAIT,   mk_op(0xC),             "dia",
312 /* Processor service instructions */
313 0,      ADJSP,  mk_op1(0xA,I_BYTE),     "adjspb",
314 0,      ADJSP,  mk_op1(0xA,I_WORD),     "adjspw",
315 0,      ADJSP,  mk_op1(0xA,I_DOUBLE),   "adjspd",
316 0,      ADJSP,  mk_op1(0x2,I_BYTE),     "bicpsrb",
317 0,      ADJSP,  mk_op1(0x2,I_WORD),     "bicpsrw",
318 0,      ADJSP,  mk_op1(0x6,I_BYTE),     "bispsrb",
319 0,      ADJSP,  mk_op1(0x6,I_WORD),     "bispsrw",
320 #ifdef UNUSED
321 0,      ADJSP,  mk_op1(0x2,I_DOUBLE),   "bicpsrd",
322 0,      ADJSP,  mk_op1(0x6,I_DOUBLE),   "bispsrd",
323 #endif
324 0,      SAVE,   mk_op(0x6),             "save",
325 0,      SAVE,   mk_op(0x7),             "restore",
326 0,      ENTER,  mk_op(0x8),             "enter",
327 0,      SAVE,   mk_op(0x9),             "exit",
328 0,      LPR,    mk_op1(0x6,I_BYTE),     "lprb",
329 0,      LPR,    mk_op1(0x6,I_WORD),     "lprw",
330 0,      LPR,    mk_op1(0x6,I_DOUBLE),   "lprd",
331 0,      LPR,    mk_op1(0x2,I_BYTE),     "sprb",
332 0,      LPR,    mk_op1(0x2,I_WORD),     "sprw",
333 0,      LPR,    mk_op1(0x2,I_DOUBLE),   "sprd",
334 0,      SETCFG, mk_op1(0x2,I_DOUBLE),   "setcfg",
335 0,      WAIT,   mk_op(0xF),             "bpt",
336 0,      WAIT,   mk_op(0xD),             "flag",
337 0,      WAIT,   mk_op(0xE),             "svc",
338 0,      WAIT,   mk_op(0xA),             "nop",
339 0,      WAIT,   mk_op(0xB),             "wait",
340 /* Memory management instructions */
341 0,      LMR,    mk_op1(0x2,I_DOUBLE),   "lmr",
342 0,      LMR,    mk_op1(0x3,I_DOUBLE),   "smr",
343 0,      RDVAL,  mk_op1(0x0,I_DOUBLE),   "rdval",
344 0,      RDVAL,  mk_op1(0x1,I_DOUBLE),   "wrval",
345 #ifdef SU_ASSEM
346 /* The assembler ref. man and the CPU description booklet differ
347    in the encoding of these instructions
348 */
349 0,      FFS,    mk_op2c(0x6,I_BYTE,I_BYTE,1),   "movsub",
350 0,      FFS,    mk_op2c(0x6,I_WORD,I_WORD,1),   "movsuw",
351 0,      FFS,    mk_op2c(0x6,I_DOUBLE,I_DOUBLE,1),"movsud",
352 0,      FFS,    mk_op2c(0x6,I_BYTE,I_BYTE,3),   "movusb",
353 0,      FFS,    mk_op2c(0x6,I_WORD,I_WORD,3),   "movusw",
354 0,      FFS,    mk_op2c(0x6,I_DOUBLE,I_DOUBLE,3),"movusd",
355 #else
356 /* assembler reference manual version */
357 0,      FFS,    mk_op2c(0x7,I_BYTE,I_BYTE,0),   "movsub",
358 0,      FFS,    mk_op2c(0x7,I_WORD,I_WORD,0),   "movsuw",
359 0,      FFS,    mk_op2c(0x7,I_DOUBLE,I_DOUBLE,0),"movsud",
360 0,      FFS,    mk_op2c(0x6,I_BYTE,I_BYTE,0),   "movusb",
361 0,      FFS,    mk_op2c(0x6,I_WORD,I_WORD,0),   "movusw",
362 0,      FFS,    mk_op2c(0x6,I_DOUBLE,I_DOUBLE,0),"movusd",
363 #endif
364 /* Floating point instructions */
365 0,      ADD_F,  mk_op2(0xD,F_FLOAT,F_FLOAT),    "absf",
366 0,      ADD_F,  mk_op2(0xD,F_LONG,F_LONG),      "absl",
367 0,      ADD_F,  mk_op2(0x0,F_FLOAT,F_FLOAT),    "addf",
368 0,      ADD_F,  mk_op2(0x0,F_LONG,F_LONG),      "addl",
369 0,      ADD_F,  mk_op2(0x2,F_FLOAT,F_FLOAT),    "cmpf",
370 0,      ADD_F,  mk_op2(0x2,F_LONG,F_LONG),      "cmpl",
371 0,      ADD_F,  mk_op2(0x8,F_FLOAT,F_FLOAT),    "divf",
372 0,      ADD_F,  mk_op2(0x8,F_LONG,F_LONG),      "divl",
373 0,      ADD_F,  mk_op2(0xC,F_FLOAT,F_FLOAT),    "mulf",
374 0,      ADD_F,  mk_op2(0xC,F_LONG,F_LONG),      "mull",
375 0,      ADD_F,  mk_op2(0x4,F_FLOAT,F_FLOAT),    "subf",
376 0,      ADD_F,  mk_op2(0x4,F_LONG,F_LONG),      "subl",
377 0,      ADD_F,  mk_op2(0x5,F_FLOAT,F_FLOAT),    "negf",
378 0,      ADD_F,  mk_op2(0x5,F_LONG,F_LONG),      "negl",
379 0,      ADD_F,  mk_op2(0x1,F_FLOAT,F_FLOAT),    "movf",
380 0,      ADD_F,  mk_op2(0x1,F_LONG,F_LONG),      "movl",
381 0,      MOVIF,  mk_op2(0x0,I_BYTE,F_FLOAT),     "movbf",
382 0,      MOVIF,  mk_op2(0x0,I_WORD,F_FLOAT),     "movwf",
383 0,      MOVIF,  mk_op2(0x0,I_DOUBLE,F_FLOAT),   "movdf",
384 0,      MOVIF,  mk_op2(0x0,I_BYTE,F_LONG),      "movbl",
385 0,      MOVIF,  mk_op2(0x0,I_WORD,F_LONG),      "movwl",
386 0,      MOVIF,  mk_op2(0x0,I_DOUBLE,F_LONG),    "movdl",
387 0,      MOVFL,  mk_op2(0x3,F_FLOAT,F_LONG),     "movfl",
388 0,      MOVFL,  mk_op2(0x2,F_LONG,F_FLOAT),     "movlf",
389 0,      TRUNC,  mk_op2(0x7,F_FLOAT,I_BYTE),     "floorfb",
390 0,      TRUNC,  mk_op2(0x7,F_FLOAT,I_WORD),     "floorfw",
391 0,      TRUNC,  mk_op2(0x7,F_FLOAT,I_DOUBLE),   "floorfd",
392 0,      TRUNC,  mk_op2(0x7,F_LONG,I_BYTE),      "floorlb",
393 0,      TRUNC,  mk_op2(0x7,F_LONG,I_WORD),      "floorlw",
394 0,      TRUNC,  mk_op2(0x7,F_LONG,I_DOUBLE),    "floorld",
395 0,      TRUNC,  mk_op2(0x4,F_FLOAT,I_BYTE),     "roundfb",
396 0,      TRUNC,  mk_op2(0x4,F_FLOAT,I_WORD),     "roundfw",
397 0,      TRUNC,  mk_op2(0x4,F_FLOAT,I_DOUBLE),   "roundfd",
398 0,      TRUNC,  mk_op2(0x4,F_LONG,I_BYTE),      "roundlb",
399 0,      TRUNC,  mk_op2(0x4,F_LONG,I_WORD),      "roundlw",
400 0,      TRUNC,  mk_op2(0x4,F_LONG,I_DOUBLE),    "roundld",
401 0,      TRUNC,  mk_op2(0x5,F_FLOAT,I_BYTE),     "truncfb",
402 0,      TRUNC,  mk_op2(0x5,F_FLOAT,I_WORD),     "truncfw",
403 0,      TRUNC,  mk_op2(0x5,F_FLOAT,I_DOUBLE),   "truncfd",
404 0,      TRUNC,  mk_op2(0x5,F_LONG,I_BYTE),      "trunclb",
405 0,      TRUNC,  mk_op2(0x5,F_LONG,I_WORD),      "trunclw",
406 0,      TRUNC,  mk_op2(0x5,F_LONG,I_DOUBLE),    "truncld",
407 0,      LFSR,   mk_op(0x1),             "lfsr",
408 0,      LFSR,   mk_op(0x6),             "sfsr",
409 /* Slave processor instructions */
410 0,      LCR,    mk_op1(0x2,I_DOUBLE),   "lcr", /* Sure ? */
411 0,      LCR,    mk_op1(0x3,I_DOUBLE),   "scr", /* Sure ? */
412 0,      CATST,  mk_op1(0x0,I_DOUBLE),   "catst0",/* Sure ? */
413 0,      CATST,  mk_op1(0x1,I_DOUBLE),   "catst1",/* Sure ? */
414 0,      LCSR,   mk_op1(0x1,S_DOUBLE),   "lcsr",  /* Sure ? */
415 0,      LCSR,   mk_op1(0x6,S_DOUBLE),   "scsr",  /* Sure ? */
416 0,      CCVSI,  mk_op2(0x7,S_DOUBLE,I_BYTE),    "ccv0db",
417 0,      CCVSI,  mk_op2(0x7,S_DOUBLE,I_WORD),    "ccv0dw",
418 0,      CCVSI,  mk_op2(0x7,S_DOUBLE,I_DOUBLE),  "ccv0dd",
419 0,      CCVSI,  mk_op2(0x7,S_QUAD,I_BYTE),      "ccv0qb",
420 0,      CCVSI,  mk_op2(0x7,S_QUAD,I_WORD),      "ccv0qw",
421 0,      CCVSI,  mk_op2(0x7,S_QUAD,I_DOUBLE),    "ccv0qd",
422 0,      CCVSI,  mk_op2(0x5,S_DOUBLE,I_BYTE),    "ccv1db",
423 0,      CCVSI,  mk_op2(0x5,S_DOUBLE,I_WORD),    "ccv1dw",
424 0,      CCVSI,  mk_op2(0x5,S_DOUBLE,I_DOUBLE),  "ccv1dd",
425 0,      CCVSI,  mk_op2(0x5,S_QUAD,I_BYTE),      "ccv1qb",
426 0,      CCVSI,  mk_op2(0x5,S_QUAD,I_WORD),      "ccv1qw",
427 0,      CCVSI,  mk_op2(0x5,S_QUAD,I_DOUBLE),    "ccv1qd",
428 0,      CCVSI,  mk_op2(0x4,S_DOUBLE,I_BYTE),    "ccv2db",
429 0,      CCVSI,  mk_op2(0x4,S_DOUBLE,I_WORD),    "ccv2dw",
430 0,      CCVSI,  mk_op2(0x4,S_DOUBLE,I_DOUBLE),  "ccv2dd",
431 0,      CCVSI,  mk_op2(0x4,S_QUAD,I_BYTE),      "ccv2qb",
432 0,      CCVSI,  mk_op2(0x4,S_QUAD,I_WORD),      "ccv2qw",
433 0,      CCVSI,  mk_op2(0x4,S_QUAD,I_DOUBLE),    "ccv2qd",
434 0,      CCVIS,  mk_op2(0x0,I_BYTE,S_DOUBLE),    "ccv3bd",
435 0,      CCVIS,  mk_op2(0x0,I_WORD,S_DOUBLE),    "ccv3wd",
436 0,      CCVIS,  mk_op2(0x0,I_DOUBLE,S_DOUBLE),  "ccv3dd",
437 0,      CCVIS,  mk_op2(0x0,I_BYTE,S_QUAD),      "ccv3bq",
438 0,      CCVIS,  mk_op2(0x0,I_WORD,S_QUAD),      "ccv3wq",
439 0,      CCVIS,  mk_op2(0x0,I_DOUBLE,S_QUAD),    "ccv3dq",
440 0,      CCVSS,  mk_op2(0x3,S_DOUBLE,S_QUAD),    "ccv4dq",
441 0,      CCVSS,  mk_op2(0x2,S_QUAD,S_DOUBLE),    "ccv5qd",
442 0,      CMOV,   mk_op2(0x0,S_DOUBLE,S_DOUBLE),  "ccal0d",
443 0,      CMOV,   mk_op2(0x0,S_QUAD,S_QUAD),      "ccal0q",
444 0,      CMOV,   mk_op2(0x4,S_DOUBLE,S_DOUBLE),  "ccal1d",
445 0,      CMOV,   mk_op2(0x4,S_QUAD,S_QUAD),      "ccal1q",
446 0,      CMOV,   mk_op2(0xC,S_DOUBLE,S_DOUBLE),  "ccal2d",
447 0,      CMOV,   mk_op2(0xC,S_QUAD,S_QUAD),      "ccal2q",
448 0,      CMOV,   mk_op2(0x8,S_DOUBLE,S_DOUBLE),  "ccal3d",
449 0,      CMOV,   mk_op2(0x8,S_QUAD,S_QUAD),      "ccal3q",
450 0,      CMOV,   mk_op2(0x2,S_DOUBLE,S_DOUBLE),  "ccmpd",
451 0,      CMOV,   mk_op2(0x2,S_QUAD,S_QUAD),      "ccmpq",
452 0,      CMOV,   mk_op2(0x1,S_DOUBLE,S_DOUBLE),  "cmov0d",
453 0,      CMOV,   mk_op2(0x1,S_QUAD,S_QUAD),      "cmov0q",
454 0,      CMOV,   mk_op2(0xD,S_DOUBLE,S_DOUBLE),  "cmov1d",
455 0,      CMOV,   mk_op2(0xD,S_QUAD,S_QUAD),      "cmov1q",
456 0,      CMOV,   mk_op2(0x5,S_DOUBLE,S_DOUBLE),  "cmov2d",
457 0,      CMOV,   mk_op2(0x5,S_QUAD,S_QUAD),      "cmov2q",