]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - sim/mn10300/simops.c
* mn10200-opc.c: Change "trap" to "syscall".
[thirdparty/binutils-gdb.git] / sim / mn10300 / simops.c
CommitLineData
05ccbdfd
JL
1#include "config.h"
2
3#include <signal.h>
4#ifdef HAVE_UNISTD_H
5#include <unistd.h>
6#endif
7#include "mn10300_sim.h"
8#include "simops.h"
9#include "sys/syscall.h"
10#include "bfd.h"
11#include <errno.h>
12#include <sys/stat.h>
13#include <sys/times.h>
14#include <sys/time.h>
15
9f4a551e
JL
16#define REG0(X) ((X) & 0x3)
17#define REG1(X) (((X) & 0xc) >> 2)
95d18eb7 18#define REG0_4(X) (((X) & 0x30) >> 4)
9f4a551e
JL
19#define REG0_8(X) (((X) & 0x300) >> 8)
20#define REG1_8(X) (((X) & 0xc00) >> 10)
2e8f4133 21#define REG0_16(X) (((X) & 0x30000) >> 16)
9f4a551e 22#define REG1_16(X) (((X) & 0xc0000) >> 18)
05ccbdfd 23\f
707641f6 24/* mov imm8, dn */
d2523010
JL
25void OP_8000 (insn, extension)
26 unsigned long insn, extension;
05ccbdfd 27{
9f4a551e 28 State.regs[REG_D0 + REG0_8 (insn)] = SEXT8 (insn & 0xff);
05ccbdfd
JL
29}
30
707641f6 31/* mov dm, dn */
d2523010
JL
32void OP_80 (insn, extension)
33 unsigned long insn, extension;
05ccbdfd 34{
9f4a551e 35 State.regs[REG_D0 + REG0 (insn)] = State.regs[REG_D0 + REG1 (insn)];
05ccbdfd
JL
36}
37
707641f6 38/* mov dm, an */
d2523010
JL
39void OP_F1E0 (insn, extension)
40 unsigned long insn, extension;
05ccbdfd 41{
9f4a551e 42 State.regs[REG_A0 + REG0 (insn)] = State.regs[REG_D0 + REG1 (insn)];
05ccbdfd
JL
43}
44
707641f6 45/* mov am, dn */
d2523010
JL
46void OP_F1D0 (insn, extension)
47 unsigned long insn, extension;
05ccbdfd 48{
9f4a551e 49 State.regs[REG_D0 + REG0 (insn)] = State.regs[REG_A0 + REG1 (insn)];
05ccbdfd
JL
50}
51
707641f6 52/* mov imm8, an */
d2523010
JL
53void OP_9000 (insn, extension)
54 unsigned long insn, extension;
05ccbdfd 55{
9f4a551e 56 State.regs[REG_A0 + REG0_8 (insn)] = insn & 0xff;
05ccbdfd
JL
57}
58
707641f6 59/* mov am, an */
d2523010
JL
60void OP_90 (insn, extension)
61 unsigned long insn, extension;
05ccbdfd 62{
9f4a551e 63 State.regs[REG_A0 + REG0 (insn)] = State.regs[REG_A0 + REG1 (insn)];
05ccbdfd
JL
64}
65
1f3bea21 66/* mov sp, an */
d2523010
JL
67void OP_3C (insn, extension)
68 unsigned long insn, extension;
05ccbdfd 69{
9f4a551e 70 State.regs[REG_A0 + REG0 (insn)] = State.regs[REG_SP];
05ccbdfd
JL
71}
72
1f3bea21 73/* mov am, sp */
d2523010
JL
74void OP_F2F0 (insn, extension)
75 unsigned long insn, extension;
05ccbdfd 76{
9f4a551e 77 State.regs[REG_SP] = State.regs[REG_A0 + REG1 (insn)];
05ccbdfd
JL
78}
79
707641f6 80/* mov psw, dn */
d2523010
JL
81void OP_F2E4 (insn, extension)
82 unsigned long insn, extension;
05ccbdfd 83{
9f4a551e 84 State.regs[REG_D0 + REG0 (insn)] = PSW;
05ccbdfd
JL
85}
86
707641f6 87/* mov dm, psw */
d2523010
JL
88void OP_F2F3 (insn, extension)
89 unsigned long insn, extension;
05ccbdfd 90{
9f4a551e 91 PSW = State.regs[REG_D0 + REG1 (insn)];
05ccbdfd
JL
92}
93
707641f6 94/* mov mdr, dn */
d2523010
JL
95void OP_F2E0 (insn, extension)
96 unsigned long insn, extension;
05ccbdfd 97{
9f4a551e 98 State.regs[REG_D0 + REG0 (insn)] = State.regs[REG_MDR];
05ccbdfd
JL
99}
100
707641f6 101/* mov dm, mdr */
d2523010
JL
102void OP_F2F2 (insn, extension)
103 unsigned long insn, extension;
05ccbdfd 104{
9f4a551e 105 State.regs[REG_MDR] = State.regs[REG_D0 + REG1 (insn)];
05ccbdfd
JL
106}
107
2e35551c 108/* mov (am), dn */
d2523010
JL
109void OP_70 (insn, extension)
110 unsigned long insn, extension;
05ccbdfd 111{
9f4a551e
JL
112 State.regs[REG_D0 + REG1 (insn)]
113 = load_mem (State.regs[REG_A0 + REG0 (insn)], 4);
05ccbdfd
JL
114}
115
2e35551c 116/* mov (d8,am), dn */
d2523010
JL
117void OP_F80000 (insn, extension)
118 unsigned long insn, extension;
05ccbdfd 119{
9f4a551e
JL
120 State.regs[REG_D0 + REG1_8 (insn)]
121 = load_mem ((State.regs[REG_A0 + REG0_8 (insn)]
2e35551c 122 + SEXT8 (insn & 0xff)), 4);
05ccbdfd
JL
123}
124
ecb4b5a3 125/* mov (d16,am), dn */
d2523010
JL
126void OP_FA000000 (insn, extension)
127 unsigned long insn, extension;
05ccbdfd 128{
9f4a551e
JL
129 State.regs[REG_D0 + REG1_16 (insn)]
130 = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3 131 + SEXT16 (insn & 0xffff)), 4);
05ccbdfd
JL
132}
133
de0dce7c 134/* mov (d32,am), dn */
d2523010
JL
135void OP_FC000000 (insn, extension)
136 unsigned long insn, extension;
05ccbdfd 137{
9f4a551e
JL
138 State.regs[REG_D0 + REG1_16 (insn)]
139 = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
7c52bf32 140 + ((insn & 0xffff) << 16) + extension), 4);
05ccbdfd
JL
141}
142
707641f6 143/* mov (d8,sp), dn */
d2523010
JL
144void OP_5800 (insn, extension)
145 unsigned long insn, extension;
05ccbdfd 146{
9f4a551e 147 State.regs[REG_D0 + REG0_8 (insn)]
ecb4b5a3 148 = load_mem (State.regs[REG_SP] + (insn & 0xff), 4);
05ccbdfd
JL
149}
150
ecb4b5a3 151/* mov (d16,sp), dn */
d2523010
JL
152void OP_FAB40000 (insn, extension)
153 unsigned long insn, extension;
05ccbdfd 154{
9f4a551e 155 State.regs[REG_D0 + REG0_16 (insn)]
ecb4b5a3 156 = load_mem (State.regs[REG_SP] + (insn & 0xffff), 4);
05ccbdfd
JL
157}
158
de0dce7c 159/* mov (d32,sp), dn */
d2523010
JL
160void OP_FCB40000 (insn, extension)
161 unsigned long insn, extension;
05ccbdfd 162{
9f4a551e 163 State.regs[REG_D0 + REG0_16 (insn)]
de0dce7c 164 = load_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 4);
05ccbdfd
JL
165}
166
f5f13c1d 167/* mov (di,am), dn */
d2523010
JL
168void OP_F300 (insn, extension)
169 unsigned long insn, extension;
05ccbdfd 170{
95d18eb7 171 State.regs[REG_D0 + REG0_4 (insn)]
9f4a551e
JL
172 = load_mem ((State.regs[REG_A0 + REG0 (insn)]
173 + State.regs[REG_D0 + REG1 (insn)]), 4);
05ccbdfd
JL
174}
175
707641f6 176/* mov (abs16), dn */
d2523010
JL
177void OP_300000 (insn, extension)
178 unsigned long insn, extension;
05ccbdfd 179{
9f4a551e 180 State.regs[REG_D0 + REG0_16 (insn)] = load_mem ((insn & 0xffff), 4);
05ccbdfd
JL
181}
182
de0dce7c 183/* mov (abs32), dn */
d2523010
JL
184void OP_FCA40000 (insn, extension)
185 unsigned long insn, extension;
05ccbdfd 186{
9f4a551e 187 State.regs[REG_D0 + REG0_16 (insn)]
de0dce7c 188 = load_mem ((((insn & 0xffff) << 16) + extension), 4);
05ccbdfd
JL
189}
190
707641f6 191/* mov (am), an */
d2523010
JL
192void OP_F000 (insn, extension)
193 unsigned long insn, extension;
05ccbdfd 194{
9f4a551e
JL
195 State.regs[REG_A0 + REG1 (insn)]
196 = load_mem (State.regs[REG_A0 + REG0 (insn)], 4);
05ccbdfd
JL
197}
198
2e35551c 199/* mov (d8,am), an */
d2523010
JL
200void OP_F82000 (insn, extension)
201 unsigned long insn, extension;
05ccbdfd 202{
9f4a551e
JL
203 State.regs[REG_A0 + REG1_8 (insn)]
204 = load_mem ((State.regs[REG_A0 + REG0_8 (insn)]
2e35551c 205 + SEXT8 (insn & 0xff)), 4);
05ccbdfd
JL
206}
207
ecb4b5a3 208/* mov (d16,am), an */
d2523010
JL
209void OP_FA200000 (insn, extension)
210 unsigned long insn, extension;
05ccbdfd 211{
9f4a551e
JL
212 State.regs[REG_A0 + REG1_16 (insn)]
213 = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3 214 + SEXT16 (insn & 0xffff)), 4);
05ccbdfd
JL
215}
216
de0dce7c 217/* mov (d32,am), an */
d2523010
JL
218void OP_FC200000 (insn, extension)
219 unsigned long insn, extension;
05ccbdfd 220{
9f4a551e
JL
221 State.regs[REG_A0 + REG1_16 (insn)]
222 = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
de0dce7c 223 + ((insn & 0xffff) << 16) + extension), 4);
05ccbdfd
JL
224}
225
707641f6 226/* mov (d8,sp), an */
d2523010
JL
227void OP_5C00 (insn, extension)
228 unsigned long insn, extension;
05ccbdfd 229{
9f4a551e 230 State.regs[REG_A0 + REG0_8 (insn)]
ecb4b5a3 231 = load_mem (State.regs[REG_SP] + (insn & 0xff), 4);
05ccbdfd
JL
232}
233
ecb4b5a3 234/* mov (d16,sp), an */
d2523010
JL
235void OP_FAB00000 (insn, extension)
236 unsigned long insn, extension;
05ccbdfd 237{
9f4a551e 238 State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3 239 = load_mem (State.regs[REG_SP] + (insn & 0xffff), 4);
05ccbdfd
JL
240}
241
de0dce7c 242/* mov (d32,sp), an */
d2523010
JL
243void OP_FCB00000 (insn, extension)
244 unsigned long insn, extension;
05ccbdfd 245{
9f4a551e 246 State.regs[REG_A0 + REG0_16 (insn)]
de0dce7c 247 = load_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 4);
05ccbdfd
JL
248}
249
de0dce7c 250/* mov (di,am), an */
d2523010
JL
251void OP_F380 (insn, extension)
252 unsigned long insn, extension;
05ccbdfd 253{
95d18eb7 254 State.regs[REG_A0 + REG0_4 (insn)]
9f4a551e
JL
255 = load_mem ((State.regs[REG_A0 + REG0 (insn)]
256 + State.regs[REG_D0 + REG1 (insn)]), 4);
05ccbdfd
JL
257}
258
ecb4b5a3 259/* mov (abs16), an */
d2523010
JL
260void OP_FAA00000 (insn, extension)
261 unsigned long insn, extension;
05ccbdfd 262{
9f4a551e 263 State.regs[REG_A0 + REG0_16 (insn)] = load_mem ((insn & 0xffff), 4);
05ccbdfd
JL
264}
265
de0dce7c 266/* mov (abs32), an */
d2523010
JL
267void OP_FCA00000 (insn, extension)
268 unsigned long insn, extension;
05ccbdfd 269{
9f4a551e 270 State.regs[REG_A0 + REG0_16 (insn)]
de0dce7c 271 = load_mem ((((insn & 0xffff) << 16) + extension), 4);
05ccbdfd
JL
272}
273
2e35551c 274/* mov (d8,am), sp */
d2523010
JL
275void OP_F8F000 (insn, extension)
276 unsigned long insn, extension;
05ccbdfd 277{
2e35551c 278 State.regs[REG_SP]
9f4a551e 279 = load_mem ((State.regs[REG_A0 + REG0_8 (insn)]
2e35551c 280 + SEXT8 (insn & 0xff)), 4);
05ccbdfd
JL
281}
282
707641f6 283/* mov dm, (an) */
d2523010
JL
284void OP_60 (insn, extension)
285 unsigned long insn, extension;
05ccbdfd 286{
9f4a551e
JL
287 store_mem (State.regs[REG_A0 + REG0 (insn)], 4,
288 State.regs[REG_D0 + REG1 (insn)]);
05ccbdfd
JL
289}
290
2e35551c 291/* mov dm, (d8,an) */
d2523010
JL
292void OP_F81000 (insn, extension)
293 unsigned long insn, extension;
05ccbdfd 294{
9f4a551e 295 store_mem ((State.regs[REG_A0 + REG0_8 (insn)]
2e35551c 296 + SEXT8 (insn & 0xff)), 4,
9f4a551e 297 State.regs[REG_D0 + REG1_8 (insn)]);
05ccbdfd
JL
298}
299
ecb4b5a3 300/* mov dm (d16,an) */
d2523010
JL
301void OP_FA100000 (insn, extension)
302 unsigned long insn, extension;
05ccbdfd 303{
9f4a551e 304 store_mem ((State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3 305 + SEXT16 (insn & 0xffff)), 4,
9f4a551e 306 State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
307}
308
de0dce7c 309/* mov dm (d32,an) */
d2523010
JL
310void OP_FC100000 (insn, extension)
311 unsigned long insn, extension;
05ccbdfd 312{
9f4a551e 313 store_mem ((State.regs[REG_A0 + REG0_16 (insn)]
de0dce7c 314 + ((insn & 0xffff) << 16) + extension), 4,
9f4a551e 315 State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
316}
317
707641f6 318/* mov dm, (d8,sp) */
d2523010
JL
319void OP_4200 (insn, extension)
320 unsigned long insn, extension;
05ccbdfd 321{
ecb4b5a3 322 store_mem (State.regs[REG_SP] + (insn & 0xff), 4,
9f4a551e 323 State.regs[REG_D0 + REG1_8 (insn)]);
05ccbdfd
JL
324}
325
ecb4b5a3 326/* mov dm, (d16,sp) */
d2523010
JL
327void OP_FA910000 (insn, extension)
328 unsigned long insn, extension;
05ccbdfd 329{
ecb4b5a3 330 store_mem (State.regs[REG_SP] + (insn & 0xffff), 4,
9f4a551e 331 State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
332}
333
de0dce7c 334/* mov dm, (d32,sp) */
d2523010
JL
335void OP_FC910000 (insn, extension)
336 unsigned long insn, extension;
05ccbdfd 337{
de0dce7c 338 store_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 4,
9f4a551e 339 State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
340}
341
f5f13c1d 342/* mov dm, (di,an) */
d2523010
JL
343void OP_F340 (insn, extension)
344 unsigned long insn, extension;
05ccbdfd 345{
9f4a551e
JL
346 store_mem ((State.regs[REG_A0 + REG0 (insn)]
347 + State.regs[REG_D0 + REG1 (insn)]), 4,
95d18eb7 348 State.regs[REG_D0 + REG0_4 (insn)]);
05ccbdfd
JL
349}
350
707641f6 351/* mov dm, (abs16) */
d2523010
JL
352void OP_10000 (insn, extension)
353 unsigned long insn, extension;
05ccbdfd 354{
9f4a551e 355 store_mem ((insn & 0xffff), 4, State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
356}
357
de0dce7c 358/* mov dm, (abs32) */
d2523010
JL
359void OP_FC810000 (insn, extension)
360 unsigned long insn, extension;
05ccbdfd 361{
9f4a551e 362 store_mem ((((insn & 0xffff) << 16) + extension), 4, State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
363}
364
707641f6 365/* mov am, (an) */
d2523010
JL
366void OP_F010 (insn, extension)
367 unsigned long insn, extension;
05ccbdfd 368{
9f4a551e
JL
369 store_mem (State.regs[REG_A0 + REG0 (insn)], 4,
370 State.regs[REG_A0 + REG1 (insn)]);
05ccbdfd
JL
371}
372
2e35551c 373/* mov am, (d8,an) */
d2523010
JL
374void OP_F83000 (insn, extension)
375 unsigned long insn, extension;
05ccbdfd 376{
9f4a551e 377 store_mem ((State.regs[REG_A0 + REG0_8 (insn)]
2e35551c 378 + SEXT8 (insn & 0xff)), 4,
9f4a551e 379 State.regs[REG_A0 + REG1_8 (insn)]);
05ccbdfd
JL
380}
381
de0dce7c 382/* mov am, (d16,an) */
d2523010
JL
383void OP_FA300000 (insn, extension)
384 unsigned long insn, extension;
05ccbdfd 385{
9f4a551e 386 store_mem ((State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3 387 + SEXT16 (insn & 0xffff)), 4,
9f4a551e 388 State.regs[REG_A0 + REG1_16 (insn)]);
05ccbdfd
JL
389}
390
de0dce7c 391/* mov am, (d32,an) */
d2523010
JL
392void OP_FC300000 (insn, extension)
393 unsigned long insn, extension;
05ccbdfd 394{
9f4a551e 395 store_mem ((State.regs[REG_A0 + REG0_16 (insn)]
de0dce7c 396 + ((insn & 0xffff) << 16) + extension), 4,
9f4a551e 397 State.regs[REG_A0 + REG1_16 (insn)]);
05ccbdfd
JL
398}
399
707641f6 400/* mov am, (d8,sp) */
d2523010
JL
401void OP_4300 (insn, extension)
402 unsigned long insn, extension;
05ccbdfd 403{
ecb4b5a3 404 store_mem (State.regs[REG_SP] + (insn & 0xff), 4,
9f4a551e 405 State.regs[REG_A0 + REG1_8 (insn)]);
05ccbdfd
JL
406}
407
ecb4b5a3 408/* mov am, (d16,sp) */
d2523010
JL
409void OP_FA900000 (insn, extension)
410 unsigned long insn, extension;
05ccbdfd 411{
ecb4b5a3 412 store_mem (State.regs[REG_SP] + (insn & 0xffff), 4,
9f4a551e 413 State.regs[REG_A0 + REG1_16 (insn)]);
05ccbdfd
JL
414}
415
de0dce7c 416/* mov am, (d32,sp) */
d2523010
JL
417void OP_FC900000 (insn, extension)
418 unsigned long insn, extension;
05ccbdfd 419{
de0dce7c 420 store_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 4,
9f4a551e 421 State.regs[REG_A0 + REG1_16 (insn)]);
05ccbdfd
JL
422}
423
f5f13c1d 424/* mov am, (di,an) */
d2523010
JL
425void OP_F3C0 (insn, extension)
426 unsigned long insn, extension;
05ccbdfd 427{
9f4a551e
JL
428 store_mem ((State.regs[REG_A0 + REG0 (insn)]
429 + State.regs[REG_D0 + REG1 (insn)]), 4,
95d18eb7 430 State.regs[REG_A0 + REG0_4 (insn)]);
05ccbdfd
JL
431}
432
ecb4b5a3 433/* mov am, (abs16) */
d2523010
JL
434void OP_FA800000 (insn, extension)
435 unsigned long insn, extension;
05ccbdfd 436{
9f4a551e 437 store_mem ((insn & 0xffff), 4, State.regs[REG_A0 + REG1_16 (insn)]);
05ccbdfd
JL
438}
439
de0dce7c 440/* mov am, (abs32) */
d2523010
JL
441void OP_FC800000 (insn, extension)
442 unsigned long insn, extension;
05ccbdfd 443{
9f4a551e 444 store_mem ((((insn & 0xffff) << 16) + extension), 4, State.regs[REG_A0 + REG1_16 (insn)]);
05ccbdfd
JL
445}
446
2e35551c 447/* mov sp, (d8,an) */
d2523010
JL
448void OP_F8F400 (insn, extension)
449 unsigned long insn, extension;
05ccbdfd 450{
9f4a551e 451 store_mem (State.regs[REG_A0 + REG0_8 (insn)] + SEXT8 (insn & 0xff),
2e35551c 452 4, State.regs[REG_SP]);
05ccbdfd
JL
453}
454
707641f6 455/* mov imm16, dn */
d2523010
JL
456void OP_2C0000 (insn, extension)
457 unsigned long insn, extension;
05ccbdfd 458{
707641f6
JL
459 unsigned long value;
460
461 value = SEXT16 (insn & 0xffff);
9f4a551e 462 State.regs[REG_D0 + REG0_16 (insn)] = value;
05ccbdfd
JL
463}
464
de0dce7c 465/* mov imm32,dn */
d2523010
JL
466void OP_FCCC0000 (insn, extension)
467 unsigned long insn, extension;
05ccbdfd 468{
de0dce7c
JL
469 unsigned long value;
470
7c52bf32 471 value = ((insn & 0xffff) << 16) + extension;
9f4a551e 472 State.regs[REG_D0 + REG0_16 (insn)] = value;
05ccbdfd
JL
473}
474
707641f6 475/* mov imm16, an */
d2523010
JL
476void OP_240000 (insn, extension)
477 unsigned long insn, extension;
05ccbdfd 478{
707641f6
JL
479 unsigned long value;
480
481 value = insn & 0xffff;
9f4a551e 482 State.regs[REG_A0 + REG0_16 (insn)] = value;
05ccbdfd
JL
483}
484
de0dce7c 485/* mov imm32, an */
d2523010
JL
486void OP_FCDC0000 (insn, extension)
487 unsigned long insn, extension;
05ccbdfd 488{
73e65298
JL
489 unsigned long value;
490
7c52bf32 491 value = ((insn & 0xffff) << 16) + extension;
9f4a551e 492 State.regs[REG_A0 + REG0_16 (insn)] = value;
05ccbdfd
JL
493}
494
707641f6 495/* movbu (am), dn */
d2523010
JL
496void OP_F040 (insn, extension)
497 unsigned long insn, extension;
05ccbdfd 498{
9f4a551e
JL
499 State.regs[REG_D0 + REG1 (insn)]
500 = load_mem (State.regs[REG_A0 + REG0 (insn)], 1);
05ccbdfd
JL
501}
502
2e35551c 503/* movbu (d8,am), dn */
d2523010
JL
504void OP_F84000 (insn, extension)
505 unsigned long insn, extension;
05ccbdfd 506{
9f4a551e
JL
507 State.regs[REG_D0 + REG1_8 (insn)]
508 = load_mem ((State.regs[REG_A0 + REG0_8 (insn)]
2e35551c 509 + SEXT8 (insn & 0xff)), 1);
05ccbdfd
JL
510}
511
ecb4b5a3 512/* movbu (d16,am), dn */
d2523010
JL
513void OP_FA400000 (insn, extension)
514 unsigned long insn, extension;
05ccbdfd 515{
9f4a551e
JL
516 State.regs[REG_D0 + REG1_16 (insn)]
517 = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3 518 + SEXT16 (insn & 0xffff)), 1);
05ccbdfd
JL
519}
520
de0dce7c 521/* movbu (d32,am), dn */
d2523010
JL
522void OP_FC400000 (insn, extension)
523 unsigned long insn, extension;
05ccbdfd 524{
9f4a551e
JL
525 State.regs[REG_D0 + REG1_16 (insn)]
526 = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
de0dce7c 527 + ((insn & 0xffff) << 16) + extension), 1);
05ccbdfd
JL
528}
529
2e35551c 530/* movbu (d8,sp), dn */
d2523010
JL
531void OP_F8B800 (insn, extension)
532 unsigned long insn, extension;
05ccbdfd 533{
9f4a551e 534 State.regs[REG_D0 + REG0_8 (insn)]
ecb4b5a3 535 = load_mem ((State.regs[REG_SP] + (insn & 0xff)), 1);
05ccbdfd
JL
536}
537
ecb4b5a3 538/* movbu (d16,sp), dn */
d2523010
JL
539void OP_FAB80000 (insn, extension)
540 unsigned long insn, extension;
05ccbdfd 541{
9f4a551e 542 State.regs[REG_D0 + REG0_16 (insn)]
ecb4b5a3 543 = load_mem ((State.regs[REG_SP] + (insn & 0xffff)), 1);
05ccbdfd
JL
544}
545
de0dce7c 546/* movbu (d32,sp), dn */
d2523010
JL
547void OP_FCB80000 (insn, extension)
548 unsigned long insn, extension;
05ccbdfd 549{
9f4a551e 550 State.regs[REG_D0 + REG0_16 (insn)]
de0dce7c 551 = load_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 1);
05ccbdfd
JL
552}
553
f5f13c1d 554/* movbu (di,am), dn */
d2523010
JL
555void OP_F400 (insn, extension)
556 unsigned long insn, extension;
05ccbdfd 557{
95d18eb7 558 State.regs[REG_D0 + REG0_4 (insn)]
9f4a551e
JL
559 = load_mem ((State.regs[REG_A0 + REG0 (insn)]
560 + State.regs[REG_D0 + REG1 (insn)]), 1);
05ccbdfd
JL
561}
562
707641f6 563/* movbu (abs16), dn */
d2523010
JL
564void OP_340000 (insn, extension)
565 unsigned long insn, extension;
05ccbdfd 566{
9f4a551e 567 State.regs[REG_D0 + REG0_16 (insn)] = load_mem ((insn & 0xffff), 1);
05ccbdfd
JL
568}
569
de0dce7c 570/* movbu (abs32), dn */
d2523010
JL
571void OP_FCA80000 (insn, extension)
572 unsigned long insn, extension;
05ccbdfd 573{
9f4a551e 574 State.regs[REG_D0 + REG0_16 (insn)]
de0dce7c 575 = load_mem ((((insn & 0xffff) << 16) + extension), 1);
05ccbdfd
JL
576}
577
707641f6 578/* movbu dm, (an) */
d2523010
JL
579void OP_F050 (insn, extension)
580 unsigned long insn, extension;
05ccbdfd 581{
9f4a551e
JL
582 store_mem (State.regs[REG_A0 + REG0 (insn)], 1,
583 State.regs[REG_D0 + REG1 (insn)]);
05ccbdfd
JL
584}
585
2e35551c 586/* movbu dm, (d8,an) */
d2523010
JL
587void OP_F85000 (insn, extension)
588 unsigned long insn, extension;
05ccbdfd 589{
9f4a551e 590 store_mem ((State.regs[REG_A0 + REG0_8 (insn)]
2e35551c 591 + SEXT8 (insn & 0xff)), 1,
9f4a551e 592 State.regs[REG_D0 + REG1_8 (insn)]);
05ccbdfd
JL
593}
594
ecb4b5a3 595/* movbu dm, (d16,an) */
d2523010
JL
596void OP_FA500000 (insn, extension)
597 unsigned long insn, extension;
05ccbdfd 598{
9f4a551e 599 store_mem ((State.regs[REG_A0 + REG0_16 (insn)]
de0dce7c 600 + SEXT16 (insn & 0xffff)), 1,
9f4a551e 601 State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
602}
603
de0dce7c 604/* movbu dm, (d32,an) */
d2523010
JL
605void OP_FC500000 (insn, extension)
606 unsigned long insn, extension;
05ccbdfd 607{
9f4a551e 608 store_mem ((State.regs[REG_A0 + REG0_16 (insn)]
de0dce7c 609 + ((insn & 0xffff) << 16) + extension), 1,
9f4a551e 610 State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
611}
612
2e35551c 613/* movbu dm, (d8,sp) */
d2523010
JL
614void OP_F89200 (insn, extension)
615 unsigned long insn, extension;
05ccbdfd 616{
ecb4b5a3 617 store_mem (State.regs[REG_SP] + (insn & 0xff), 1,
9f4a551e 618 State.regs[REG_D0 + REG1_8 (insn)]);
05ccbdfd
JL
619}
620
ecb4b5a3 621/* movbu dm, (d16,sp) */
d2523010
JL
622void OP_FA920000 (insn, extension)
623 unsigned long insn, extension;
05ccbdfd 624{
ecb4b5a3 625 store_mem (State.regs[REG_SP] + (insn & 0xffff), 2,
9f4a551e 626 State.regs[REG_D0 + REG1_8 (insn)]);
05ccbdfd
JL
627}
628
de0dce7c 629/* movbu dm (d32,sp) */
d2523010
JL
630void OP_FC920000 (insn, extension)
631 unsigned long insn, extension;
05ccbdfd 632{
de0dce7c 633 store_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 2,
9f4a551e 634 State.regs[REG_D0 + REG1_8 (insn)]);
05ccbdfd
JL
635}
636
f5f13c1d 637/* movbu dm, (di,an) */
d2523010
JL
638void OP_F440 (insn, extension)
639 unsigned long insn, extension;
05ccbdfd 640{
9f4a551e
JL
641 store_mem ((State.regs[REG_A0 + REG0 (insn)]
642 + State.regs[REG_D0 + REG1 (insn)]), 1,
95d18eb7 643 State.regs[REG_D0 + REG0_4 (insn)]);
05ccbdfd
JL
644}
645
707641f6 646/* movbu dm, (abs16) */
d2523010
JL
647void OP_20000 (insn, extension)
648 unsigned long insn, extension;
05ccbdfd 649{
9f4a551e 650 store_mem ((insn & 0xffff), 1, State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
651}
652
de0dce7c 653/* movbu dm, (abs32) */
d2523010
JL
654void OP_FC820000 (insn, extension)
655 unsigned long insn, extension;
05ccbdfd 656{
9f4a551e 657 store_mem ((((insn & 0xffff) << 16) + extension), 1, State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
658}
659
707641f6 660/* movhu (am), dn */
d2523010
JL
661void OP_F060 (insn, extension)
662 unsigned long insn, extension;
05ccbdfd 663{
9f4a551e
JL
664 State.regs[REG_D0 + REG1 (insn)]
665 = load_mem (State.regs[REG_A0 + REG0 (insn)], 2);
05ccbdfd
JL
666}
667
2e35551c 668/* movhu (d8,am), dn */
d2523010
JL
669void OP_F86000 (insn, extension)
670 unsigned long insn, extension;
05ccbdfd 671{
9f4a551e
JL
672 State.regs[REG_D0 + REG1_8 (insn)]
673 = load_mem ((State.regs[REG_A0 + REG0_8 (insn)]
2e35551c 674 + SEXT8 (insn & 0xff)), 2);
05ccbdfd
JL
675}
676
ecb4b5a3 677/* movhu (d16,am), dn */
d2523010
JL
678void OP_FA600000 (insn, extension)
679 unsigned long insn, extension;
05ccbdfd 680{
9f4a551e
JL
681 State.regs[REG_D0 + REG1_16 (insn)]
682 = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3 683 + SEXT16 (insn & 0xffff)), 2);
05ccbdfd
JL
684}
685
de0dce7c 686/* movhu (d32,am), dn */
d2523010
JL
687void OP_FC600000 (insn, extension)
688 unsigned long insn, extension;
05ccbdfd 689{
9f4a551e
JL
690 State.regs[REG_D0 + REG1_16 (insn)]
691 = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
de0dce7c 692 + ((insn & 0xffff) << 16) + extension), 2);
05ccbdfd
JL
693}
694
2e35551c 695/* movhu (d8,sp) dn */
d2523010
JL
696void OP_F8BC00 (insn, extension)
697 unsigned long insn, extension;
05ccbdfd 698{
9f4a551e 699 State.regs[REG_D0 + REG0_8 (insn)]
ecb4b5a3 700 = load_mem ((State.regs[REG_SP] + (insn & 0xff)), 2);
05ccbdfd
JL
701}
702
ecb4b5a3 703/* movhu (d16,sp), dn */
d2523010
JL
704void OP_FABC0000 (insn, extension)
705 unsigned long insn, extension;
05ccbdfd 706{
9f4a551e 707 State.regs[REG_D0 + REG0_16 (insn)]
ecb4b5a3 708 = load_mem ((State.regs[REG_SP] + (insn & 0xffff)), 2);
05ccbdfd
JL
709}
710
de0dce7c 711/* movhu (d32,sp), dn */
d2523010
JL
712void OP_FCBC0000 (insn, extension)
713 unsigned long insn, extension;
05ccbdfd 714{
9f4a551e 715 State.regs[REG_D0 + REG0_16 (insn)]
de0dce7c 716 = load_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 2);
05ccbdfd
JL
717}
718
f5f13c1d 719/* movhu (di,am), dn */
d2523010
JL
720void OP_F480 (insn, extension)
721 unsigned long insn, extension;
05ccbdfd 722{
95d18eb7 723 State.regs[REG_D0 + REG0_4 (insn)]
9f4a551e
JL
724 = load_mem ((State.regs[REG_A0 + REG0 (insn)]
725 + State.regs[REG_D0 + REG1 (insn)]), 2);
05ccbdfd
JL
726}
727
707641f6 728/* movhu (abs16), dn */
d2523010
JL
729void OP_380000 (insn, extension)
730 unsigned long insn, extension;
05ccbdfd 731{
9f4a551e 732 State.regs[REG_D0 + REG0_16 (insn)] = load_mem ((insn & 0xffff), 2);
05ccbdfd
JL
733}
734
de0dce7c 735/* movhu (abs32), dn */
d2523010
JL
736void OP_FCAC0000 (insn, extension)
737 unsigned long insn, extension;
05ccbdfd 738{
9f4a551e 739 State.regs[REG_D0 + REG0_16 (insn)]
de0dce7c 740 = load_mem ((((insn & 0xffff) << 16) + extension), 2);
05ccbdfd
JL
741}
742
707641f6 743/* movhu dm, (an) */
d2523010
JL
744void OP_F070 (insn, extension)
745 unsigned long insn, extension;
05ccbdfd 746{
9f4a551e
JL
747 store_mem (State.regs[REG_A0 + REG0 (insn)], 2,
748 State.regs[REG_D0 + REG1 (insn)]);
05ccbdfd
JL
749}
750
2e35551c 751/* movhu dm, (d8,an) */
d2523010
JL
752void OP_F87000 (insn, extension)
753 unsigned long insn, extension;
05ccbdfd 754{
9f4a551e 755 store_mem ((State.regs[REG_A0 + REG0_8 (insn)]
2e35551c 756 + SEXT8 (insn & 0xff)), 2,
9f4a551e 757 State.regs[REG_D0 + REG1_8 (insn)]);
05ccbdfd
JL
758}
759
ecb4b5a3 760/* movhu dm, (d16,an) */
d2523010
JL
761void OP_FA700000 (insn, extension)
762 unsigned long insn, extension;
05ccbdfd 763{
9f4a551e 764 store_mem ((State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3 765 + SEXT16 (insn & 0xffff)), 2,
9f4a551e 766 State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
767}
768
de0dce7c 769/* movhu dm, (d32,an) */
d2523010
JL
770void OP_FC700000 (insn, extension)
771 unsigned long insn, extension;
05ccbdfd 772{
9f4a551e 773 store_mem ((State.regs[REG_A0 + REG0_16 (insn)]
de0dce7c 774 + ((insn & 0xffff) << 16) + extension), 2,
9f4a551e 775 State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
776}
777
2e35551c 778/* movhu dm,(d8,sp) */
d2523010
JL
779void OP_F89300 (insn, extension)
780 unsigned long insn, extension;
05ccbdfd 781{
ecb4b5a3 782 store_mem (State.regs[REG_SP] + (insn & 0xff), 2,
9f4a551e 783 State.regs[REG_D0 + REG1_8 (insn)]);
05ccbdfd
JL
784}
785
ecb4b5a3 786/* movhu dm,(d16,sp) */
d2523010
JL
787void OP_FA930000 (insn, extension)
788 unsigned long insn, extension;
05ccbdfd 789{
ecb4b5a3 790 store_mem (State.regs[REG_SP] + (insn & 0xffff), 2,
9f4a551e 791 State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
792}
793
de0dce7c 794/* movhu dm,(d32,sp) */
d2523010
JL
795void OP_FC930000 (insn, extension)
796 unsigned long insn, extension;
05ccbdfd 797{
de0dce7c 798 store_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 2,
9f4a551e 799 State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
800}
801
f5f13c1d 802/* movhu dm, (di,an) */
d2523010
JL
803void OP_F4C0 (insn, extension)
804 unsigned long insn, extension;
05ccbdfd 805{
9f4a551e
JL
806 store_mem ((State.regs[REG_A0 + REG0 (insn)]
807 + State.regs[REG_D0 + REG1 (insn)]), 2,
95d18eb7 808 State.regs[REG_D0 + REG0_4 (insn)]);
05ccbdfd
JL
809}
810
707641f6 811/* movhu dm, (abs16) */
d2523010
JL
812void OP_30000 (insn, extension)
813 unsigned long insn, extension;
05ccbdfd 814{
9f4a551e 815 store_mem ((insn & 0xffff), 2, State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
816}
817
de0dce7c 818/* movhu dm, (abs32) */
d2523010
JL
819void OP_FC830000 (insn, extension)
820 unsigned long insn, extension;
05ccbdfd 821{
9f4a551e 822 store_mem ((((insn & 0xffff) << 16) + extension), 2, State.regs[REG_D0 + REG1_16 (insn)]);
05ccbdfd
JL
823}
824
707641f6 825/* ext dn */
d2523010
JL
826void OP_F2D0 (insn, extension)
827 unsigned long insn, extension;
05ccbdfd 828{
9f4a551e 829 if (State.regs[REG_D0 + REG0 (insn)] & 0x80000000)
707641f6
JL
830 State.regs[REG_MDR] = -1;
831 else
832 State.regs[REG_MDR] = 0;
05ccbdfd
JL
833}
834
707641f6 835/* extb dn */
d2523010
JL
836void OP_10 (insn, extension)
837 unsigned long insn, extension;
05ccbdfd 838{
9f4a551e 839 State.regs[REG_D0 + REG0 (insn)] = SEXT8 (State.regs[REG_D0 + REG0 (insn)]);
05ccbdfd
JL
840}
841
707641f6 842/* extbu dn */
d2523010
JL
843void OP_14 (insn, extension)
844 unsigned long insn, extension;
05ccbdfd 845{
9f4a551e 846 State.regs[REG_D0 + REG0 (insn)] &= 0xff;
05ccbdfd
JL
847}
848
707641f6 849/* exth dn */
d2523010
JL
850void OP_18 (insn, extension)
851 unsigned long insn, extension;
05ccbdfd 852{
9f4a551e
JL
853 State.regs[REG_D0 + REG0 (insn)]
854 = SEXT16 (State.regs[REG_D0 + REG0 (insn)]);
05ccbdfd
JL
855}
856
707641f6 857/* exthu dn */
d2523010
JL
858void OP_1C (insn, extension)
859 unsigned long insn, extension;
05ccbdfd 860{
9f4a551e 861 State.regs[REG_D0 + REG0 (insn)] &= 0xffff;
05ccbdfd
JL
862}
863
1f3bea21 864/* movm (sp), reg_list */
d2523010
JL
865void OP_CE00 (insn, extension)
866 unsigned long insn, extension;
05ccbdfd 867{
1f3bea21
JL
868 unsigned long sp = State.regs[REG_SP];
869 unsigned long mask;
870
871 mask = insn & 0xff;
872
873 if (mask & 0x8)
874 {
875 sp += 4;
876 State.regs[REG_LAR] = load_mem (sp, 4);
877 sp += 4;
878 State.regs[REG_LIR] = load_mem (sp, 4);
879 sp += 4;
880 State.regs[REG_MDR] = load_mem (sp, 4);
881 sp += 4;
882 State.regs[REG_A0 + 1] = load_mem (sp, 4);
883 sp += 4;
884 State.regs[REG_A0] = load_mem (sp, 4);
885 sp += 4;
886 State.regs[REG_D0 + 1] = load_mem (sp, 4);
887 sp += 4;
888 State.regs[REG_D0] = load_mem (sp, 4);
889 sp += 4;
890 }
891
892 if (mask & 0x10)
893 {
894 State.regs[REG_A0 + 3] = load_mem (sp, 4);
895 sp += 4;
896 }
897
898 if (mask & 0x20)
899 {
900 State.regs[REG_A0 + 2] = load_mem (sp, 4);
901 sp += 4;
902 }
903
904 if (mask & 0x40)
905 {
906 State.regs[REG_D0 + 3] = load_mem (sp, 4);
907 sp += 4;
908 }
909
910 if (mask & 0x80)
911 {
912 State.regs[REG_D0 + 2] = load_mem (sp, 4);
913 sp += 4;
914 }
915
916 /* And make sure to update the stack pointer. */
917 State.regs[REG_SP] = sp;
918}
919
920/* movm reg_list, (sp) */
d2523010
JL
921void OP_CF00 (insn, extension)
922 unsigned long insn, extension;
05ccbdfd 923{
1f3bea21
JL
924 unsigned long sp = State.regs[REG_SP];
925 unsigned long mask;
926
927 mask = insn & 0xff;
928
929 if (mask & 0x80)
930 {
931 sp -= 4;
6e7a01c1 932 store_mem (sp, 4, State.regs[REG_D0 + 2]);
1f3bea21
JL
933 }
934
935 if (mask & 0x40)
936 {
937 sp -= 4;
6e7a01c1 938 store_mem (sp, 4, State.regs[REG_D0 + 3]);
1f3bea21
JL
939 }
940
941 if (mask & 0x20)
942 {
943 sp -= 4;
6e7a01c1 944 store_mem (sp, 4, State.regs[REG_A0 + 2]);
1f3bea21
JL
945 }
946
947 if (mask & 0x10)
948 {
949 sp -= 4;
6e7a01c1 950 store_mem (sp, 4, State.regs[REG_A0 + 3]);
1f3bea21
JL
951 }
952
953 if (mask & 0x8)
954 {
955 sp -= 4;
6e7a01c1 956 store_mem (sp, 4, State.regs[REG_D0]);
1f3bea21 957 sp -= 4;
6e7a01c1 958 store_mem (sp, 4, State.regs[REG_D0 + 1]);
1f3bea21 959 sp -= 4;
6e7a01c1 960 store_mem (sp, 4, State.regs[REG_A0]);
1f3bea21 961 sp -= 4;
6e7a01c1 962 store_mem (sp, 4, State.regs[REG_A0 + 1]);
1f3bea21 963 sp -= 4;
6e7a01c1 964 store_mem (sp, 4, State.regs[REG_MDR]);
1f3bea21 965 sp -= 4;
6e7a01c1 966 store_mem (sp, 4, State.regs[REG_LIR]);
1f3bea21 967 sp -= 4;
6e7a01c1 968 store_mem (sp, 4, State.regs[REG_LAR]);
1f3bea21
JL
969 sp -= 4;
970 }
971
972 /* And make sure to update the stack pointer. */
973 State.regs[REG_SP] = sp;
05ccbdfd
JL
974}
975
73e65298 976/* clr dn */
d2523010
JL
977void OP_0 (insn, extension)
978 unsigned long insn, extension;
05ccbdfd 979{
9f4a551e 980 State.regs[REG_D0 + REG1 (insn)] = 0;
73e65298
JL
981
982 PSW |= PSW_Z;
983 PSW &= ~(PSW_V | PSW_C | PSW_N);
05ccbdfd
JL
984}
985
de0dce7c 986/* add dm,dn */
d2523010
JL
987void OP_E0 (insn, extension)
988 unsigned long insn, extension;
05ccbdfd 989{
73e65298
JL
990 int z, c, n, v;
991 unsigned long reg1, reg2, value;
992
9f4a551e
JL
993 reg1 = State.regs[REG_D0 + REG1 (insn)];
994 reg2 = State.regs[REG_D0 + REG0 (insn)];
73e65298 995 value = reg1 + reg2;
9f4a551e 996 State.regs[REG_D0 + REG0 (insn)] = value;
73e65298
JL
997
998 z = (value == 0);
999 n = (value & 0x80000000);
0ade484f 1000 c = (value < reg1) || (value < reg2);
d657034d 1001 v = ((reg2 & 0x80000000) == (reg1 & 0x80000000)
b7b89deb 1002 && (reg2 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1003
1004 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1005 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1006 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1007}
1008
73e65298 1009/* add dm, an */
d2523010
JL
1010void OP_F160 (insn, extension)
1011 unsigned long insn, extension;
05ccbdfd 1012{
73e65298
JL
1013 int z, c, n, v;
1014 unsigned long reg1, reg2, value;
1015
9f4a551e
JL
1016 reg1 = State.regs[REG_D0 + REG1 (insn)];
1017 reg2 = State.regs[REG_A0 + REG0 (insn)];
73e65298 1018 value = reg1 + reg2;
9f4a551e 1019 State.regs[REG_A0 + REG0 (insn)] = value;
73e65298
JL
1020
1021 z = (value == 0);
1022 n = (value & 0x80000000);
0ade484f 1023 c = (value < reg1) || (value < reg2);
d657034d 1024 v = ((reg2 & 0x80000000) == (reg1 & 0x80000000)
b7b89deb 1025 && (reg2 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1026
1027 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1028 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1029 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1030}
1031
de0dce7c 1032/* add am, dn */
d2523010
JL
1033void OP_F150 (insn, extension)
1034 unsigned long insn, extension;
05ccbdfd 1035{
73e65298
JL
1036 int z, c, n, v;
1037 unsigned long reg1, reg2, value;
1038
9f4a551e
JL
1039 reg1 = State.regs[REG_A0 + REG1 (insn)];
1040 reg2 = State.regs[REG_D0 + REG0 (insn)];
73e65298 1041 value = reg1 + reg2;
9f4a551e 1042 State.regs[REG_D0 + REG0 (insn)] = value;
73e65298
JL
1043
1044 z = (value == 0);
1045 n = (value & 0x80000000);
0ade484f 1046 c = (value < reg1) || (value < reg2);
d657034d 1047 v = ((reg2 & 0x80000000) == (reg1 & 0x80000000)
b7b89deb 1048 && (reg2 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1049
1050 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1051 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1052 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1053}
1054
73e65298 1055/* add am,an */
d2523010
JL
1056void OP_F170 (insn, extension)
1057 unsigned long insn, extension;
05ccbdfd 1058{
73e65298
JL
1059 int z, c, n, v;
1060 unsigned long reg1, reg2, value;
1061
9f4a551e
JL
1062 reg1 = State.regs[REG_A0 + REG1 (insn)];
1063 reg2 = State.regs[REG_A0 + REG0 (insn)];
73e65298 1064 value = reg1 + reg2;
9f4a551e 1065 State.regs[REG_A0 + REG0 (insn)] = value;
73e65298
JL
1066
1067 z = (value == 0);
1068 n = (value & 0x80000000);
0ade484f 1069 c = (value < reg1) || (value < reg2);
d657034d 1070 v = ((reg2 & 0x80000000) == (reg1 & 0x80000000)
b7b89deb 1071 && (reg2 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1072
1073 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1074 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1075 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1076}
1077
73e65298 1078/* add imm8, dn */
d2523010
JL
1079void OP_2800 (insn, extension)
1080 unsigned long insn, extension;
05ccbdfd 1081{
73e65298
JL
1082 int z, c, n, v;
1083 unsigned long reg1, imm, value;
1084
9f4a551e 1085 reg1 = State.regs[REG_D0 + REG0_8 (insn)];
73e65298
JL
1086 imm = SEXT8 (insn & 0xff);
1087 value = reg1 + imm;
9f4a551e 1088 State.regs[REG_D0 + REG0_8 (insn)] = value;
73e65298
JL
1089
1090 z = (value == 0);
1091 n = (value & 0x80000000);
0ade484f 1092 c = (value < reg1) || (value < imm);
d657034d 1093 v = ((reg1 & 0x80000000) == (imm & 0x80000000)
b7b89deb 1094 && (reg1 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1095
1096 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1097 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1098 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1099}
1100
73e65298 1101/* add imm16, dn */
d2523010
JL
1102void OP_FAC00000 (insn, extension)
1103 unsigned long insn, extension;
05ccbdfd 1104{
73e65298
JL
1105 int z, c, n, v;
1106 unsigned long reg1, imm, value;
1107
9f4a551e 1108 reg1 = State.regs[REG_D0 + REG0_16 (insn)];
73e65298
JL
1109 imm = SEXT16 (insn & 0xffff);
1110 value = reg1 + imm;
9f4a551e 1111 State.regs[REG_D0 + REG0_16 (insn)] = value;
73e65298
JL
1112
1113 z = (value == 0);
1114 n = (value & 0x80000000);
0ade484f 1115 c = (value < reg1) || (value < imm);
d657034d 1116 v = ((reg1 & 0x80000000) == (imm & 0x80000000)
b7b89deb 1117 && (reg1 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1118
1119 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1120 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1121 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1122}
1123
73e65298 1124/* add imm32,dn */
d2523010
JL
1125void OP_FCC00000 (insn, extension)
1126 unsigned long insn, extension;
05ccbdfd 1127{
73e65298
JL
1128 int z, c, n, v;
1129 unsigned long reg1, imm, value;
1130
9f4a551e 1131 reg1 = State.regs[REG_D0 + REG0_16 (insn)];
7c52bf32 1132 imm = ((insn & 0xffff) << 16) + extension;
73e65298 1133 value = reg1 + imm;
9f4a551e 1134 State.regs[REG_D0 + REG0_16 (insn)] = value;
73e65298
JL
1135
1136 z = (value == 0);
1137 n = (value & 0x80000000);
0ade484f 1138 c = (value < reg1) || (value < imm);
d657034d 1139 v = ((reg1 & 0x80000000) == (imm & 0x80000000)
b7b89deb 1140 && (reg1 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1141
1142 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1143 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1144 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1145}
1146
73e65298 1147/* add imm8, an */
d2523010
JL
1148void OP_2000 (insn, extension)
1149 unsigned long insn, extension;
05ccbdfd 1150{
73e65298
JL
1151 int z, c, n, v;
1152 unsigned long reg1, imm, value;
1153
9f4a551e 1154 reg1 = State.regs[REG_A0 + REG0_8 (insn)];
6e7a01c1 1155 imm = SEXT8 (insn & 0xff);
73e65298 1156 value = reg1 + imm;
9f4a551e 1157 State.regs[REG_A0 + REG0_8 (insn)] = value;
73e65298
JL
1158
1159 z = (value == 0);
1160 n = (value & 0x80000000);
0ade484f 1161 c = (value < reg1) || (value < imm);
d657034d 1162 v = ((reg1 & 0x80000000) == (imm & 0x80000000)
b7b89deb 1163 && (reg1 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1164
1165 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1166 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1167 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1168}
1169
73e65298 1170/* add imm16, an */
d2523010
JL
1171void OP_FAD00000 (insn, extension)
1172 unsigned long insn, extension;
05ccbdfd 1173{
73e65298
JL
1174 int z, c, n, v;
1175 unsigned long reg1, imm, value;
1176
9f4a551e 1177 reg1 = State.regs[REG_A0 + REG0_16 (insn)];
6e7a01c1 1178 imm = SEXT16 (insn & 0xffff);
73e65298 1179 value = reg1 + imm;
9f4a551e 1180 State.regs[REG_A0 + REG0_16 (insn)] = value;
73e65298
JL
1181
1182 z = (value == 0);
1183 n = (value & 0x80000000);
0ade484f 1184 c = (value < reg1) || (value < imm);
d657034d 1185 v = ((reg1 & 0x80000000) == (imm & 0x80000000)
b7b89deb 1186 && (reg1 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1187
1188 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1189 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1190 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1191}
1192
73e65298 1193/* add imm32, an */
d2523010
JL
1194void OP_FCD00000 (insn, extension)
1195 unsigned long insn, extension;
05ccbdfd 1196{
73e65298
JL
1197 int z, c, n, v;
1198 unsigned long reg1, imm, value;
1199
9f4a551e 1200 reg1 = State.regs[REG_A0 + REG0_16 (insn)];
7c52bf32 1201 imm = ((insn & 0xffff) << 16) + extension;
73e65298 1202 value = reg1 + imm;
9f4a551e 1203 State.regs[REG_A0 + REG0_16 (insn)] = value;
73e65298
JL
1204
1205 z = (value == 0);
1206 n = (value & 0x80000000);
0ade484f 1207 c = (value < reg1) || (value < imm);
d657034d 1208 v = ((reg1 & 0x80000000) == (imm & 0x80000000)
b7b89deb 1209 && (reg1 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1210
1211 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1212 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1213 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1214}
1215
de0dce7c 1216/* add imm8, sp */
d2523010
JL
1217void OP_F8FE00 (insn, extension)
1218 unsigned long insn, extension;
05ccbdfd 1219{
73e65298
JL
1220 unsigned long reg1, imm, value;
1221
1222 reg1 = State.regs[REG_SP];
1223 imm = SEXT8 (insn & 0xff);
1224 value = reg1 + imm;
1225 State.regs[REG_SP] = value;
05ccbdfd
JL
1226}
1227
73e65298 1228/* add imm16,sp */
d2523010
JL
1229void OP_FAFE0000 (insn, extension)
1230 unsigned long insn, extension;
05ccbdfd 1231{
73e65298
JL
1232 unsigned long reg1, imm, value;
1233
1234 reg1 = State.regs[REG_SP];
1235 imm = SEXT16 (insn & 0xffff);
1236 value = reg1 + imm;
1237 State.regs[REG_SP] = value;
05ccbdfd
JL
1238}
1239
de0dce7c 1240/* add imm32, sp */
d2523010
JL
1241void OP_FCFE0000 (insn, extension)
1242 unsigned long insn, extension;
05ccbdfd 1243{
73e65298
JL
1244 unsigned long reg1, imm, value;
1245
1246 reg1 = State.regs[REG_SP];
7c52bf32 1247 imm = ((insn & 0xffff) << 16) + extension;
73e65298
JL
1248 value = reg1 + imm;
1249 State.regs[REG_SP] = value;
05ccbdfd
JL
1250}
1251
de0dce7c 1252/* addc dm,dn */
d2523010
JL
1253void OP_F140 (insn, extension)
1254 unsigned long insn, extension;
05ccbdfd 1255{
73e65298
JL
1256 int z, c, n, v;
1257 unsigned long reg1, reg2, value;
1258
9f4a551e
JL
1259 reg1 = State.regs[REG_D0 + REG1 (insn)];
1260 reg2 = State.regs[REG_D0 + REG0 (insn)];
73e65298 1261 value = reg1 + reg2 + ((PSW & PSW_C) != 0);
9f4a551e 1262 State.regs[REG_D0 + REG0 (insn)] = value;
73e65298
JL
1263
1264 z = (value == 0);
1265 n = (value & 0x80000000);
0ade484f 1266 c = (value < reg1) || (value < reg2);
d657034d 1267 v = ((reg2 & 0x80000000) == (reg1 & 0x80000000)
b7b89deb 1268 && (reg2 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1269
1270 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1271 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1272 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1273}
1274
707641f6 1275/* sub dm, dn */
d2523010
JL
1276void OP_F100 (insn, extension)
1277 unsigned long insn, extension;
05ccbdfd 1278{
707641f6
JL
1279 int z, c, n, v;
1280 unsigned long reg1, reg2, value;
1281
9f4a551e
JL
1282 reg1 = State.regs[REG_D0 + REG1 (insn)];
1283 reg2 = State.regs[REG_D0 + REG0 (insn)];
707641f6
JL
1284 value = reg2 - reg1;
1285
1286 z = (value == 0);
1287 n = (value & 0x80000000);
216e6557 1288 c = (reg1 > reg2);
b7b89deb
JL
1289 v = ((reg2 & 0x80000000) != (reg1 & 0x80000000)
1290 && (reg2 & 0x80000000) != (value & 0x80000000));
707641f6
JL
1291
1292 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1293 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1294 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
9f4a551e 1295 State.regs[REG_D0 + REG0 (insn)] = value;
05ccbdfd
JL
1296}
1297
707641f6 1298/* sub dm, an */
d2523010
JL
1299void OP_F120 (insn, extension)
1300 unsigned long insn, extension;
05ccbdfd 1301{
707641f6
JL
1302 int z, c, n, v;
1303 unsigned long reg1, reg2, value;
1304
9f4a551e
JL
1305 reg1 = State.regs[REG_D0 + REG1 (insn)];
1306 reg2 = State.regs[REG_A0 + REG0 (insn)];
707641f6
JL
1307 value = reg2 - reg1;
1308
1309 z = (value == 0);
1310 n = (value & 0x80000000);
216e6557 1311 c = (reg1 > reg2);
b7b89deb
JL
1312 v = ((reg2 & 0x80000000) != (reg1 & 0x80000000)
1313 && (reg2 & 0x80000000) != (value & 0x80000000));
707641f6
JL
1314
1315 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1316 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1317 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
9f4a551e 1318 State.regs[REG_A0 + REG0 (insn)] = value;
05ccbdfd
JL
1319}
1320
707641f6 1321/* sub am, dn */
d2523010
JL
1322void OP_F110 (insn, extension)
1323 unsigned long insn, extension;
05ccbdfd 1324{
707641f6
JL
1325 int z, c, n, v;
1326 unsigned long reg1, reg2, value;
1327
9f4a551e
JL
1328 reg1 = State.regs[REG_A0 + REG1 (insn)];
1329 reg2 = State.regs[REG_D0 + REG0 (insn)];
707641f6
JL
1330 value = reg2 - reg1;
1331
1332 z = (value == 0);
1333 n = (value & 0x80000000);
216e6557 1334 c = (reg1 > reg2);
b7b89deb
JL
1335 v = ((reg2 & 0x80000000) != (reg1 & 0x80000000)
1336 && (reg2 & 0x80000000) != (value & 0x80000000));
707641f6
JL
1337
1338 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1339 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1340 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
9f4a551e 1341 State.regs[REG_D0 + REG0 (insn)] = value;
05ccbdfd
JL
1342}
1343
707641f6 1344/* sub am, an */
d2523010
JL
1345void OP_F130 (insn, extension)
1346 unsigned long insn, extension;
05ccbdfd 1347{
707641f6
JL
1348 int z, c, n, v;
1349 unsigned long reg1, reg2, value;
1350
9f4a551e
JL
1351 reg1 = State.regs[REG_A0 + REG1 (insn)];
1352 reg2 = State.regs[REG_A0 + REG0 (insn)];
707641f6
JL
1353 value = reg2 - reg1;
1354
1355 z = (value == 0);
1356 n = (value & 0x80000000);
216e6557 1357 c = (reg1 > reg2);
b7b89deb
JL
1358 v = ((reg2 & 0x80000000) != (reg1 & 0x80000000)
1359 && (reg2 & 0x80000000) != (value & 0x80000000));
707641f6
JL
1360
1361 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1362 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1363 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
9f4a551e 1364 State.regs[REG_A0 + REG0 (insn)] = value;
05ccbdfd
JL
1365}
1366
de0dce7c 1367/* sub imm32, dn */
d2523010
JL
1368void OP_FCC40000 (insn, extension)
1369 unsigned long insn, extension;
05ccbdfd 1370{
707641f6
JL
1371 int z, c, n, v;
1372 unsigned long reg1, imm, value;
1373
9f4a551e 1374 reg1 = State.regs[REG_D0 + REG0_16 (insn)];
7c52bf32 1375 imm = ((insn & 0xffff) << 16) + extension;
707641f6
JL
1376 value = reg1 - imm;
1377
1378 z = (value == 0);
1379 n = (value & 0x80000000);
1380 c = (reg1 < imm);
b7b89deb
JL
1381 v = ((reg1 & 0x80000000) != (imm & 0x80000000)
1382 && (reg1 & 0x80000000) != (value & 0x80000000));
707641f6
JL
1383
1384 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1385 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1386 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
9f4a551e 1387 State.regs[REG_D0 + REG0_16 (insn)] = value;
05ccbdfd
JL
1388}
1389
de0dce7c 1390/* sub imm32, an */
d2523010
JL
1391void OP_FCD40000 (insn, extension)
1392 unsigned long insn, extension;
05ccbdfd 1393{
707641f6
JL
1394 int z, c, n, v;
1395 unsigned long reg1, imm, value;
1396
9f4a551e 1397 reg1 = State.regs[REG_A0 + REG0_16 (insn)];
7c52bf32 1398 imm = ((insn & 0xffff) << 16) + extension;
707641f6
JL
1399 value = reg1 - imm;
1400
1401 z = (value == 0);
1402 n = (value & 0x80000000);
1403 c = (reg1 < imm);
b7b89deb
JL
1404 v = ((reg1 & 0x80000000) != (imm & 0x80000000)
1405 && (reg1 & 0x80000000) != (value & 0x80000000));
707641f6
JL
1406
1407 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1408 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1409 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
9f4a551e 1410 State.regs[REG_A0 + REG0_16 (insn)] = value;
05ccbdfd
JL
1411}
1412
de0dce7c 1413/* subc dm, dn */
d2523010
JL
1414void OP_F180 (insn, extension)
1415 unsigned long insn, extension;
05ccbdfd 1416{
707641f6
JL
1417 int z, c, n, v;
1418 unsigned long reg1, reg2, value;
1419
9f4a551e
JL
1420 reg1 = State.regs[REG_D0 + REG1 (insn)];
1421 reg2 = State.regs[REG_D0 + REG0 (insn)];
707641f6
JL
1422 value = reg2 - reg1 - ((PSW & PSW_C) != 0);
1423
1424 z = (value == 0);
1425 n = (value & 0x80000000);
216e6557 1426 c = (reg1 > reg2);
b7b89deb
JL
1427 v = ((reg2 & 0x80000000) != (reg1 & 0x80000000)
1428 && (reg2 & 0x80000000) != (value & 0x80000000));
707641f6
JL
1429
1430 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1431 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1432 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
9f4a551e 1433 State.regs[REG_D0 + REG0 (insn)] = value;
05ccbdfd
JL
1434}
1435
de0dce7c 1436/* mul dm, dn */
d2523010
JL
1437void OP_F240 (insn, extension)
1438 unsigned long insn, extension;
05ccbdfd 1439{
707641f6
JL
1440 unsigned long long temp;
1441 int n, z;
1442
9f4a551e
JL
1443 temp = (State.regs[REG_D0 + REG0 (insn)]
1444 * State.regs[REG_D0 + REG1 (insn)]);
1445 State.regs[REG_D0 + REG0 (insn)] = temp & 0xffffffff;
707641f6 1446 State.regs[REG_MDR] = temp & 0xffffffff00000000LL;
9f4a551e
JL
1447 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
1448 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
1449 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1450 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1451}
1452
de0dce7c 1453/* mulu dm, dn */
d2523010
JL
1454void OP_F250 (insn, extension)
1455 unsigned long insn, extension;
05ccbdfd 1456{
707641f6
JL
1457 unsigned long long temp;
1458 int n, z;
1459
9f4a551e
JL
1460 temp = (State.regs[REG_D0 + REG0 (insn)]
1461 * State.regs[REG_D0 + REG1 (insn)]);
1462 State.regs[REG_D0 + REG0 (insn)] = temp & 0xffffffff;
707641f6 1463 State.regs[REG_MDR] = temp & 0xffffffff00000000LL;
9f4a551e
JL
1464 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
1465 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
1466 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1467 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1468}
1469
de0dce7c 1470/* div dm, dn */
d2523010
JL
1471void OP_F260 (insn, extension)
1472 unsigned long insn, extension;
05ccbdfd 1473{
707641f6
JL
1474 long long temp;
1475 int n, z;
1476
1477 temp = State.regs[REG_MDR];
1478 temp <<= 32;
9f4a551e
JL
1479 temp |= State.regs[REG_D0 + REG0 (insn)];
1480 State.regs[REG_MDR] = temp % (long)State.regs[REG_D0 + REG1 (insn)];
1481 temp /= (long)State.regs[REG_D0 + REG1 (insn)];
1482 State.regs[REG_D0 + REG0 (insn)] = temp & 0xffffffff;
707641f6 1483 State.regs[REG_MDR] = temp & 0xffffffff00000000LL;
9f4a551e
JL
1484 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
1485 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
1486 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1487 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1488}
1489
de0dce7c 1490/* divu dm, dn */
d2523010
JL
1491void OP_F270 (insn, extension)
1492 unsigned long insn, extension;
05ccbdfd 1493{
707641f6
JL
1494 unsigned long long temp;
1495 int n, z;
1496
1497 temp = State.regs[REG_MDR];
1498 temp <<= 32;
9f4a551e
JL
1499 temp |= State.regs[REG_D0 + REG0 (insn)];
1500 State.regs[REG_MDR] = temp % State.regs[REG_D0 + REG1 (insn)];
1501 temp /= State.regs[REG_D0 + REG1 (insn)];
1502 State.regs[REG_D0 + REG0 (insn)] = temp & 0xffffffff;
707641f6 1503 State.regs[REG_MDR] = temp & 0xffffffff00000000LL;
9f4a551e
JL
1504 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
1505 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
1506 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1507 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1508}
1509
73e65298 1510/* inc dn */
d2523010
JL
1511void OP_40 (insn, extension)
1512 unsigned long insn, extension;
05ccbdfd 1513{
61ecca95 1514 int z,n,c,v;
4d8ced6c 1515 unsigned int value, imm, reg1;
61ecca95 1516
9f4a551e 1517 reg1 = State.regs[REG_D0 + REG1 (insn)];
4d8ced6c
JL
1518 imm = 1;
1519 value = reg1 + imm;
9f4a551e 1520 State.regs[REG_D0 + REG1 (insn)] = value;
61ecca95
JL
1521
1522 z = (value == 0);
1523 n = (value & 0x80000000);
4d8ced6c 1524 c = (reg1 < imm);
d657034d 1525 v = ((reg1 & 0x80000000) == (imm & 0x80000000)
4d8ced6c 1526 && (reg1 & 0x80000000) != (value & 0x80000000));
61ecca95
JL
1527
1528 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1529 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1530 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1531}
1532
73e65298 1533/* inc an */
d2523010
JL
1534void OP_41 (insn, extension)
1535 unsigned long insn, extension;
05ccbdfd 1536{
9f4a551e 1537 State.regs[REG_A0 + REG1 (insn)] += 1;
05ccbdfd
JL
1538}
1539
92284aaa 1540/* inc4 an */
d2523010
JL
1541void OP_50 (insn, extension)
1542 unsigned long insn, extension;
05ccbdfd 1543{
9f4a551e 1544 State.regs[REG_A0 + REG0 (insn)] += 4;
05ccbdfd
JL
1545}
1546
92284aaa 1547/* cmp imm8, dn */
d2523010
JL
1548void OP_A000 (insn, extension)
1549 unsigned long insn, extension;
05ccbdfd 1550{
92284aaa
JL
1551 int z, c, n, v;
1552 unsigned long reg1, imm, value;
1553
9f4a551e 1554 reg1 = State.regs[REG_D0 + REG0_8 (insn)];
92284aaa
JL
1555 imm = SEXT8 (insn & 0xff);
1556 value = reg1 - imm;
1557
1558 z = (value == 0);
1559 n = (value & 0x80000000);
1560 c = (reg1 < imm);
b7b89deb
JL
1561 v = ((reg1 & 0x80000000) != (imm & 0x80000000)
1562 && (reg1 & 0x80000000) != (value & 0x80000000));
92284aaa
JL
1563
1564 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1565 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1566 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1567}
1568
92284aaa 1569/* cmp dm, dn */
d2523010
JL
1570void OP_A0 (insn, extension)
1571 unsigned long insn, extension;
05ccbdfd 1572{
92284aaa
JL
1573 int z, c, n, v;
1574 unsigned long reg1, reg2, value;
1575
9f4a551e
JL
1576 reg1 = State.regs[REG_D0 + REG1 (insn)];
1577 reg2 = State.regs[REG_D0 + REG0 (insn)];
707641f6 1578 value = reg2 - reg1;
92284aaa
JL
1579
1580 z = (value == 0);
1581 n = (value & 0x80000000);
216e6557 1582 c = (reg1 > reg2);
b7b89deb
JL
1583 v = ((reg2 & 0x80000000) != (reg1 & 0x80000000)
1584 && (reg2 & 0x80000000) != (value & 0x80000000));
92284aaa
JL
1585
1586 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1587 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1588 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1589}
1590
92284aaa 1591/* cmp dm, an */
d2523010
JL
1592void OP_F1A0 (insn, extension)
1593 unsigned long insn, extension;
05ccbdfd 1594{
92284aaa
JL
1595 int z, c, n, v;
1596 unsigned long reg1, reg2, value;
1597
9f4a551e
JL
1598 reg1 = State.regs[REG_D0 + REG1 (insn)];
1599 reg2 = State.regs[REG_A0 + REG0 (insn)];
707641f6 1600 value = reg2 - reg1;
92284aaa
JL
1601
1602 z = (value == 0);
1603 n = (value & 0x80000000);
216e6557 1604 c = (reg1 > reg2);
b7b89deb
JL
1605 v = ((reg2 & 0x80000000) != (reg1 & 0x80000000)
1606 && (reg2 & 0x80000000) != (value & 0x80000000));
92284aaa
JL
1607
1608 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1609 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1610 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1611}
1612
92284aaa 1613/* cmp am, dn */
d2523010
JL
1614void OP_F190 (insn, extension)
1615 unsigned long insn, extension;
05ccbdfd 1616{
92284aaa
JL
1617 int z, c, n, v;
1618 unsigned long reg1, reg2, value;
1619
9f4a551e
JL
1620 reg1 = State.regs[REG_A0 + REG1 (insn)];
1621 reg2 = State.regs[REG_D0 + REG0 (insn)];
707641f6 1622 value = reg2 - reg1;
92284aaa
JL
1623
1624 z = (value == 0);
1625 n = (value & 0x80000000);
216e6557 1626 c = (reg1 > reg2);
b7b89deb
JL
1627 v = ((reg2 & 0x80000000) != (reg1 & 0x80000000)
1628 && (reg2 & 0x80000000) != (value & 0x80000000));
92284aaa
JL
1629
1630 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1631 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1632 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1633}
1634
92284aaa 1635/* cmp imm8, an */
d2523010
JL
1636void OP_B000 (insn, extension)
1637 unsigned long insn, extension;
05ccbdfd 1638{
92284aaa
JL
1639 int z, c, n, v;
1640 unsigned long reg1, imm, value;
1641
9f4a551e 1642 reg1 = State.regs[REG_A0 + REG0_8 (insn)];
92284aaa
JL
1643 imm = insn & 0xff;
1644 value = reg1 - imm;
1645
1646 z = (value == 0);
1647 n = (value & 0x80000000);
1648 c = (reg1 < imm);
b7b89deb
JL
1649 v = ((reg1 & 0x80000000) != (imm & 0x80000000)
1650 && (reg1 & 0x80000000) != (value & 0x80000000));
92284aaa
JL
1651
1652 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1653 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1654 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1655}
1656
707641f6 1657/* cmp am, an */
d2523010
JL
1658void OP_B0 (insn, extension)
1659 unsigned long insn, extension;
05ccbdfd 1660{
73e65298
JL
1661 int z, c, n, v;
1662 unsigned long reg1, reg2, value;
1663
9f4a551e
JL
1664 reg1 = State.regs[REG_A0 + REG1 (insn)];
1665 reg2 = State.regs[REG_A0 + REG0 (insn)];
707641f6 1666 value = reg2 - reg1;
73e65298
JL
1667
1668 z = (value == 0);
1669 n = (value & 0x80000000);
216e6557 1670 c = (reg1 > reg2);
b7b89deb
JL
1671 v = ((reg2 & 0x80000000) != (reg1 & 0x80000000)
1672 && (reg2 & 0x80000000) != (value & 0x80000000));
73e65298
JL
1673
1674 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1675 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1676 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1677}
1678
707641f6 1679/* cmp imm16, dn */
d2523010
JL
1680void OP_FAC80000 (insn, extension)
1681 unsigned long insn, extension;
05ccbdfd 1682{
92284aaa
JL
1683 int z, c, n, v;
1684 unsigned long reg1, imm, value;
1685
9f4a551e 1686 reg1 = State.regs[REG_D0 + REG0_16 (insn)];
92284aaa
JL
1687 imm = SEXT16 (insn & 0xffff);
1688 value = reg1 - imm;
1689
1690 z = (value == 0);
1691 n = (value & 0x80000000);
1692 c = (reg1 < imm);
b7b89deb
JL
1693 v = ((reg1 & 0x80000000) != (imm & 0x80000000)
1694 && (reg1 & 0x80000000) != (value & 0x80000000));
92284aaa
JL
1695
1696 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1697 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1698 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1699}
1700
707641f6 1701/* cmp imm32, dn */
d2523010
JL
1702void OP_FCC80000 (insn, extension)
1703 unsigned long insn, extension;
05ccbdfd 1704{
92284aaa
JL
1705 int z, c, n, v;
1706 unsigned long reg1, imm, value;
1707
9f4a551e 1708 reg1 = State.regs[REG_D0 + REG0_16 (insn)];
7c52bf32 1709 imm = ((insn & 0xffff) << 16) + extension;
92284aaa
JL
1710 value = reg1 - imm;
1711
1712 z = (value == 0);
1713 n = (value & 0x80000000);
1714 c = (reg1 < imm);
b7b89deb
JL
1715 v = ((reg1 & 0x80000000) != (imm & 0x80000000)
1716 && (reg1 & 0x80000000) != (value & 0x80000000));
92284aaa
JL
1717
1718 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1719 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1720 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1721}
1722
707641f6 1723/* cmp imm16, an */
d2523010
JL
1724void OP_FAD80000 (insn, extension)
1725 unsigned long insn, extension;
05ccbdfd 1726{
92284aaa
JL
1727 int z, c, n, v;
1728 unsigned long reg1, imm, value;
1729
9f4a551e 1730 reg1 = State.regs[REG_A0 + REG0_16 (insn)];
92284aaa
JL
1731 imm = insn & 0xffff;
1732 value = reg1 - imm;
1733
1734 z = (value == 0);
1735 n = (value & 0x80000000);
1736 c = (reg1 < imm);
b7b89deb
JL
1737 v = ((reg1 & 0x80000000) != (imm & 0x80000000)
1738 && (reg1 & 0x80000000) != (value & 0x80000000));
92284aaa
JL
1739
1740 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1741 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1742 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1743}
1744
707641f6 1745/* cmp imm32, an */
d2523010
JL
1746void OP_FCD80000 (insn, extension)
1747 unsigned long insn, extension;
05ccbdfd 1748{
92284aaa
JL
1749 int z, c, n, v;
1750 unsigned long reg1, imm, value;
1751
9f4a551e 1752 reg1 = State.regs[REG_A0 + REG0_16 (insn)];
7c52bf32 1753 imm = ((insn & 0xffff) << 16) + extension;
92284aaa
JL
1754 value = reg1 - imm;
1755
1756 z = (value == 0);
1757 n = (value & 0x80000000);
1758 c = (reg1 < imm);
b7b89deb
JL
1759 v = ((reg1 & 0x80000000) != (imm & 0x80000000)
1760 && (reg1 & 0x80000000) != (value & 0x80000000));
92284aaa
JL
1761
1762 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1763 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1764 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1765}
1766
707641f6 1767/* and dm, dn */
d2523010
JL
1768void OP_F200 (insn, extension)
1769 unsigned long insn, extension;
05ccbdfd 1770{
707641f6
JL
1771 int n, z;
1772
9f4a551e
JL
1773 State.regs[REG_D0 + REG0 (insn)] &= State.regs[REG_D0 + REG1 (insn)];
1774 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
1775 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
1776 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1777 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1778}
1779
2e35551c 1780/* and imm8, dn */
d2523010
JL
1781void OP_F8E000 (insn, extension)
1782 unsigned long insn, extension;
05ccbdfd 1783{
2e35551c
JL
1784 int n, z;
1785
9f4a551e
JL
1786 State.regs[REG_D0 + REG0_8 (insn)] &= (insn & 0xff);
1787 z = (State.regs[REG_D0 + REG0_8 (insn)] == 0);
1788 n = (State.regs[REG_D0 + REG0_8 (insn)] & 0x80000000) != 0;
2e35551c
JL
1789 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1790 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1791}
1792
ecb4b5a3 1793/* and imm16, dn */
d2523010
JL
1794void OP_FAE00000 (insn, extension)
1795 unsigned long insn, extension;
05ccbdfd 1796{
ecb4b5a3
JL
1797 int n, z;
1798
9f4a551e
JL
1799 State.regs[REG_D0 + REG0_16 (insn)] &= (insn & 0xffff);
1800 z = (State.regs[REG_D0 + REG0_16 (insn)] == 0);
1801 n = (State.regs[REG_D0 + REG0_16 (insn)] & 0x80000000) != 0;
ecb4b5a3
JL
1802 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1803 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1804}
1805
de0dce7c 1806/* and imm32, dn */
d2523010
JL
1807void OP_FCE00000 (insn, extension)
1808 unsigned long insn, extension;
05ccbdfd 1809{
de0dce7c
JL
1810 int n, z;
1811
9f4a551e 1812 State.regs[REG_D0 + REG0_16 (insn)]
7c52bf32 1813 &= ((insn & 0xffff) << 16) + extension;
9f4a551e
JL
1814 z = (State.regs[REG_D0 + REG0_16 (insn)] == 0);
1815 n = (State.regs[REG_D0 + REG0_16 (insn)] & 0x80000000) != 0;
de0dce7c
JL
1816 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1817 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1818}
1819
ecb4b5a3 1820/* and imm16, psw */
d2523010
JL
1821void OP_FAFC0000 (insn, extension)
1822 unsigned long insn, extension;
05ccbdfd 1823{
ecb4b5a3 1824 PSW &= (insn & 0xffff);
05ccbdfd
JL
1825}
1826
707641f6 1827/* or dm, dn*/
d2523010
JL
1828void OP_F210 (insn, extension)
1829 unsigned long insn, extension;
05ccbdfd 1830{
707641f6
JL
1831 int n, z;
1832
9f4a551e
JL
1833 State.regs[REG_D0 + REG0 (insn)] |= State.regs[REG_D0 + REG1 (insn)];
1834 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
1835 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
1836 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1837 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1838}
1839
2e35551c 1840/* or imm8, dn */
d2523010
JL
1841void OP_F8E400 (insn, extension)
1842 unsigned long insn, extension;
05ccbdfd 1843{
2e35551c
JL
1844 int n, z;
1845
9f4a551e
JL
1846 State.regs[REG_D0 + REG0_8 (insn)] |= insn & 0xff;
1847 z = (State.regs[REG_D0 + REG0_8 (insn)] == 0);
1848 n = (State.regs[REG_D0 + REG0_8 (insn)] & 0x80000000) != 0;
2e35551c
JL
1849 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1850 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1851}
1852
ecb4b5a3 1853/* or imm16, dn*/
d2523010
JL
1854void OP_FAE40000 (insn, extension)
1855 unsigned long insn, extension;
05ccbdfd 1856{
ecb4b5a3
JL
1857 int n, z;
1858
9f4a551e
JL
1859 State.regs[REG_D0 + REG0_16 (insn)] |= insn & 0xffff;
1860 z = (State.regs[REG_D0 + REG0_16 (insn)] == 0);
1861 n = (State.regs[REG_D0 + REG0_16 (insn)] & 0x80000000) != 0;
ecb4b5a3
JL
1862 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1863 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1864}
1865
de0dce7c 1866/* or imm32, dn */
d2523010
JL
1867void OP_FCE40000 (insn, extension)
1868 unsigned long insn, extension;
05ccbdfd 1869{
de0dce7c
JL
1870 int n, z;
1871
9f4a551e 1872 State.regs[REG_D0 + REG0_16 (insn)]
7c52bf32 1873 |= ((insn & 0xffff) << 16) + extension;
9f4a551e
JL
1874 z = (State.regs[REG_D0 + REG0_16 (insn)] == 0);
1875 n = (State.regs[REG_D0 + REG0_16 (insn)] & 0x80000000) != 0;
de0dce7c
JL
1876 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1877 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1878}
1879
ecb4b5a3 1880/* or imm16,psw */
d2523010
JL
1881void OP_FAFD0000 (insn, extension)
1882 unsigned long insn, extension;
05ccbdfd 1883{
ecb4b5a3 1884 PSW |= (insn & 0xffff);
05ccbdfd
JL
1885}
1886
707641f6 1887/* xor dm, dn*/
d2523010
JL
1888void OP_F220 (insn, extension)
1889 unsigned long insn, extension;
05ccbdfd 1890{
707641f6
JL
1891 int n, z;
1892
9f4a551e
JL
1893 State.regs[REG_D0 + REG0 (insn)] ^= State.regs[REG_D0 + REG1 (insn)];
1894 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
1895 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
1896 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1897 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1898}
1899
ecb4b5a3 1900/* xor imm16, dn */
d2523010
JL
1901void OP_FAE80000 (insn, extension)
1902 unsigned long insn, extension;
05ccbdfd 1903{
ecb4b5a3
JL
1904 int n, z;
1905
9f4a551e
JL
1906 State.regs[REG_D0 + REG0_16 (insn)] ^= insn & 0xffff;
1907 z = (State.regs[REG_D0 + REG0_16 (insn)] == 0);
1908 n = (State.regs[REG_D0 + REG0_16 (insn)] & 0x80000000) != 0;
ecb4b5a3
JL
1909 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1910 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1911}
1912
de0dce7c 1913/* xor imm32, dn */
d2523010
JL
1914void OP_FCE80000 (insn, extension)
1915 unsigned long insn, extension;
05ccbdfd 1916{
de0dce7c
JL
1917 int n, z;
1918
9f4a551e 1919 State.regs[REG_D0 + REG0_16 (insn)]
7c52bf32 1920 ^= ((insn & 0xffff) << 16) + extension;
9f4a551e
JL
1921 z = (State.regs[REG_D0 + REG0_16 (insn)] == 0);
1922 n = (State.regs[REG_D0 + REG0_16 (insn)] & 0x80000000) != 0;
de0dce7c
JL
1923 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1924 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1925}
1926
de0dce7c 1927/* not dn */
d2523010
JL
1928void OP_F230 (insn, extension)
1929 unsigned long insn, extension;
05ccbdfd 1930{
707641f6
JL
1931 int n, z;
1932
9f4a551e
JL
1933 State.regs[REG_D0 + REG0 (insn)] = ~State.regs[REG_D0 + REG0 (insn)];
1934 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
1935 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
1936 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1937 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
1938}
1939
2e35551c 1940/* btst imm8, dn */
d2523010
JL
1941void OP_F8EC00 (insn, extension)
1942 unsigned long insn, extension;
05ccbdfd 1943{
2e35551c
JL
1944 unsigned long temp;
1945 int z, n;
1946
9f4a551e 1947 temp = State.regs[REG_D0 + REG0_8 (insn)];
2e35551c
JL
1948 temp &= (insn & 0xff);
1949 n = (temp & 0x80000000) != 0;
1950 z = (temp == 0);
1951 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1952 PSW |= (z ? PSW_Z : 0) | (n ? PSW_N : 0);
05ccbdfd
JL
1953}
1954
ecb4b5a3 1955/* btst imm16, dn */
d2523010
JL
1956void OP_FAEC0000 (insn, extension)
1957 unsigned long insn, extension;
05ccbdfd 1958{
ecb4b5a3
JL
1959 unsigned long temp;
1960 int z, n;
1961
9f4a551e 1962 temp = State.regs[REG_D0 + REG0_16 (insn)];
ecb4b5a3
JL
1963 temp &= (insn & 0xffff);
1964 n = (temp & 0x80000000) != 0;
1965 z = (temp == 0);
1966 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1967 PSW |= (z ? PSW_Z : 0) | (n ? PSW_N : 0);
05ccbdfd
JL
1968}
1969
de0dce7c 1970/* btst imm32, dn */
d2523010
JL
1971void OP_FCEC0000 (insn, extension)
1972 unsigned long insn, extension;
05ccbdfd 1973{
de0dce7c
JL
1974 unsigned long temp;
1975 int z, n;
1976
9f4a551e 1977 temp = State.regs[REG_D0 + REG0_16 (insn)];
7c52bf32 1978 temp &= ((insn & 0xffff) << 16) + extension;
de0dce7c
JL
1979 n = (temp & 0x80000000) != 0;
1980 z = (temp == 0);
1981 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1982 PSW |= (z ? PSW_Z : 0) | (n ? PSW_N : 0);
05ccbdfd
JL
1983}
1984
de0dce7c 1985/* btst imm8,(abs32) */
d2523010
JL
1986void OP_FE020000 (insn, extension)
1987 unsigned long insn, extension;
05ccbdfd 1988{
de0dce7c
JL
1989 unsigned long temp;
1990 int n, z;
1991
1992 temp = load_mem (((insn & 0xffff) << 16) | (extension >> 8), 1);
1993 temp &= (extension & 0xff);
1994 n = (temp & 0x80000000) != 0;
1995 z = (temp == 0);
1996 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1997 PSW |= (z ? PSW_Z : 0) | (n ? PSW_N : 0);
05ccbdfd
JL
1998}
1999
ecb4b5a3 2000/* btst imm8,(d8,an) */
d2523010
JL
2001void OP_FAF80000 (insn, extension)
2002 unsigned long insn, extension;
05ccbdfd 2003{
ecb4b5a3
JL
2004 unsigned long temp;
2005 int n, z;
2006
9f4a551e 2007 temp = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3
JL
2008 + SEXT8 ((insn & 0xff00) >> 8)), 1);
2009 temp &= (insn & 0xff);
2010 n = (temp & 0x80000000) != 0;
2011 z = (temp == 0);
2012 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2013 PSW |= (z ? PSW_Z : 0) | (n ? PSW_N : 0);
05ccbdfd
JL
2014}
2015
707641f6 2016/* bset dm, (an) */
d2523010
JL
2017void OP_F080 (insn, extension)
2018 unsigned long insn, extension;
05ccbdfd 2019{
707641f6
JL
2020 unsigned long temp;
2021 int z;
2022
2da0bc1b 2023 temp = load_mem (State.regs[REG_A0 + REG0 (insn)], 1);
9f4a551e
JL
2024 z = (temp & State.regs[REG_D0 + REG1 (insn)]) == 0;
2025 temp |= State.regs[REG_D0 + REG1 (insn)];
2da0bc1b 2026 store_mem (State.regs[REG_A0 + REG0 (insn)], 1, temp);
707641f6
JL
2027 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2028 PSW |= (z ? PSW_Z : 0);
05ccbdfd
JL
2029}
2030
de0dce7c 2031/* bset imm8, (abs32) */
d2523010
JL
2032void OP_FE000000 (insn, extension)
2033 unsigned long insn, extension;
05ccbdfd 2034{
de0dce7c
JL
2035 unsigned long temp;
2036 int z;
2037
2038 temp = load_mem (((insn & 0xffff) << 16 | (extension >> 8)), 1);
2039 z = (temp & (extension & 0xff)) == 0;
2040 temp |= (extension & 0xff);
2041 store_mem ((((insn & 0xffff) << 16) | (extension >> 8)), 1, temp);
2042 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2043 PSW |= (z ? PSW_Z : 0);
05ccbdfd
JL
2044}
2045
ecb4b5a3 2046/* bset imm8,(d8,an) */
d2523010
JL
2047void OP_FAF00000 (insn, extension)
2048 unsigned long insn, extension;
05ccbdfd 2049{
ecb4b5a3
JL
2050 unsigned long temp;
2051 int z;
2052
9f4a551e 2053 temp = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3
JL
2054 + SEXT8 ((insn & 0xff00) >> 8)), 1);
2055 z = (temp & (insn & 0xff)) == 0;
2056 temp |= (insn & 0xff);
09eef8af
JL
2057 store_mem ((State.regs[REG_A0 + REG0_16 (insn)]
2058 + SEXT8 ((insn & 0xff00) >> 8)), 1, temp);
ecb4b5a3
JL
2059 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2060 PSW |= (z ? PSW_Z : 0);
05ccbdfd
JL
2061}
2062
707641f6 2063/* bclr dm, (an) */
d2523010
JL
2064void OP_F090 (insn, extension)
2065 unsigned long insn, extension;
05ccbdfd 2066{
707641f6
JL
2067 unsigned long temp;
2068 int z;
2069
2da0bc1b 2070 temp = load_mem (State.regs[REG_A0 + REG0 (insn)], 1);
9f4a551e 2071 z = (temp & State.regs[REG_D0 + REG1 (insn)]) == 0;
09eef8af 2072 temp = temp & ~State.regs[REG_D0 + REG1 (insn)];
2da0bc1b 2073 store_mem (State.regs[REG_A0 + REG0 (insn)], 1, temp);
707641f6
JL
2074 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2075 PSW |= (z ? PSW_Z : 0);
05ccbdfd
JL
2076}
2077
de0dce7c 2078/* bclr imm8, (abs32) */
d2523010
JL
2079void OP_FE010000 (insn, extension)
2080 unsigned long insn, extension;
05ccbdfd 2081{
de0dce7c
JL
2082 unsigned long temp;
2083 int z;
2084
2085 temp = load_mem (((insn & 0xffff) << 16) | (extension >> 8), 1);
2086 z = (temp & (extension & 0xff)) == 0;
09eef8af 2087 temp = temp & ~(extension & 0xff);
de0dce7c
JL
2088 store_mem (((insn & 0xffff) << 16) | (extension >> 8), 1, temp);
2089 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2090 PSW |= (z ? PSW_Z : 0);
05ccbdfd
JL
2091}
2092
ecb4b5a3 2093/* bclr imm8,(d8,an) */
d2523010
JL
2094void OP_FAF40000 (insn, extension)
2095 unsigned long insn, extension;
05ccbdfd 2096{
ecb4b5a3
JL
2097 unsigned long temp;
2098 int z;
2099
9f4a551e 2100 temp = load_mem ((State.regs[REG_A0 + REG0_16 (insn)]
ecb4b5a3
JL
2101 + SEXT8 ((insn & 0xff00) >> 8)), 1);
2102 z = (temp & (insn & 0xff)) == 0;
09eef8af
JL
2103 temp = temp & ~(insn & 0xff);
2104 store_mem ((State.regs[REG_A0 + REG0_16 (insn)]
2105 + SEXT8 ((insn & 0xff00) >> 8)), 1, temp);
ecb4b5a3
JL
2106 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2107 PSW |= (z ? PSW_Z : 0);
05ccbdfd
JL
2108}
2109
2e35551c 2110/* asr dm, dn */
d2523010
JL
2111void OP_F2B0 (insn, extension)
2112 unsigned long insn, extension;
05ccbdfd 2113{
707641f6
JL
2114 long temp;
2115 int z, n, c;
2116
9f4a551e 2117 temp = State.regs[REG_D0 + REG0 (insn)];
707641f6 2118 c = temp & 1;
9f4a551e
JL
2119 temp >>= State.regs[REG_D0 + REG1 (insn)];
2120 State.regs[REG_D0 + REG0 (insn)] = temp;
2121 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
2122 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
2123 PSW &= ~(PSW_Z | PSW_N | PSW_C);
2124 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
05ccbdfd
JL
2125}
2126
2e35551c 2127/* asr imm8, dn */
d2523010
JL
2128void OP_F8C800 (insn, extension)
2129 unsigned long insn, extension;
05ccbdfd 2130{
2e35551c
JL
2131 long temp;
2132 int z, n, c;
2133
9f4a551e 2134 temp = State.regs[REG_D0 + REG0_8 (insn)];
2e35551c
JL
2135 c = temp & 1;
2136 temp >>= (insn & 0xff);
9f4a551e
JL
2137 State.regs[REG_D0 + REG0_8 (insn)] = temp;
2138 z = (State.regs[REG_D0 + REG0_8 (insn)] == 0);
2139 n = (State.regs[REG_D0 + REG0_8 (insn)] & 0x80000000) != 0;
2e35551c
JL
2140 PSW &= ~(PSW_Z | PSW_N | PSW_C);
2141 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
05ccbdfd
JL
2142}
2143
2e35551c 2144/* lsr dm, dn */
d2523010
JL
2145void OP_F2A0 (insn, extension)
2146 unsigned long insn, extension;
05ccbdfd 2147{
707641f6
JL
2148 int z, n, c;
2149
9f4a551e
JL
2150 c = State.regs[REG_D0 + REG0 (insn)] & 1;
2151 State.regs[REG_D0 + REG0 (insn)]
2152 >>= State.regs[REG_D0 + REG1 (insn)];
2153 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
2154 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
2155 PSW &= ~(PSW_Z | PSW_N | PSW_C);
2156 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
05ccbdfd
JL
2157}
2158
43eb4bed 2159/* lsr imm8, dn */
d2523010
JL
2160void OP_F8C400 (insn, extension)
2161 unsigned long insn, extension;
05ccbdfd 2162{
2e35551c
JL
2163 int z, n, c;
2164
9f4a551e
JL
2165 c = State.regs[REG_D0 + REG0_8 (insn)] & 1;
2166 State.regs[REG_D0 + REG0_8 (insn)] >>= (insn & 0xff);
43eb4bed
JL
2167 z = (State.regs[REG_D0 + REG0_8 (insn)] == 0);
2168 n = (State.regs[REG_D0 + REG0_8 (insn)] & 0x80000000) != 0;
2e35551c
JL
2169 PSW &= ~(PSW_Z | PSW_N | PSW_C);
2170 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
05ccbdfd
JL
2171}
2172
2e35551c 2173/* asl dm, dn */
d2523010
JL
2174void OP_F290 (insn, extension)
2175 unsigned long insn, extension;
05ccbdfd 2176{
707641f6
JL
2177 int n, z;
2178
9f4a551e
JL
2179 State.regs[REG_D0 + REG0 (insn)]
2180 <<= State.regs[REG_D0 + REG1 (insn)];
2181 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
2182 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
2183 PSW &= ~(PSW_Z | PSW_N);
2184 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
2185}
2186
2e35551c 2187/* asl imm8, dn */
d2523010
JL
2188void OP_F8C000 (insn, extension)
2189 unsigned long insn, extension;
05ccbdfd 2190{
2e35551c
JL
2191 int n, z;
2192
9f4a551e
JL
2193 State.regs[REG_D0 + REG0_8 (insn)] <<= (insn & 0xff);
2194 z = (State.regs[REG_D0 + REG0_8 (insn)] == 0);
2195 n = (State.regs[REG_D0 + REG0_8 (insn)] & 0x80000000) != 0;
2e35551c
JL
2196 PSW &= ~(PSW_Z | PSW_N);
2197 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
2198}
2199
707641f6 2200/* asl2 dn */
d2523010
JL
2201void OP_54 (insn, extension)
2202 unsigned long insn, extension;
05ccbdfd 2203{
707641f6
JL
2204 int n, z;
2205
9f4a551e
JL
2206 State.regs[REG_D0 + REG0 (insn)] <<= 2;
2207 z = (State.regs[REG_D0 + REG0 (insn)] == 0);
2208 n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;
707641f6
JL
2209 PSW &= ~(PSW_Z | PSW_N);
2210 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
05ccbdfd
JL
2211}
2212
707641f6 2213/* ror dn */
d2523010
JL
2214void OP_F284 (insn, extension)
2215 unsigned long insn, extension;
05ccbdfd 2216{
707641f6
JL
2217 unsigned long value;
2218 int c,n,z;
2219
9f4a551e 2220 value = State.regs[REG_D0 + REG0 (insn)];
7c52bf32 2221 c = (value & 0x1);
707641f6
JL
2222
2223 value >>= 1;
f95251f0 2224 value |= ((PSW & PSW_C) != 0) ? 0x80000000 : 0;
9f4a551e 2225 State.regs[REG_D0 + REG0 (insn)] = value;
707641f6 2226 z = (value == 0);
b7b89deb 2227 n = (value & 0x80000000) != 0;
707641f6
JL
2228 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2229 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
05ccbdfd
JL
2230}
2231
707641f6 2232/* rol dn */
d2523010
JL
2233void OP_F280 (insn, extension)
2234 unsigned long insn, extension;
05ccbdfd 2235{
707641f6
JL
2236 unsigned long value;
2237 int c,n,z;
2238
9f4a551e 2239 value = State.regs[REG_D0 + REG0 (insn)];
7c52bf32 2240 c = (value & 0x80000000) ? 1 : 0;
707641f6
JL
2241
2242 value <<= 1;
f95251f0 2243 value |= ((PSW & PSW_C) != 0);
9f4a551e 2244 State.regs[REG_D0 + REG0 (insn)] = value;
707641f6 2245 z = (value == 0);
b7b89deb 2246 n = (value & 0x80000000) != 0;
707641f6
JL
2247 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2248 PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
05ccbdfd
JL
2249}
2250
f5f13c1d 2251/* beq label:8 */
d2523010
JL
2252void OP_C800 (insn, extension)
2253 unsigned long insn, extension;
05ccbdfd 2254{
73e65298
JL
2255 /* The dispatching code will add 2 after we return, so
2256 we subtract two here to make things right. */
2257 if (PSW & PSW_Z)
b774c0e4 2258 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2259}
2260
f5f13c1d 2261/* bne label:8 */
d2523010
JL
2262void OP_C900 (insn, extension)
2263 unsigned long insn, extension;
05ccbdfd 2264{
73e65298
JL
2265 /* The dispatching code will add 2 after we return, so
2266 we subtract two here to make things right. */
2267 if (!(PSW & PSW_Z))
b774c0e4 2268 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2269}
2270
f5f13c1d 2271/* bgt label:8 */
d2523010
JL
2272void OP_C100 (insn, extension)
2273 unsigned long insn, extension;
05ccbdfd 2274{
f5f13c1d
JL
2275 /* The dispatching code will add 2 after we return, so
2276 we subtract two here to make things right. */
2277 if (!((PSW & PSW_Z)
7c52bf32 2278 || (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0))))
b774c0e4 2279 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2280}
2281
f5f13c1d 2282/* bge label:8 */
d2523010
JL
2283void OP_C200 (insn, extension)
2284 unsigned long insn, extension;
05ccbdfd 2285{
f5f13c1d
JL
2286 /* The dispatching code will add 2 after we return, so
2287 we subtract two here to make things right. */
7c52bf32 2288 if (!(((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0)))
b774c0e4 2289 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2290}
2291
f5f13c1d 2292/* ble label:8 */
d2523010
JL
2293void OP_C300 (insn, extension)
2294 unsigned long insn, extension;
05ccbdfd 2295{
f5f13c1d
JL
2296 /* The dispatching code will add 2 after we return, so
2297 we subtract two here to make things right. */
2298 if ((PSW & PSW_Z)
7c52bf32 2299 || (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0)))
b774c0e4 2300 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2301}
2302
f5f13c1d 2303/* blt label:8 */
d2523010
JL
2304void OP_C000 (insn, extension)
2305 unsigned long insn, extension;
05ccbdfd 2306{
f5f13c1d
JL
2307 /* The dispatching code will add 2 after we return, so
2308 we subtract two here to make things right. */
7c52bf32 2309 if (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0))
b774c0e4 2310 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2311}
2312
f5f13c1d 2313/* bhi label:8 */
d2523010
JL
2314void OP_C500 (insn, extension)
2315 unsigned long insn, extension;
05ccbdfd 2316{
f5f13c1d
JL
2317 /* The dispatching code will add 2 after we return, so
2318 we subtract two here to make things right. */
2319 if (!(((PSW & PSW_C) != 0) || (PSW & PSW_Z) != 0))
b774c0e4 2320 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2321}
2322
f5f13c1d 2323/* bcc label:8 */
d2523010
JL
2324void OP_C600 (insn, extension)
2325 unsigned long insn, extension;
05ccbdfd 2326{
f5f13c1d
JL
2327 /* The dispatching code will add 2 after we return, so
2328 we subtract two here to make things right. */
2329 if (!(PSW & PSW_C))
b774c0e4 2330 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2331}
2332
f5f13c1d 2333/* bls label:8 */
d2523010
JL
2334void OP_C700 (insn, extension)
2335 unsigned long insn, extension;
05ccbdfd 2336{
f5f13c1d
JL
2337 /* The dispatching code will add 2 after we return, so
2338 we subtract two here to make things right. */
2339 if (((PSW & PSW_C) != 0) || (PSW & PSW_Z) != 0)
b774c0e4 2340 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2341}
2342
f5f13c1d 2343/* bcs label:8 */
d2523010
JL
2344void OP_C400 (insn, extension)
2345 unsigned long insn, extension;
05ccbdfd 2346{
f5f13c1d
JL
2347 /* The dispatching code will add 2 after we return, so
2348 we subtract two here to make things right. */
2349 if (PSW & PSW_C)
b774c0e4 2350 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2351}
2352
f5f13c1d 2353/* bvc label:8 */
d2523010
JL
2354void OP_F8E800 (insn, extension)
2355 unsigned long insn, extension;
05ccbdfd 2356{
f5f13c1d
JL
2357 /* The dispatching code will add 3 after we return, so
2358 we subtract two here to make things right. */
2359 if (!(PSW & PSW_V))
b774c0e4 2360 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 3;
05ccbdfd
JL
2361}
2362
f5f13c1d 2363/* bvs label:8 */
d2523010
JL
2364void OP_F8E900 (insn, extension)
2365 unsigned long insn, extension;
05ccbdfd 2366{
f5f13c1d
JL
2367 /* The dispatching code will add 3 after we return, so
2368 we subtract two here to make things right. */
2369 if (PSW & PSW_V)
b774c0e4 2370 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 3;
05ccbdfd
JL
2371}
2372
f5f13c1d 2373/* bnc label:8 */
d2523010
JL
2374void OP_F8EA00 (insn, extension)
2375 unsigned long insn, extension;
05ccbdfd 2376{
f5f13c1d
JL
2377 /* The dispatching code will add 3 after we return, so
2378 we subtract two here to make things right. */
2379 if (!(PSW & PSW_N))
b774c0e4 2380 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 3;
05ccbdfd
JL
2381}
2382
f5f13c1d 2383/* bns label:8 */
d2523010
JL
2384void OP_F8EB00 (insn, extension)
2385 unsigned long insn, extension;
05ccbdfd 2386{
f5f13c1d
JL
2387 /* The dispatching code will add 3 after we return, so
2388 we subtract two here to make things right. */
2389 if (PSW & PSW_N)
b774c0e4 2390 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 3;
05ccbdfd
JL
2391}
2392
f5f13c1d 2393/* bra label:8 */
d2523010
JL
2394void OP_CA00 (insn, extension)
2395 unsigned long insn, extension;
05ccbdfd 2396{
f5f13c1d
JL
2397 /* The dispatching code will add 2 after we return, so
2398 we subtract two here to make things right. */
b774c0e4 2399 State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
2400}
2401
2402/* leq */
d2523010
JL
2403void OP_D8 (insn, extension)
2404 unsigned long insn, extension;
05ccbdfd 2405{
f5f13c1d 2406 abort ();
05ccbdfd
JL
2407}
2408
2409/* lne */
d2523010
JL
2410void OP_D9 (insn, extension)
2411 unsigned long insn, extension;
05ccbdfd 2412{
f5f13c1d 2413 abort ();
05ccbdfd
JL
2414}
2415
2416/* lgt */
d2523010
JL
2417void OP_D1 (insn, extension)
2418 unsigned long insn, extension;
05ccbdfd 2419{
f5f13c1d 2420 abort ();
05ccbdfd
JL
2421}
2422
2423/* lge */
d2523010
JL
2424void OP_D2 (insn, extension)
2425 unsigned long insn, extension;
05ccbdfd 2426{
f5f13c1d 2427 abort ();
05ccbdfd
JL
2428}
2429
2430/* lle */
d2523010
JL
2431void OP_D3 (insn, extension)
2432 unsigned long insn, extension;
05ccbdfd 2433{
f5f13c1d 2434 abort ();
05ccbdfd
JL
2435}
2436
2437/* llt */
d2523010
JL
2438void OP_D0 (insn, extension)
2439 unsigned long insn, extension;
05ccbdfd 2440{
f5f13c1d 2441 abort ();
05ccbdfd
JL
2442}
2443
2444/* lhi */
d2523010
JL
2445void OP_D5 (insn, extension)
2446 unsigned long insn, extension;
05ccbdfd 2447{
f5f13c1d 2448 abort ();
05ccbdfd
JL
2449}
2450
2451/* lcc */
d2523010
JL
2452void OP_D6 (insn, extension)
2453 unsigned long insn, extension;
05ccbdfd 2454{
f5f13c1d 2455 abort ();
05ccbdfd
JL
2456}
2457
2458/* lls */
d2523010
JL
2459void OP_D7 (insn, extension)
2460 unsigned long insn, extension;
05ccbdfd 2461{
f5f13c1d 2462 abort ();
05ccbdfd
JL
2463}
2464
2465/* lcs */
d2523010
JL
2466void OP_D4 (insn, extension)
2467 unsigned long insn, extension;
05ccbdfd 2468{
f5f13c1d 2469 abort ();
05ccbdfd
JL
2470}
2471
2472/* lra */
d2523010
JL
2473void OP_DA (insn, extension)
2474 unsigned long insn, extension;
05ccbdfd 2475{
f5f13c1d 2476 abort ();
05ccbdfd
JL
2477}
2478
2479/* setlb */
d2523010
JL
2480void OP_DB (insn, extension)
2481 unsigned long insn, extension;
05ccbdfd 2482{
f5f13c1d 2483 abort ();
05ccbdfd
JL
2484}
2485
707641f6 2486/* jmp (an) */
d2523010
JL
2487void OP_F0F4 (insn, extension)
2488 unsigned long insn, extension;
05ccbdfd 2489{
b774c0e4 2490 State.regs[REG_PC] = State.regs[REG_A0 + REG0 (insn)] - 2;
05ccbdfd
JL
2491}
2492
707641f6 2493/* jmp label:16 */
d2523010
JL
2494void OP_CC0000 (insn, extension)
2495 unsigned long insn, extension;
05ccbdfd 2496{
b774c0e4 2497 State.regs[REG_PC] += SEXT16 (insn & 0xffff) - 3;
05ccbdfd
JL
2498}
2499
707641f6 2500/* jmp label:32 */
d2523010
JL
2501void OP_DC000000 (insn, extension)
2502 unsigned long insn, extension;
05ccbdfd 2503{
b774c0e4 2504 State.regs[REG_PC] += (((insn & 0xffffff) << 8) + extension) - 5;
05ccbdfd
JL
2505}
2506
707641f6 2507/* call label:16,reg_list,imm8 */
d2523010
JL
2508void OP_CD000000 (insn, extension)
2509 unsigned long insn, extension;
05ccbdfd 2510{
707641f6
JL
2511 unsigned int next_pc, sp, adjust;
2512 unsigned long mask;
2513
2514 sp = State.regs[REG_SP];
b774c0e4 2515 next_pc = State.regs[REG_PC] + 2;
707641f6 2516 State.mem[sp] = next_pc & 0xff;
3bb3fe44
JL
2517 State.mem[sp+1] = (next_pc & 0xff00) >> 8;
2518 State.mem[sp+2] = (next_pc & 0xff0000) >> 16;
2519 State.mem[sp+3] = (next_pc & 0xff000000) >> 24;
707641f6
JL
2520
2521 mask = insn & 0xff;
2522
2523 adjust = 0;
2524 if (mask & 0x80)
2525 {
2526 adjust -= 4;
2527 State.regs[REG_D0 + 2] = load_mem (sp + adjust, 4);
2528 }
2529
2530 if (mask & 0x40)
2531 {
2532 adjust -= 4;
2533 State.regs[REG_D0 + 3] = load_mem (sp + adjust, 4);
2534 }
2535
2536 if (mask & 0x20)
2537 {
2538 adjust -= 4;
2539 State.regs[REG_A0 + 2] = load_mem (sp + adjust, 4);
2540 }
2541
2542 if (mask & 0x10)
2543 {
2544 adjust -= 4;
2545 State.regs[REG_A0 + 3] = load_mem (sp + adjust, 4);
2546 }
2547
2548 if (mask & 0x8)
2549 {
2550 adjust -= 4;
2551 State.regs[REG_D0] = load_mem (sp + adjust, 4);
2552 adjust -= 4;
2553 State.regs[REG_D0 + 1] = load_mem (sp + adjust, 4);
2554 adjust -= 4;
2555 State.regs[REG_A0] = load_mem (sp + adjust, 4);
2556 adjust -= 4;
2557 State.regs[REG_A0 + 1] = load_mem (sp + adjust, 4);
2558 adjust -= 4;
2559 State.regs[REG_MDR] = load_mem (sp + adjust, 4);
2560 adjust -= 4;
2561 State.regs[REG_LIR] = load_mem (sp + adjust, 4);
2562 adjust -= 4;
2563 State.regs[REG_LAR] = load_mem (sp + adjust, 4);
2564 adjust -= 4;
2565 }
2566
2567 /* And make sure to update the stack pointer. */
2568 State.regs[REG_SP] -= extension;
2569 State.regs[REG_MDR] = next_pc;
b774c0e4 2570 State.regs[REG_PC] += SEXT16 ((insn & 0xffff00) >> 8) - 5;
05ccbdfd
JL
2571}
2572
707641f6 2573/* call label:32,reg_list,imm8*/
d2523010
JL
2574void OP_DD000000 (insn, extension)
2575 unsigned long insn, extension;
05ccbdfd 2576{
707641f6
JL
2577 unsigned int next_pc, sp, adjust;
2578 unsigned long mask;
2579
2580 sp = State.regs[REG_SP];
b774c0e4 2581 next_pc = State.regs[REG_PC] + 2;
707641f6 2582 State.mem[sp] = next_pc & 0xff;
3bb3fe44
JL
2583 State.mem[sp+1] = (next_pc & 0xff00) >> 8;
2584 State.mem[sp+2] = (next_pc & 0xff0000) >> 16;
2585 State.mem[sp+3] = (next_pc & 0xff000000) >> 24;
707641f6
JL
2586
2587 mask = (extension & 0xff00) >> 8;
2588
2589 adjust = 0;
2590 if (mask & 0x80)
2591 {
2592 adjust -= 4;
2593 State.regs[REG_D0 + 2] = load_mem (sp + adjust, 4);
2594 }
2595
2596 if (mask & 0x40)
2597 {
2598 adjust -= 4;
2599 State.regs[REG_D0 + 3] = load_mem (sp + adjust, 4);
2600 }
2601
2602 if (mask & 0x20)
2603 {
2604 adjust -= 4;
2605 State.regs[REG_A0 + 2] = load_mem (sp + adjust, 4);
2606 }
2607
2608 if (mask & 0x10)
2609 {
2610 adjust -= 4;
2611 State.regs[REG_A0 + 3] = load_mem (sp + adjust, 4);
2612 }
2613
2614 if (mask & 0x8)
2615 {
2616 adjust -= 4;
2617 State.regs[REG_D0] = load_mem (sp + adjust, 4);
2618 adjust -= 4;
2619 State.regs[REG_D0 + 1] = load_mem (sp + adjust, 4);
2620 adjust -= 4;
2621 State.regs[REG_A0] = load_mem (sp + adjust, 4);
2622 adjust -= 4;
2623 State.regs[REG_A0 + 1] = load_mem (sp + adjust, 4);
2624 adjust -= 4;
2625 State.regs[REG_MDR] = load_mem (sp + adjust, 4);
2626 adjust -= 4;
2627 State.regs[REG_LIR] = load_mem (sp + adjust, 4);
2628 adjust -= 4;
2629 State.regs[REG_LAR] = load_mem (sp + adjust, 4);
2630 adjust -= 4;
2631 }
2632
2633 /* And make sure to update the stack pointer. */
2634 State.regs[REG_SP] -= (extension & 0xff);
2635 State.regs[REG_MDR] = next_pc;
b774c0e4 2636 State.regs[REG_PC] += (((insn & 0xffffff) << 8) | ((extension & 0xff0000) >> 16)) - 7;
05ccbdfd
JL
2637}
2638
707641f6 2639/* calls (an) */
d2523010
JL
2640void OP_F0F0 (insn, extension)
2641 unsigned long insn, extension;
05ccbdfd 2642{
92284aaa
JL
2643 unsigned int next_pc, sp;
2644
2645 sp = State.regs[REG_SP];
b774c0e4 2646 next_pc = State.regs[REG_PC] + 2;
92284aaa 2647 State.mem[sp] = next_pc & 0xff;
3bb3fe44
JL
2648 State.mem[sp+1] = (next_pc & 0xff00) >> 8;
2649 State.mem[sp+2] = (next_pc & 0xff0000) >> 16;
2650 State.mem[sp+3] = (next_pc & 0xff000000) >> 24;
92284aaa 2651 State.regs[REG_MDR] = next_pc;
b774c0e4 2652 State.regs[REG_PC] = State.regs[REG_A0 + REG0 (insn)] - 2;
05ccbdfd
JL
2653}
2654
707641f6 2655/* calls label:16 */
d2523010
JL
2656void OP_FAFF0000 (insn, extension)
2657 unsigned long insn, extension;
05ccbdfd 2658{
92284aaa
JL
2659 unsigned int next_pc, sp;
2660
2661 sp = State.regs[REG_SP];
b774c0e4 2662 next_pc = State.regs[REG_PC] + 4;
92284aaa 2663 State.mem[sp] = next_pc & 0xff;
3bb3fe44
JL
2664 State.mem[sp+1] = (next_pc & 0xff00) >> 8;
2665 State.mem[sp+2] = (next_pc & 0xff0000) >> 16;
2666 State.mem[sp+3] = (next_pc & 0xff000000) >> 24;
92284aaa 2667 State.regs[REG_MDR] = next_pc;
b774c0e4 2668 State.regs[REG_PC] += SEXT16 (insn & 0xffff) - 4;
05ccbdfd
JL
2669}
2670
707641f6 2671/* calls label:32 */
d2523010
JL
2672void OP_FCFF0000 (insn, extension)
2673 unsigned long insn, extension;
05ccbdfd 2674{
92284aaa
JL
2675 unsigned int next_pc, sp;
2676
2677 sp = State.regs[REG_SP];
b774c0e4 2678 next_pc = State.regs[REG_PC] + 6;
92284aaa 2679 State.mem[sp] = next_pc & 0xff;
3bb3fe44
JL
2680 State.mem[sp+1] = (next_pc & 0xff00) >> 8;
2681 State.mem[sp+2] = (next_pc & 0xff0000) >> 16;
2682 State.mem[sp+3] = (next_pc & 0xff000000) >> 24;
92284aaa 2683 State.regs[REG_MDR] = next_pc;
b774c0e4 2684 State.regs[REG_PC] += (((insn & 0xffff) << 16) + extension) - 6;
05ccbdfd
JL
2685}
2686
de0dce7c 2687/* ret reg_list, imm8 */
d2523010
JL
2688void OP_DF0000 (insn, extension)
2689 unsigned long insn, extension;
05ccbdfd 2690{
707641f6
JL
2691 unsigned int sp;
2692 unsigned long mask;
2693
2694 State.regs[REG_SP] += insn & 0xff;
707641f6
JL
2695 sp = State.regs[REG_SP];
2696
2697 mask = (insn & 0xff00) >> 8;
2698
2699 if (mask & 0x8)
2700 {
2701 sp += 4;
2702 State.regs[REG_LAR] = load_mem (sp, 4);
2703 sp += 4;
2704 State.regs[REG_LIR] = load_mem (sp, 4);
2705 sp += 4;
2706 State.regs[REG_MDR] = load_mem (sp, 4);
2707 sp += 4;
2708 State.regs[REG_A0 + 1] = load_mem (sp, 4);
2709 sp += 4;
2710 State.regs[REG_A0] = load_mem (sp, 4);
2711 sp += 4;
2712 State.regs[REG_D0 + 1] = load_mem (sp, 4);
2713 sp += 4;
2714 State.regs[REG_D0] = load_mem (sp, 4);
2715 sp += 4;
2716 }
2717
2718 if (mask & 0x10)
2719 {
2720 State.regs[REG_A0 + 3] = load_mem (sp, 4);
2721 sp += 4;
2722 }
2723
2724 if (mask & 0x20)
2725 {
2726 State.regs[REG_A0 + 2] = load_mem (sp, 4);
2727 sp += 4;
2728 }
2729
2730 if (mask & 0x40)
2731 {
2732 State.regs[REG_D0 + 3] = load_mem (sp, 4);
2733 sp += 4;
2734 }
2735
2736 if (mask & 0x80)
2737 {
2738 State.regs[REG_D0 + 2] = load_mem (sp, 4);
2739 sp += 4;
2740 }
16d2e2b6
JL
2741
2742 /* And make sure to update the stack pointer. */
2743 State.regs[REG_SP] = sp;
2744
2745 /* Restore the PC value. */
b774c0e4 2746 State.regs[REG_PC] = (State.mem[sp] | (State.mem[sp+1] << 8)
16d2e2b6 2747 | (State.mem[sp+2] << 16) | (State.mem[sp+3] << 24));
b774c0e4 2748 State.regs[REG_PC] -= 3;
05ccbdfd
JL
2749}
2750
707641f6 2751/* retf reg_list,imm8 */
d2523010
JL
2752void OP_DE0000 (insn, extension)
2753 unsigned long insn, extension;
05ccbdfd 2754{
707641f6
JL
2755 unsigned int sp;
2756 unsigned long mask;
2757
7c52bf32
JL
2758 sp = State.regs[REG_SP] + (insn & 0xff);
2759 State.regs[REG_SP] = sp;
b774c0e4 2760 State.regs[REG_PC] = State.regs[REG_MDR] - 3;
707641f6
JL
2761
2762 sp = State.regs[REG_SP];
2763
2764 mask = (insn & 0xff00) >> 8;
2765
2766 if (mask & 0x8)
2767 {
2768 sp += 4;
2769 State.regs[REG_LAR] = load_mem (sp, 4);
2770 sp += 4;
2771 State.regs[REG_LIR] = load_mem (sp, 4);
2772 sp += 4;
2773 State.regs[REG_MDR] = load_mem (sp, 4);
2774 sp += 4;
2775 State.regs[REG_A0 + 1] = load_mem (sp, 4);
2776 sp += 4;
2777 State.regs[REG_A0] = load_mem (sp, 4);
2778 sp += 4;
2779 State.regs[REG_D0 + 1] = load_mem (sp, 4);
2780 sp += 4;
2781 State.regs[REG_D0] = load_mem (sp, 4);
2782 sp += 4;
2783 }
2784
2785 if (mask & 0x10)
2786 {
2787 State.regs[REG_A0 + 3] = load_mem (sp, 4);
2788 sp += 4;
2789 }
2790
2791 if (mask & 0x20)
2792 {
2793 State.regs[REG_A0 + 2] = load_mem (sp, 4);
2794 sp += 4;
2795 }
2796
2797 if (mask & 0x40)
2798 {
2799 State.regs[REG_D0 + 3] = load_mem (sp, 4);
2800 sp += 4;
2801 }
2802
2803 if (mask & 0x80)
2804 {
2805 State.regs[REG_D0 + 2] = load_mem (sp, 4);
2806 sp += 4;
2807 }
16d2e2b6
JL
2808
2809 /* And make sure to update the stack pointer. */
2810 State.regs[REG_SP] = sp;
05ccbdfd
JL
2811}
2812
2813/* rets */
d2523010
JL
2814void OP_F0FC (insn, extension)
2815 unsigned long insn, extension;
05ccbdfd 2816{
92284aaa
JL
2817 unsigned int sp;
2818
2819 sp = State.regs[REG_SP];
b774c0e4 2820 State.regs[REG_PC] = (State.mem[sp] | (State.mem[sp+1] << 8)
92284aaa 2821 | (State.mem[sp+2] << 16) | (State.mem[sp+3] << 24));
b774c0e4 2822 State.regs[REG_PC] -= 2;
05ccbdfd
JL
2823}
2824
2825/* rti */
d2523010
JL
2826void OP_F0FD (insn, extension)
2827 unsigned long insn, extension;
05ccbdfd 2828{
f5f13c1d 2829 abort ();
05ccbdfd
JL
2830}
2831
2832/* trap */
d2523010
JL
2833void OP_F0FE (insn, extension)
2834 unsigned long insn, extension;
05ccbdfd 2835{
3bb3fe44
JL
2836 /* We use this for simulated system calls; we may need to change
2837 it to a reserved instruction if we conflict with uses at
2838 Matsushita. */
2839 int save_errno = errno;
2840 errno = 0;
2841
2842/* Registers passed to trap 0 */
2843
2844/* Function number. */
2845#define FUNC (load_mem (State.regs[REG_SP] + 4, 4))
2846
2847/* Parameters. */
2848#define PARM1 (load_mem (State.regs[REG_SP] + 8, 4))
2849#define PARM2 (load_mem (State.regs[REG_SP] + 12, 4))
2850#define PARM3 (load_mem (State.regs[REG_SP] + 16, 4))
2851
2852/* Registers set by trap 0 */
2853
2854#define RETVAL State.regs[0] /* return value */
2855#define RETERR State.regs[1] /* return error code */
2856
2857/* Turn a pointer in a register into a pointer into real memory. */
2858
2859#define MEMPTR(x) (State.mem + x)
2860
2861 switch (FUNC)
2862 {
2863#if !defined(__GO32__) && !defined(_WIN32)
2864 case SYS_fork:
2865 RETVAL = fork ();
2866 break;
2867 case SYS_execve:
2868 RETVAL = execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2),
2869 (char **)MEMPTR (PARM3));
2870 break;
2871 case SYS_execv:
2872 RETVAL = execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2), NULL);
2873 break;
2874#endif
2875
2876 case SYS_read:
2877 RETVAL = mn10300_callback->read (mn10300_callback, PARM1,
2878 MEMPTR (PARM2), PARM3);
2879 break;
2880 case SYS_write:
2881 if (PARM1 == 1)
2882 RETVAL = (int)mn10300_callback->write_stdout (mn10300_callback,
2883 MEMPTR (PARM2), PARM3);
2884 else
2885 RETVAL = (int)mn10300_callback->write (mn10300_callback, PARM1,
2886 MEMPTR (PARM2), PARM3);
2887 break;
2888 case SYS_lseek:
2889 RETVAL = mn10300_callback->lseek (mn10300_callback, PARM1, PARM2, PARM3);
2890 break;
2891 case SYS_close:
2892 RETVAL = mn10300_callback->close (mn10300_callback, PARM1);
2893 break;
2894 case SYS_open:
2895 RETVAL = mn10300_callback->open (mn10300_callback, MEMPTR (PARM1), PARM2);
2896 break;
2897 case SYS_exit:
2898 /* EXIT - caller can look in PARM1 to work out the
2899 reason */
2900 if (PARM1 == 0xdead || PARM1 == 0x1)
2901 State.exception = SIGABRT;
2902 else
2903 State.exception = SIGQUIT;
2904 break;
2905
2906 case SYS_stat: /* added at hmsi */
2907 /* stat system call */
2908 {
2909 struct stat host_stat;
2910 reg_t buf;
2911
2912 RETVAL = stat (MEMPTR (PARM1), &host_stat);
2913
2914 buf = PARM2;
2915
2916 /* Just wild-assed guesses. */
2917 store_mem (buf, 2, host_stat.st_dev);
2918 store_mem (buf + 2, 2, host_stat.st_ino);
2919 store_mem (buf + 4, 4, host_stat.st_mode);
2920 store_mem (buf + 8, 2, host_stat.st_nlink);
2921 store_mem (buf + 10, 2, host_stat.st_uid);
2922 store_mem (buf + 12, 2, host_stat.st_gid);
2923 store_mem (buf + 14, 2, host_stat.st_rdev);
2924 store_mem (buf + 16, 4, host_stat.st_size);
2925 store_mem (buf + 20, 4, host_stat.st_atime);
2926 store_mem (buf + 28, 4, host_stat.st_mtime);
2927 store_mem (buf + 36, 4, host_stat.st_ctime);
2928 }
2929 break;
2930
2931 case SYS_chown:
2932 RETVAL = chown (MEMPTR (PARM1), PARM2, PARM3);
2933 break;
2934 case SYS_chmod:
2935 RETVAL = chmod (MEMPTR (PARM1), PARM2);
2936 break;
2937 case SYS_time:
2938 RETVAL = time (MEMPTR (PARM1));
2939 break;
2940 case SYS_times:
2941 {
2942 struct tms tms;
2943 RETVAL = times (&tms);
2944 store_mem (PARM1, 4, tms.tms_utime);
2945 store_mem (PARM1 + 4, 4, tms.tms_stime);
2946 store_mem (PARM1 + 8, 4, tms.tms_cutime);
2947 store_mem (PARM1 + 12, 4, tms.tms_cstime);
2948 break;
2949 }
2950 case SYS_gettimeofday:
2951 {
2952 struct timeval t;
2953 struct timezone tz;
2954 RETVAL = gettimeofday (&t, &tz);
2955 store_mem (PARM1, 4, t.tv_sec);
2956 store_mem (PARM1 + 4, 4, t.tv_usec);
2957 store_mem (PARM2, 4, tz.tz_minuteswest);
2958 store_mem (PARM2 + 4, 4, tz.tz_dsttime);
2959 break;
2960 }
2961 case SYS_utime:
2962 /* Cast the second argument to void *, to avoid type mismatch
2963 if a prototype is present. */
2964 RETVAL = utime (MEMPTR (PARM1), (void *) MEMPTR (PARM2));
2965 break;
2966 default:
2967 abort ();
2968 }
2969 RETERR = errno;
2970 errno = save_errno;
05ccbdfd
JL
2971}
2972
2973/* rtm */
d2523010
JL
2974void OP_F0FF (insn, extension)
2975 unsigned long insn, extension;
05ccbdfd 2976{
f5f13c1d 2977 abort ();
05ccbdfd
JL
2978}
2979
2980/* nop */
d2523010
JL
2981void OP_CB (insn, extension)
2982 unsigned long insn, extension;
05ccbdfd
JL
2983{
2984}
2985
2986/* putx */
d2523010
JL
2987void OP_F500 (insn, extension)
2988 unsigned long insn, extension;
05ccbdfd 2989{
5084d8e5 2990 abort ();
05ccbdfd
JL
2991}
2992
2993/* getx */
d2523010
JL
2994void OP_F6F0 (insn, extension)
2995 unsigned long insn, extension;
05ccbdfd 2996{
5084d8e5 2997 abort ();
05ccbdfd
JL
2998}
2999
3000/* mulq */
d2523010
JL
3001void OP_F600 (insn, extension)
3002 unsigned long insn, extension;
05ccbdfd 3003{
5084d8e5 3004 abort ();
05ccbdfd
JL
3005}
3006
3007/* mulq */
d2523010
JL
3008void OP_F90000 (insn, extension)
3009 unsigned long insn, extension;
05ccbdfd 3010{
5084d8e5 3011 abort ();
05ccbdfd
JL
3012}
3013
3014/* mulq */
d2523010
JL
3015void OP_FB000000 (insn, extension)
3016 unsigned long insn, extension;
05ccbdfd 3017{
5084d8e5 3018 abort ();
05ccbdfd
JL
3019}
3020
3021/* mulq */
d2523010
JL
3022void OP_FD000000 (insn, extension)
3023 unsigned long insn, extension;
05ccbdfd 3024{
5084d8e5 3025 abort ();
05ccbdfd
JL
3026}
3027
3028/* mulqu */
d2523010
JL
3029void OP_F610 (insn, extension)
3030 unsigned long insn, extension;
05ccbdfd 3031{
5084d8e5 3032 abort ();
05ccbdfd
JL
3033}
3034
3035/* mulqu */
d2523010
JL
3036void OP_F91400 (insn, extension)
3037 unsigned long insn, extension;
05ccbdfd 3038{
5084d8e5 3039 abort ();
05ccbdfd
JL
3040}
3041
3042/* mulqu */
d2523010
JL
3043void OP_FB140000 (insn, extension)
3044 unsigned long insn, extension;
05ccbdfd 3045{
5084d8e5 3046 abort ();
05ccbdfd
JL
3047}
3048
3049/* mulqu */
d2523010
JL
3050void OP_FD140000 (insn, extension)
3051 unsigned long insn, extension;
05ccbdfd 3052{
5084d8e5 3053 abort ();
05ccbdfd
JL
3054}
3055
3056/* sat16 */
d2523010
JL
3057void OP_F640 (insn, extension)
3058 unsigned long insn, extension;
05ccbdfd 3059{
5084d8e5 3060 abort ();
05ccbdfd
JL
3061}
3062
3063/* sat24 */
d2523010
JL
3064void OP_F650 (insn, extension)
3065 unsigned long insn, extension;
05ccbdfd 3066{
5084d8e5 3067 abort ();
05ccbdfd
JL
3068}
3069
3070/* bsch */
d2523010
JL
3071void OP_F670 (insn, extension)
3072 unsigned long insn, extension;
05ccbdfd 3073{
5084d8e5 3074 abort ();
05ccbdfd 3075}
093e9a32
JL
3076
3077/* breakpoint */
3078void
3079OP_FF (insn, extension)
3080 unsigned long insn, extension;
3081{
3082 State.exception = SIGTRAP;
3083 PC -= 1;
3084}
3085