1 #include "m68kcpu.h"
2 extern void m68040_fpu_op0(void);
3 extern void m68040_fpu_op1(void);
4 
5 /* ======================================================================== */
6 /* ========================= INSTRUCTION HANDLERS ========================= */
7 /* ======================================================================== */
8 
9 
m68k_op_1010(void)10 static void m68k_op_1010(void)
11 {
12 	m68ki_exception_1010();
13 }
14 
15 
m68k_op_1111(void)16 static void m68k_op_1111(void)
17 {
18 	m68ki_exception_1111();
19 }
20 
21 
m68k_op_040fpu0_32(void)22 static void m68k_op_040fpu0_32(void)
23 {
24 	if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
25 	{
26 		m68040_fpu_op0();
27 		return;
28 	}
29 	m68ki_exception_1111();
30 }
31 
32 
m68k_op_040fpu1_32(void)33 static void m68k_op_040fpu1_32(void)
34 {
35 	if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
36 	{
37 		m68040_fpu_op1();
38 		return;
39 	}
40 	m68ki_exception_1111();
41 }
42 
43 
m68k_op_abcd_8_rr(void)44 static void m68k_op_abcd_8_rr(void)
45 {
46 	uint* r_dst = &DX;
47 	uint src = DY;
48 	uint dst = *r_dst;
49 	uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();
50 	uint corf = 0;
51 
52 	if(res > 9)
53 		corf = 6;
54 	res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
55 	FLAG_V = ~res; /* Undefined V behavior */
56 	res += corf;
57 	FLAG_X = FLAG_C = (res > 0x9f) << 8;
58 	if(FLAG_C)
59 		res -= 0xa0;
60 
61 	FLAG_V &= res; /* Undefined V behavior part II */
62 	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
63 
64 	res = MASK_OUT_ABOVE_8(res);
65 	FLAG_Z |= res;
66 
67 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
68 }
69 
70 
m68k_op_abcd_8_mm_ax7(void)71 static void m68k_op_abcd_8_mm_ax7(void)
72 {
73 	uint src = OPER_AY_PD_8();
74 	uint ea  = EA_A7_PD_8();
75 	uint dst = m68ki_read_8(ea);
76 	uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();
77 	uint corf = 0;
78 
79 	if(res > 9)
80 		corf = 6;
81 	res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
82 	FLAG_V = ~res; /* Undefined V behavior */
83 	res += corf;
84 	FLAG_X = FLAG_C = (res > 0x9f) << 8;
85 	if(FLAG_C)
86 		res -= 0xa0;
87 
88 	FLAG_V &= res; /* Undefined V behavior part II */
89 	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
90 
91 	res = MASK_OUT_ABOVE_8(res);
92 	FLAG_Z |= res;
93 
94 	m68ki_write_8(ea, res);
95 }
96 
97 
m68k_op_abcd_8_mm_ay7(void)98 static void m68k_op_abcd_8_mm_ay7(void)
99 {
100 	uint src = OPER_A7_PD_8();
101 	uint ea  = EA_AX_PD_8();
102 	uint dst = m68ki_read_8(ea);
103 	uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();
104 	uint corf = 0;
105 
106 	if(res > 9)
107 		corf = 6;
108 	res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
109 	FLAG_V = ~res; /* Undefined V behavior */
110 	res += corf;
111 	FLAG_X = FLAG_C = (res > 0x9f) << 8;
112 	if(FLAG_C)
113 		res -= 0xa0;
114 
115 	FLAG_V &= res; /* Undefined V behavior part II */
116 	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
117 
118 	res = MASK_OUT_ABOVE_8(res);
119 	FLAG_Z |= res;
120 
121 	m68ki_write_8(ea, res);
122 }
123 
124 
m68k_op_abcd_8_mm_axy7(void)125 static void m68k_op_abcd_8_mm_axy7(void)
126 {
127 	uint src = OPER_A7_PD_8();
128 	uint ea  = EA_A7_PD_8();
129 	uint dst = m68ki_read_8(ea);
130 	uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();
131 	uint corf = 0;
132 
133 	if(res > 9)
134 		corf = 6;
135 	res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
136 	FLAG_V = ~res; /* Undefined V behavior */
137 	res += corf;
138 	FLAG_X = FLAG_C = (res > 0x9f) << 8;
139 	if(FLAG_C)
140 		res -= 0xa0;
141 
142 	FLAG_V &= res; /* Undefined V behavior part II */
143 	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
144 
145 	res = MASK_OUT_ABOVE_8(res);
146 	FLAG_Z |= res;
147 
148 	m68ki_write_8(ea, res);
149 }
150 
151 
m68k_op_abcd_8_mm(void)152 static void m68k_op_abcd_8_mm(void)
153 {
154 	uint src = OPER_AY_PD_8();
155 	uint ea  = EA_AX_PD_8();
156 	uint dst = m68ki_read_8(ea);
157 	uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();
158 	uint corf = 0;
159 
160 	if(res > 9)
161 		corf = 6;
162 	res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
163 	FLAG_V = ~res; /* Undefined V behavior */
164 	res += corf;
165 	FLAG_X = FLAG_C = (res > 0x9f) << 8;
166 	if(FLAG_C)
167 		res -= 0xa0;
168 
169 	FLAG_V &= res; /* Undefined V behavior part II */
170 	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
171 
172 	res = MASK_OUT_ABOVE_8(res);
173 	FLAG_Z |= res;
174 
175 	m68ki_write_8(ea, res);
176 }
177 
178 
m68k_op_add_8_er_d(void)179 static void m68k_op_add_8_er_d(void)
180 {
181 	uint* r_dst = &DX;
182 	uint src = MASK_OUT_ABOVE_8(DY);
183 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
184 	uint res = src + dst;
185 
186 	FLAG_N = NFLAG_8(res);
187 	FLAG_V = VFLAG_ADD_8(src, dst, res);
188 	FLAG_X = FLAG_C = CFLAG_8(res);
189 	FLAG_Z = MASK_OUT_ABOVE_8(res);
190 
191 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
192 }
193 
194 
m68k_op_add_8_er_ai(void)195 static void m68k_op_add_8_er_ai(void)
196 {
197 	uint* r_dst = &DX;
198 	uint src = OPER_AY_AI_8();
199 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
200 	uint res = src + dst;
201 
202 	FLAG_N = NFLAG_8(res);
203 	FLAG_V = VFLAG_ADD_8(src, dst, res);
204 	FLAG_X = FLAG_C = CFLAG_8(res);
205 	FLAG_Z = MASK_OUT_ABOVE_8(res);
206 
207 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
208 }
209 
210 
m68k_op_add_8_er_pi(void)211 static void m68k_op_add_8_er_pi(void)
212 {
213 	uint* r_dst = &DX;
214 	uint src = OPER_AY_PI_8();
215 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
216 	uint res = src + dst;
217 
218 	FLAG_N = NFLAG_8(res);
219 	FLAG_V = VFLAG_ADD_8(src, dst, res);
220 	FLAG_X = FLAG_C = CFLAG_8(res);
221 	FLAG_Z = MASK_OUT_ABOVE_8(res);
222 
223 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
224 }
225 
226 
m68k_op_add_8_er_pi7(void)227 static void m68k_op_add_8_er_pi7(void)
228 {
229 	uint* r_dst = &DX;
230 	uint src = OPER_A7_PI_8();
231 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
232 	uint res = src + dst;
233 
234 	FLAG_N = NFLAG_8(res);
235 	FLAG_V = VFLAG_ADD_8(src, dst, res);
236 	FLAG_X = FLAG_C = CFLAG_8(res);
237 	FLAG_Z = MASK_OUT_ABOVE_8(res);
238 
239 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
240 }
241 
242 
m68k_op_add_8_er_pd(void)243 static void m68k_op_add_8_er_pd(void)
244 {
245 	uint* r_dst = &DX;
246 	uint src = OPER_AY_PD_8();
247 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
248 	uint res = src + dst;
249 
250 	FLAG_N = NFLAG_8(res);
251 	FLAG_V = VFLAG_ADD_8(src, dst, res);
252 	FLAG_X = FLAG_C = CFLAG_8(res);
253 	FLAG_Z = MASK_OUT_ABOVE_8(res);
254 
255 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
256 }
257 
258 
m68k_op_add_8_er_pd7(void)259 static void m68k_op_add_8_er_pd7(void)
260 {
261 	uint* r_dst = &DX;
262 	uint src = OPER_A7_PD_8();
263 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
264 	uint res = src + dst;
265 
266 	FLAG_N = NFLAG_8(res);
267 	FLAG_V = VFLAG_ADD_8(src, dst, res);
268 	FLAG_X = FLAG_C = CFLAG_8(res);
269 	FLAG_Z = MASK_OUT_ABOVE_8(res);
270 
271 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
272 }
273 
274 
m68k_op_add_8_er_di(void)275 static void m68k_op_add_8_er_di(void)
276 {
277 	uint* r_dst = &DX;
278 	uint src = OPER_AY_DI_8();
279 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
280 	uint res = src + dst;
281 
282 	FLAG_N = NFLAG_8(res);
283 	FLAG_V = VFLAG_ADD_8(src, dst, res);
284 	FLAG_X = FLAG_C = CFLAG_8(res);
285 	FLAG_Z = MASK_OUT_ABOVE_8(res);
286 
287 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
288 }
289 
290 
m68k_op_add_8_er_ix(void)291 static void m68k_op_add_8_er_ix(void)
292 {
293 	uint* r_dst = &DX;
294 	uint src = OPER_AY_IX_8();
295 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
296 	uint res = src + dst;
297 
298 	FLAG_N = NFLAG_8(res);
299 	FLAG_V = VFLAG_ADD_8(src, dst, res);
300 	FLAG_X = FLAG_C = CFLAG_8(res);
301 	FLAG_Z = MASK_OUT_ABOVE_8(res);
302 
303 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
304 }
305 
306 
m68k_op_add_8_er_aw(void)307 static void m68k_op_add_8_er_aw(void)
308 {
309 	uint* r_dst = &DX;
310 	uint src = OPER_AW_8();
311 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
312 	uint res = src + dst;
313 
314 	FLAG_N = NFLAG_8(res);
315 	FLAG_V = VFLAG_ADD_8(src, dst, res);
316 	FLAG_X = FLAG_C = CFLAG_8(res);
317 	FLAG_Z = MASK_OUT_ABOVE_8(res);
318 
319 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
320 }
321 
322 
m68k_op_add_8_er_al(void)323 static void m68k_op_add_8_er_al(void)
324 {
325 	uint* r_dst = &DX;
326 	uint src = OPER_AL_8();
327 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
328 	uint res = src + dst;
329 
330 	FLAG_N = NFLAG_8(res);
331 	FLAG_V = VFLAG_ADD_8(src, dst, res);
332 	FLAG_X = FLAG_C = CFLAG_8(res);
333 	FLAG_Z = MASK_OUT_ABOVE_8(res);
334 
335 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
336 }
337 
338 
m68k_op_add_8_er_pcdi(void)339 static void m68k_op_add_8_er_pcdi(void)
340 {
341 	uint* r_dst = &DX;
342 	uint src = OPER_PCDI_8();
343 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
344 	uint res = src + dst;
345 
346 	FLAG_N = NFLAG_8(res);
347 	FLAG_V = VFLAG_ADD_8(src, dst, res);
348 	FLAG_X = FLAG_C = CFLAG_8(res);
349 	FLAG_Z = MASK_OUT_ABOVE_8(res);
350 
351 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
352 }
353 
354 
m68k_op_add_8_er_pcix(void)355 static void m68k_op_add_8_er_pcix(void)
356 {
357 	uint* r_dst = &DX;
358 	uint src = OPER_PCIX_8();
359 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
360 	uint res = src + dst;
361 
362 	FLAG_N = NFLAG_8(res);
363 	FLAG_V = VFLAG_ADD_8(src, dst, res);
364 	FLAG_X = FLAG_C = CFLAG_8(res);
365 	FLAG_Z = MASK_OUT_ABOVE_8(res);
366 
367 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
368 }
369 
370 
m68k_op_add_8_er_i(void)371 static void m68k_op_add_8_er_i(void)
372 {
373 	uint* r_dst = &DX;
374 	uint src = OPER_I_8();
375 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
376 	uint res = src + dst;
377 
378 	FLAG_N = NFLAG_8(res);
379 	FLAG_V = VFLAG_ADD_8(src, dst, res);
380 	FLAG_X = FLAG_C = CFLAG_8(res);
381 	FLAG_Z = MASK_OUT_ABOVE_8(res);
382 
383 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
384 }
385 
386 
m68k_op_add_16_er_d(void)387 static void m68k_op_add_16_er_d(void)
388 {
389 	uint* r_dst = &DX;
390 	uint src = MASK_OUT_ABOVE_16(DY);
391 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
392 	uint res = src + dst;
393 
394 	FLAG_N = NFLAG_16(res);
395 	FLAG_V = VFLAG_ADD_16(src, dst, res);
396 	FLAG_X = FLAG_C = CFLAG_16(res);
397 	FLAG_Z = MASK_OUT_ABOVE_16(res);
398 
399 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
400 }
401 
402 
m68k_op_add_16_er_a(void)403 static void m68k_op_add_16_er_a(void)
404 {
405 	uint* r_dst = &DX;
406 	uint src = MASK_OUT_ABOVE_16(AY);
407 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
408 	uint res = src + dst;
409 
410 	FLAG_N = NFLAG_16(res);
411 	FLAG_V = VFLAG_ADD_16(src, dst, res);
412 	FLAG_X = FLAG_C = CFLAG_16(res);
413 	FLAG_Z = MASK_OUT_ABOVE_16(res);
414 
415 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
416 }
417 
418 
m68k_op_add_16_er_ai(void)419 static void m68k_op_add_16_er_ai(void)
420 {
421 	uint* r_dst = &DX;
422 	uint src = OPER_AY_AI_16();
423 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
424 	uint res = src + dst;
425 
426 	FLAG_N = NFLAG_16(res);
427 	FLAG_V = VFLAG_ADD_16(src, dst, res);
428 	FLAG_X = FLAG_C = CFLAG_16(res);
429 	FLAG_Z = MASK_OUT_ABOVE_16(res);
430 
431 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
432 }
433 
434 
m68k_op_add_16_er_pi(void)435 static void m68k_op_add_16_er_pi(void)
436 {
437 	uint* r_dst = &DX;
438 	uint src = OPER_AY_PI_16();
439 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
440 	uint res = src + dst;
441 
442 	FLAG_N = NFLAG_16(res);
443 	FLAG_V = VFLAG_ADD_16(src, dst, res);
444 	FLAG_X = FLAG_C = CFLAG_16(res);
445 	FLAG_Z = MASK_OUT_ABOVE_16(res);
446 
447 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
448 }
449 
450 
m68k_op_add_16_er_pd(void)451 static void m68k_op_add_16_er_pd(void)
452 {
453 	uint* r_dst = &DX;
454 	uint src = OPER_AY_PD_16();
455 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
456 	uint res = src + dst;
457 
458 	FLAG_N = NFLAG_16(res);
459 	FLAG_V = VFLAG_ADD_16(src, dst, res);
460 	FLAG_X = FLAG_C = CFLAG_16(res);
461 	FLAG_Z = MASK_OUT_ABOVE_16(res);
462 
463 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
464 }
465 
466 
m68k_op_add_16_er_di(void)467 static void m68k_op_add_16_er_di(void)
468 {
469 	uint* r_dst = &DX;
470 	uint src = OPER_AY_DI_16();
471 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
472 	uint res = src + dst;
473 
474 	FLAG_N = NFLAG_16(res);
475 	FLAG_V = VFLAG_ADD_16(src, dst, res);
476 	FLAG_X = FLAG_C = CFLAG_16(res);
477 	FLAG_Z = MASK_OUT_ABOVE_16(res);
478 
479 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
480 }
481 
482 
m68k_op_add_16_er_ix(void)483 static void m68k_op_add_16_er_ix(void)
484 {
485 	uint* r_dst = &DX;
486 	uint src = OPER_AY_IX_16();
487 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
488 	uint res = src + dst;
489 
490 	FLAG_N = NFLAG_16(res);
491 	FLAG_V = VFLAG_ADD_16(src, dst, res);
492 	FLAG_X = FLAG_C = CFLAG_16(res);
493 	FLAG_Z = MASK_OUT_ABOVE_16(res);
494 
495 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
496 }
497 
498 
m68k_op_add_16_er_aw(void)499 static void m68k_op_add_16_er_aw(void)
500 {
501 	uint* r_dst = &DX;
502 	uint src = OPER_AW_16();
503 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
504 	uint res = src + dst;
505 
506 	FLAG_N = NFLAG_16(res);
507 	FLAG_V = VFLAG_ADD_16(src, dst, res);
508 	FLAG_X = FLAG_C = CFLAG_16(res);
509 	FLAG_Z = MASK_OUT_ABOVE_16(res);
510 
511 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
512 }
513 
514 
m68k_op_add_16_er_al(void)515 static void m68k_op_add_16_er_al(void)
516 {
517 	uint* r_dst = &DX;
518 	uint src = OPER_AL_16();
519 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
520 	uint res = src + dst;
521 
522 	FLAG_N = NFLAG_16(res);
523 	FLAG_V = VFLAG_ADD_16(src, dst, res);
524 	FLAG_X = FLAG_C = CFLAG_16(res);
525 	FLAG_Z = MASK_OUT_ABOVE_16(res);
526 
527 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
528 }
529 
530 
m68k_op_add_16_er_pcdi(void)531 static void m68k_op_add_16_er_pcdi(void)
532 {
533 	uint* r_dst = &DX;
534 	uint src = OPER_PCDI_16();
535 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
536 	uint res = src + dst;
537 
538 	FLAG_N = NFLAG_16(res);
539 	FLAG_V = VFLAG_ADD_16(src, dst, res);
540 	FLAG_X = FLAG_C = CFLAG_16(res);
541 	FLAG_Z = MASK_OUT_ABOVE_16(res);
542 
543 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
544 }
545 
546 
m68k_op_add_16_er_pcix(void)547 static void m68k_op_add_16_er_pcix(void)
548 {
549 	uint* r_dst = &DX;
550 	uint src = OPER_PCIX_16();
551 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
552 	uint res = src + dst;
553 
554 	FLAG_N = NFLAG_16(res);
555 	FLAG_V = VFLAG_ADD_16(src, dst, res);
556 	FLAG_X = FLAG_C = CFLAG_16(res);
557 	FLAG_Z = MASK_OUT_ABOVE_16(res);
558 
559 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
560 }
561 
562 
m68k_op_add_16_er_i(void)563 static void m68k_op_add_16_er_i(void)
564 {
565 	uint* r_dst = &DX;
566 	uint src = OPER_I_16();
567 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
568 	uint res = src + dst;
569 
570 	FLAG_N = NFLAG_16(res);
571 	FLAG_V = VFLAG_ADD_16(src, dst, res);
572 	FLAG_X = FLAG_C = CFLAG_16(res);
573 	FLAG_Z = MASK_OUT_ABOVE_16(res);
574 
575 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
576 }
577 
578 
m68k_op_add_32_er_d(void)579 static void m68k_op_add_32_er_d(void)
580 {
581 	uint* r_dst = &DX;
582 	uint src = DY;
583 	uint dst = *r_dst;
584 	uint res = src + dst;
585 
586 	FLAG_N = NFLAG_32(res);
587 	FLAG_V = VFLAG_ADD_32(src, dst, res);
588 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
589 	FLAG_Z = MASK_OUT_ABOVE_32(res);
590 
591 	*r_dst = FLAG_Z;
592 }
593 
594 
m68k_op_add_32_er_a(void)595 static void m68k_op_add_32_er_a(void)
596 {
597 	uint* r_dst = &DX;
598 	uint src = AY;
599 	uint dst = *r_dst;
600 	uint res = src + dst;
601 
602 	FLAG_N = NFLAG_32(res);
603 	FLAG_V = VFLAG_ADD_32(src, dst, res);
604 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
605 	FLAG_Z = MASK_OUT_ABOVE_32(res);
606 
607 	*r_dst = FLAG_Z;
608 }
609 
610 
m68k_op_add_32_er_ai(void)611 static void m68k_op_add_32_er_ai(void)
612 {
613 	uint* r_dst = &DX;
614 	uint src = OPER_AY_AI_32();
615 	uint dst = *r_dst;
616 	uint res = src + dst;
617 
618 	FLAG_N = NFLAG_32(res);
619 	FLAG_V = VFLAG_ADD_32(src, dst, res);
620 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
621 	FLAG_Z = MASK_OUT_ABOVE_32(res);
622 
623 	*r_dst = FLAG_Z;
624 }
625 
626 
m68k_op_add_32_er_pi(void)627 static void m68k_op_add_32_er_pi(void)
628 {
629 	uint* r_dst = &DX;
630 	uint src = OPER_AY_PI_32();
631 	uint dst = *r_dst;
632 	uint res = src + dst;
633 
634 	FLAG_N = NFLAG_32(res);
635 	FLAG_V = VFLAG_ADD_32(src, dst, res);
636 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
637 	FLAG_Z = MASK_OUT_ABOVE_32(res);
638 
639 	*r_dst = FLAG_Z;
640 }
641 
642 
m68k_op_add_32_er_pd(void)643 static void m68k_op_add_32_er_pd(void)
644 {
645 	uint* r_dst = &DX;
646 	uint src = OPER_AY_PD_32();
647 	uint dst = *r_dst;
648 	uint res = src + dst;
649 
650 	FLAG_N = NFLAG_32(res);
651 	FLAG_V = VFLAG_ADD_32(src, dst, res);
652 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
653 	FLAG_Z = MASK_OUT_ABOVE_32(res);
654 
655 	*r_dst = FLAG_Z;
656 }
657 
658 
m68k_op_add_32_er_di(void)659 static void m68k_op_add_32_er_di(void)
660 {
661 	uint* r_dst = &DX;
662 	uint src = OPER_AY_DI_32();
663 	uint dst = *r_dst;
664 	uint res = src + dst;
665 
666 	FLAG_N = NFLAG_32(res);
667 	FLAG_V = VFLAG_ADD_32(src, dst, res);
668 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
669 	FLAG_Z = MASK_OUT_ABOVE_32(res);
670 
671 	*r_dst = FLAG_Z;
672 }
673 
674 
m68k_op_add_32_er_ix(void)675 static void m68k_op_add_32_er_ix(void)
676 {
677 	uint* r_dst = &DX;
678 	uint src = OPER_AY_IX_32();
679 	uint dst = *r_dst;
680 	uint res = src + dst;
681 
682 	FLAG_N = NFLAG_32(res);
683 	FLAG_V = VFLAG_ADD_32(src, dst, res);
684 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
685 	FLAG_Z = MASK_OUT_ABOVE_32(res);
686 
687 	*r_dst = FLAG_Z;
688 }
689 
690 
m68k_op_add_32_er_aw(void)691 static void m68k_op_add_32_er_aw(void)
692 {
693 	uint* r_dst = &DX;
694 	uint src = OPER_AW_32();
695 	uint dst = *r_dst;
696 	uint res = src + dst;
697 
698 	FLAG_N = NFLAG_32(res);
699 	FLAG_V = VFLAG_ADD_32(src, dst, res);
700 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
701 	FLAG_Z = MASK_OUT_ABOVE_32(res);
702 
703 	*r_dst = FLAG_Z;
704 }
705 
706 
m68k_op_add_32_er_al(void)707 static void m68k_op_add_32_er_al(void)
708 {
709 	uint* r_dst = &DX;
710 	uint src = OPER_AL_32();
711 	uint dst = *r_dst;
712 	uint res = src + dst;
713 
714 	FLAG_N = NFLAG_32(res);
715 	FLAG_V = VFLAG_ADD_32(src, dst, res);
716 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
717 	FLAG_Z = MASK_OUT_ABOVE_32(res);
718 
719 	*r_dst = FLAG_Z;
720 }
721 
722 
m68k_op_add_32_er_pcdi(void)723 static void m68k_op_add_32_er_pcdi(void)
724 {
725 	uint* r_dst = &DX;
726 	uint src = OPER_PCDI_32();
727 	uint dst = *r_dst;
728 	uint res = src + dst;
729 
730 	FLAG_N = NFLAG_32(res);
731 	FLAG_V = VFLAG_ADD_32(src, dst, res);
732 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
733 	FLAG_Z = MASK_OUT_ABOVE_32(res);
734 
735 	*r_dst = FLAG_Z;
736 }
737 
738 
m68k_op_add_32_er_pcix(void)739 static void m68k_op_add_32_er_pcix(void)
740 {
741 	uint* r_dst = &DX;
742 	uint src = OPER_PCIX_32();
743 	uint dst = *r_dst;
744 	uint res = src + dst;
745 
746 	FLAG_N = NFLAG_32(res);
747 	FLAG_V = VFLAG_ADD_32(src, dst, res);
748 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
749 	FLAG_Z = MASK_OUT_ABOVE_32(res);
750 
751 	*r_dst = FLAG_Z;
752 }
753 
754 
m68k_op_add_32_er_i(void)755 static void m68k_op_add_32_er_i(void)
756 {
757 	uint* r_dst = &DX;
758 	uint src = OPER_I_32();
759 	uint dst = *r_dst;
760 	uint res = src + dst;
761 
762 	FLAG_N = NFLAG_32(res);
763 	FLAG_V = VFLAG_ADD_32(src, dst, res);
764 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
765 	FLAG_Z = MASK_OUT_ABOVE_32(res);
766 
767 	*r_dst = FLAG_Z;
768 }
769 
770 
m68k_op_add_8_re_ai(void)771 static void m68k_op_add_8_re_ai(void)
772 {
773 	uint ea = EA_AY_AI_8();
774 	uint src = MASK_OUT_ABOVE_8(DX);
775 	uint dst = m68ki_read_8(ea);
776 	uint res = src + dst;
777 
778 	FLAG_N = NFLAG_8(res);
779 	FLAG_V = VFLAG_ADD_8(src, dst, res);
780 	FLAG_X = FLAG_C = CFLAG_8(res);
781 	FLAG_Z = MASK_OUT_ABOVE_8(res);
782 
783 	m68ki_write_8(ea, FLAG_Z);
784 }
785 
786 
m68k_op_add_8_re_pi(void)787 static void m68k_op_add_8_re_pi(void)
788 {
789 	uint ea = EA_AY_PI_8();
790 	uint src = MASK_OUT_ABOVE_8(DX);
791 	uint dst = m68ki_read_8(ea);
792 	uint res = src + dst;
793 
794 	FLAG_N = NFLAG_8(res);
795 	FLAG_V = VFLAG_ADD_8(src, dst, res);
796 	FLAG_X = FLAG_C = CFLAG_8(res);
797 	FLAG_Z = MASK_OUT_ABOVE_8(res);
798 
799 	m68ki_write_8(ea, FLAG_Z);
800 }
801 
802 
m68k_op_add_8_re_pi7(void)803 static void m68k_op_add_8_re_pi7(void)
804 {
805 	uint ea = EA_A7_PI_8();
806 	uint src = MASK_OUT_ABOVE_8(DX);
807 	uint dst = m68ki_read_8(ea);
808 	uint res = src + dst;
809 
810 	FLAG_N = NFLAG_8(res);
811 	FLAG_V = VFLAG_ADD_8(src, dst, res);
812 	FLAG_X = FLAG_C = CFLAG_8(res);
813 	FLAG_Z = MASK_OUT_ABOVE_8(res);
814 
815 	m68ki_write_8(ea, FLAG_Z);
816 }
817 
818 
m68k_op_add_8_re_pd(void)819 static void m68k_op_add_8_re_pd(void)
820 {
821 	uint ea = EA_AY_PD_8();
822 	uint src = MASK_OUT_ABOVE_8(DX);
823 	uint dst = m68ki_read_8(ea);
824 	uint res = src + dst;
825 
826 	FLAG_N = NFLAG_8(res);
827 	FLAG_V = VFLAG_ADD_8(src, dst, res);
828 	FLAG_X = FLAG_C = CFLAG_8(res);
829 	FLAG_Z = MASK_OUT_ABOVE_8(res);
830 
831 	m68ki_write_8(ea, FLAG_Z);
832 }
833 
834 
m68k_op_add_8_re_pd7(void)835 static void m68k_op_add_8_re_pd7(void)
836 {
837 	uint ea = EA_A7_PD_8();
838 	uint src = MASK_OUT_ABOVE_8(DX);
839 	uint dst = m68ki_read_8(ea);
840 	uint res = src + dst;
841 
842 	FLAG_N = NFLAG_8(res);
843 	FLAG_V = VFLAG_ADD_8(src, dst, res);
844 	FLAG_X = FLAG_C = CFLAG_8(res);
845 	FLAG_Z = MASK_OUT_ABOVE_8(res);
846 
847 	m68ki_write_8(ea, FLAG_Z);
848 }
849 
850 
m68k_op_add_8_re_di(void)851 static void m68k_op_add_8_re_di(void)
852 {
853 	uint ea = EA_AY_DI_8();
854 	uint src = MASK_OUT_ABOVE_8(DX);
855 	uint dst = m68ki_read_8(ea);
856 	uint res = src + dst;
857 
858 	FLAG_N = NFLAG_8(res);
859 	FLAG_V = VFLAG_ADD_8(src, dst, res);
860 	FLAG_X = FLAG_C = CFLAG_8(res);
861 	FLAG_Z = MASK_OUT_ABOVE_8(res);
862 
863 	m68ki_write_8(ea, FLAG_Z);
864 }
865 
866 
m68k_op_add_8_re_ix(void)867 static void m68k_op_add_8_re_ix(void)
868 {
869 	uint ea = EA_AY_IX_8();
870 	uint src = MASK_OUT_ABOVE_8(DX);
871 	uint dst = m68ki_read_8(ea);
872 	uint res = src + dst;
873 
874 	FLAG_N = NFLAG_8(res);
875 	FLAG_V = VFLAG_ADD_8(src, dst, res);
876 	FLAG_X = FLAG_C = CFLAG_8(res);
877 	FLAG_Z = MASK_OUT_ABOVE_8(res);
878 
879 	m68ki_write_8(ea, FLAG_Z);
880 }
881 
882 
m68k_op_add_8_re_aw(void)883 static void m68k_op_add_8_re_aw(void)
884 {
885 	uint ea = EA_AW_8();
886 	uint src = MASK_OUT_ABOVE_8(DX);
887 	uint dst = m68ki_read_8(ea);
888 	uint res = src + dst;
889 
890 	FLAG_N = NFLAG_8(res);
891 	FLAG_V = VFLAG_ADD_8(src, dst, res);
892 	FLAG_X = FLAG_C = CFLAG_8(res);
893 	FLAG_Z = MASK_OUT_ABOVE_8(res);
894 
895 	m68ki_write_8(ea, FLAG_Z);
896 }
897 
898 
m68k_op_add_8_re_al(void)899 static void m68k_op_add_8_re_al(void)
900 {
901 	uint ea = EA_AL_8();
902 	uint src = MASK_OUT_ABOVE_8(DX);
903 	uint dst = m68ki_read_8(ea);
904 	uint res = src + dst;
905 
906 	FLAG_N = NFLAG_8(res);
907 	FLAG_V = VFLAG_ADD_8(src, dst, res);
908 	FLAG_X = FLAG_C = CFLAG_8(res);
909 	FLAG_Z = MASK_OUT_ABOVE_8(res);
910 
911 	m68ki_write_8(ea, FLAG_Z);
912 }
913 
914 
m68k_op_add_16_re_ai(void)915 static void m68k_op_add_16_re_ai(void)
916 {
917 	uint ea = EA_AY_AI_16();
918 	uint src = MASK_OUT_ABOVE_16(DX);
919 	uint dst = m68ki_read_16(ea);
920 	uint res = src + dst;
921 
922 	FLAG_N = NFLAG_16(res);
923 	FLAG_V = VFLAG_ADD_16(src, dst, res);
924 	FLAG_X = FLAG_C = CFLAG_16(res);
925 	FLAG_Z = MASK_OUT_ABOVE_16(res);
926 
927 	m68ki_write_16(ea, FLAG_Z);
928 }
929 
930 
m68k_op_add_16_re_pi(void)931 static void m68k_op_add_16_re_pi(void)
932 {
933 	uint ea = EA_AY_PI_16();
934 	uint src = MASK_OUT_ABOVE_16(DX);
935 	uint dst = m68ki_read_16(ea);
936 	uint res = src + dst;
937 
938 	FLAG_N = NFLAG_16(res);
939 	FLAG_V = VFLAG_ADD_16(src, dst, res);
940 	FLAG_X = FLAG_C = CFLAG_16(res);
941 	FLAG_Z = MASK_OUT_ABOVE_16(res);
942 
943 	m68ki_write_16(ea, FLAG_Z);
944 }
945 
946 
m68k_op_add_16_re_pd(void)947 static void m68k_op_add_16_re_pd(void)
948 {
949 	uint ea = EA_AY_PD_16();
950 	uint src = MASK_OUT_ABOVE_16(DX);
951 	uint dst = m68ki_read_16(ea);
952 	uint res = src + dst;
953 
954 	FLAG_N = NFLAG_16(res);
955 	FLAG_V = VFLAG_ADD_16(src, dst, res);
956 	FLAG_X = FLAG_C = CFLAG_16(res);
957 	FLAG_Z = MASK_OUT_ABOVE_16(res);
958 
959 	m68ki_write_16(ea, FLAG_Z);
960 }
961 
962 
m68k_op_add_16_re_di(void)963 static void m68k_op_add_16_re_di(void)
964 {
965 	uint ea = EA_AY_DI_16();
966 	uint src = MASK_OUT_ABOVE_16(DX);
967 	uint dst = m68ki_read_16(ea);
968 	uint res = src + dst;
969 
970 	FLAG_N = NFLAG_16(res);
971 	FLAG_V = VFLAG_ADD_16(src, dst, res);
972 	FLAG_X = FLAG_C = CFLAG_16(res);
973 	FLAG_Z = MASK_OUT_ABOVE_16(res);
974 
975 	m68ki_write_16(ea, FLAG_Z);
976 }
977 
978 
m68k_op_add_16_re_ix(void)979 static void m68k_op_add_16_re_ix(void)
980 {
981 	uint ea = EA_AY_IX_16();
982 	uint src = MASK_OUT_ABOVE_16(DX);
983 	uint dst = m68ki_read_16(ea);
984 	uint res = src + dst;
985 
986 	FLAG_N = NFLAG_16(res);
987 	FLAG_V = VFLAG_ADD_16(src, dst, res);
988 	FLAG_X = FLAG_C = CFLAG_16(res);
989 	FLAG_Z = MASK_OUT_ABOVE_16(res);
990 
991 	m68ki_write_16(ea, FLAG_Z);
992 }
993 
994 
m68k_op_add_16_re_aw(void)995 static void m68k_op_add_16_re_aw(void)
996 {
997 	uint ea = EA_AW_16();
998 	uint src = MASK_OUT_ABOVE_16(DX);
999 	uint dst = m68ki_read_16(ea);
1000 	uint res = src + dst;
1001 
1002 	FLAG_N = NFLAG_16(res);
1003 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1004 	FLAG_X = FLAG_C = CFLAG_16(res);
1005 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1006 
1007 	m68ki_write_16(ea, FLAG_Z);
1008 }
1009 
1010 
m68k_op_add_16_re_al(void)1011 static void m68k_op_add_16_re_al(void)
1012 {
1013 	uint ea = EA_AL_16();
1014 	uint src = MASK_OUT_ABOVE_16(DX);
1015 	uint dst = m68ki_read_16(ea);
1016 	uint res = src + dst;
1017 
1018 	FLAG_N = NFLAG_16(res);
1019 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1020 	FLAG_X = FLAG_C = CFLAG_16(res);
1021 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1022 
1023 	m68ki_write_16(ea, FLAG_Z);
1024 }
1025 
1026 
m68k_op_add_32_re_ai(void)1027 static void m68k_op_add_32_re_ai(void)
1028 {
1029 	uint ea = EA_AY_AI_32();
1030 	uint src = DX;
1031 	uint dst = m68ki_read_32(ea);
1032 	uint res = src + dst;
1033 
1034 	FLAG_N = NFLAG_32(res);
1035 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1036 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1037 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1038 
1039 	m68ki_write_32(ea, FLAG_Z);
1040 }
1041 
1042 
m68k_op_add_32_re_pi(void)1043 static void m68k_op_add_32_re_pi(void)
1044 {
1045 	uint ea = EA_AY_PI_32();
1046 	uint src = DX;
1047 	uint dst = m68ki_read_32(ea);
1048 	uint res = src + dst;
1049 
1050 	FLAG_N = NFLAG_32(res);
1051 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1052 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1053 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1054 
1055 	m68ki_write_32(ea, FLAG_Z);
1056 }
1057 
1058 
m68k_op_add_32_re_pd(void)1059 static void m68k_op_add_32_re_pd(void)
1060 {
1061 	uint ea = EA_AY_PD_32();
1062 	uint src = DX;
1063 	uint dst = m68ki_read_32(ea);
1064 	uint res = src + dst;
1065 
1066 	FLAG_N = NFLAG_32(res);
1067 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1068 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1069 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1070 
1071 	m68ki_write_32(ea, FLAG_Z);
1072 }
1073 
1074 
m68k_op_add_32_re_di(void)1075 static void m68k_op_add_32_re_di(void)
1076 {
1077 	uint ea = EA_AY_DI_32();
1078 	uint src = DX;
1079 	uint dst = m68ki_read_32(ea);
1080 	uint res = src + dst;
1081 
1082 	FLAG_N = NFLAG_32(res);
1083 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1084 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1085 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1086 
1087 	m68ki_write_32(ea, FLAG_Z);
1088 }
1089 
1090 
m68k_op_add_32_re_ix(void)1091 static void m68k_op_add_32_re_ix(void)
1092 {
1093 	uint ea = EA_AY_IX_32();
1094 	uint src = DX;
1095 	uint dst = m68ki_read_32(ea);
1096 	uint res = src + dst;
1097 
1098 	FLAG_N = NFLAG_32(res);
1099 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1100 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1101 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1102 
1103 	m68ki_write_32(ea, FLAG_Z);
1104 }
1105 
1106 
m68k_op_add_32_re_aw(void)1107 static void m68k_op_add_32_re_aw(void)
1108 {
1109 	uint ea = EA_AW_32();
1110 	uint src = DX;
1111 	uint dst = m68ki_read_32(ea);
1112 	uint res = src + dst;
1113 
1114 	FLAG_N = NFLAG_32(res);
1115 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1116 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1117 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1118 
1119 	m68ki_write_32(ea, FLAG_Z);
1120 }
1121 
1122 
m68k_op_add_32_re_al(void)1123 static void m68k_op_add_32_re_al(void)
1124 {
1125 	uint ea = EA_AL_32();
1126 	uint src = DX;
1127 	uint dst = m68ki_read_32(ea);
1128 	uint res = src + dst;
1129 
1130 	FLAG_N = NFLAG_32(res);
1131 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1132 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1133 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1134 
1135 	m68ki_write_32(ea, FLAG_Z);
1136 }
1137 
1138 
m68k_op_adda_16_d(void)1139 static void m68k_op_adda_16_d(void)
1140 {
1141 	uint* r_dst = &AX;
1142 
1143 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(DY));
1144 }
1145 
1146 
m68k_op_adda_16_a(void)1147 static void m68k_op_adda_16_a(void)
1148 {
1149 	uint* r_dst = &AX;
1150 
1151 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(AY));
1152 }
1153 
1154 
m68k_op_adda_16_ai(void)1155 static void m68k_op_adda_16_ai(void)
1156 {
1157 	uint* r_dst = &AX;
1158 	uint src = MAKE_INT_16(OPER_AY_AI_16());
1159 
1160 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1161 }
1162 
1163 
m68k_op_adda_16_pi(void)1164 static void m68k_op_adda_16_pi(void)
1165 {
1166 	uint* r_dst = &AX;
1167 	uint src = MAKE_INT_16(OPER_AY_PI_16());
1168 
1169 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1170 }
1171 
1172 
m68k_op_adda_16_pd(void)1173 static void m68k_op_adda_16_pd(void)
1174 {
1175 	uint* r_dst = &AX;
1176 	uint src = MAKE_INT_16(OPER_AY_PD_16());
1177 
1178 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1179 }
1180 
1181 
m68k_op_adda_16_di(void)1182 static void m68k_op_adda_16_di(void)
1183 {
1184 	uint* r_dst = &AX;
1185 	uint src = MAKE_INT_16(OPER_AY_DI_16());
1186 
1187 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1188 }
1189 
1190 
m68k_op_adda_16_ix(void)1191 static void m68k_op_adda_16_ix(void)
1192 {
1193 	uint* r_dst = &AX;
1194 	uint src = MAKE_INT_16(OPER_AY_IX_16());
1195 
1196 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1197 }
1198 
1199 
m68k_op_adda_16_aw(void)1200 static void m68k_op_adda_16_aw(void)
1201 {
1202 	uint* r_dst = &AX;
1203 	uint src = MAKE_INT_16(OPER_AW_16());
1204 
1205 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1206 }
1207 
1208 
m68k_op_adda_16_al(void)1209 static void m68k_op_adda_16_al(void)
1210 {
1211 	uint* r_dst = &AX;
1212 	uint src = MAKE_INT_16(OPER_AL_16());
1213 
1214 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1215 }
1216 
1217 
m68k_op_adda_16_pcdi(void)1218 static void m68k_op_adda_16_pcdi(void)
1219 {
1220 	uint* r_dst = &AX;
1221 	uint src = MAKE_INT_16(OPER_PCDI_16());
1222 
1223 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1224 }
1225 
1226 
m68k_op_adda_16_pcix(void)1227 static void m68k_op_adda_16_pcix(void)
1228 {
1229 	uint* r_dst = &AX;
1230 	uint src = MAKE_INT_16(OPER_PCIX_16());
1231 
1232 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1233 }
1234 
1235 
m68k_op_adda_16_i(void)1236 static void m68k_op_adda_16_i(void)
1237 {
1238 	uint* r_dst = &AX;
1239 	uint src = MAKE_INT_16(OPER_I_16());
1240 
1241 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1242 }
1243 
1244 
m68k_op_adda_32_d(void)1245 static void m68k_op_adda_32_d(void)
1246 {
1247 	uint* r_dst = &AX;
1248 
1249 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + DY);
1250 }
1251 
1252 
m68k_op_adda_32_a(void)1253 static void m68k_op_adda_32_a(void)
1254 {
1255 	uint* r_dst = &AX;
1256 
1257 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + AY);
1258 }
1259 
1260 
m68k_op_adda_32_ai(void)1261 static void m68k_op_adda_32_ai(void)
1262 {
1263 	uint* r_dst = &AX;
1264 	uint src = OPER_AY_AI_32();
1265 
1266 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1267 }
1268 
1269 
m68k_op_adda_32_pi(void)1270 static void m68k_op_adda_32_pi(void)
1271 {
1272 	uint* r_dst = &AX;
1273 	uint src = OPER_AY_PI_32();
1274 
1275 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1276 }
1277 
1278 
m68k_op_adda_32_pd(void)1279 static void m68k_op_adda_32_pd(void)
1280 {
1281 	uint* r_dst = &AX;
1282 	uint src = OPER_AY_PD_32();
1283 
1284 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1285 }
1286 
1287 
m68k_op_adda_32_di(void)1288 static void m68k_op_adda_32_di(void)
1289 {
1290 	uint* r_dst = &AX;
1291 	uint src = OPER_AY_DI_32();
1292 
1293 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1294 }
1295 
1296 
m68k_op_adda_32_ix(void)1297 static void m68k_op_adda_32_ix(void)
1298 {
1299 	uint* r_dst = &AX;
1300 	uint src = OPER_AY_IX_32();
1301 
1302 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1303 }
1304 
1305 
m68k_op_adda_32_aw(void)1306 static void m68k_op_adda_32_aw(void)
1307 {
1308 	uint* r_dst = &AX;
1309 	uint src = OPER_AW_32();
1310 
1311 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1312 }
1313 
1314 
m68k_op_adda_32_al(void)1315 static void m68k_op_adda_32_al(void)
1316 {
1317 	uint* r_dst = &AX;
1318 	uint src = OPER_AL_32();
1319 
1320 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1321 }
1322 
1323 
m68k_op_adda_32_pcdi(void)1324 static void m68k_op_adda_32_pcdi(void)
1325 {
1326 	uint* r_dst = &AX;
1327 	uint src = OPER_PCDI_32();
1328 
1329 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1330 }
1331 
1332 
m68k_op_adda_32_pcix(void)1333 static void m68k_op_adda_32_pcix(void)
1334 {
1335 	uint* r_dst = &AX;
1336 	uint src = OPER_PCIX_32();
1337 
1338 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1339 }
1340 
1341 
m68k_op_adda_32_i(void)1342 static void m68k_op_adda_32_i(void)
1343 {
1344 	uint* r_dst = &AX;
1345 	uint src = OPER_I_32();
1346 
1347 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1348 }
1349 
1350 
m68k_op_addi_8_d(void)1351 static void m68k_op_addi_8_d(void)
1352 {
1353 	uint* r_dst = &DY;
1354 	uint src = OPER_I_8();
1355 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
1356 	uint res = src + dst;
1357 
1358 	FLAG_N = NFLAG_8(res);
1359 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1360 	FLAG_X = FLAG_C = CFLAG_8(res);
1361 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1362 
1363 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
1364 }
1365 
1366 
m68k_op_addi_8_ai(void)1367 static void m68k_op_addi_8_ai(void)
1368 {
1369 	uint src = OPER_I_8();
1370 	uint ea = EA_AY_AI_8();
1371 	uint dst = m68ki_read_8(ea);
1372 	uint res = src + dst;
1373 
1374 	FLAG_N = NFLAG_8(res);
1375 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1376 	FLAG_X = FLAG_C = CFLAG_8(res);
1377 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1378 
1379 	m68ki_write_8(ea, FLAG_Z);
1380 }
1381 
1382 
m68k_op_addi_8_pi(void)1383 static void m68k_op_addi_8_pi(void)
1384 {
1385 	uint src = OPER_I_8();
1386 	uint ea = EA_AY_PI_8();
1387 	uint dst = m68ki_read_8(ea);
1388 	uint res = src + dst;
1389 
1390 	FLAG_N = NFLAG_8(res);
1391 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1392 	FLAG_X = FLAG_C = CFLAG_8(res);
1393 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1394 
1395 	m68ki_write_8(ea, FLAG_Z);
1396 }
1397 
1398 
m68k_op_addi_8_pi7(void)1399 static void m68k_op_addi_8_pi7(void)
1400 {
1401 	uint src = OPER_I_8();
1402 	uint ea = EA_A7_PI_8();
1403 	uint dst = m68ki_read_8(ea);
1404 	uint res = src + dst;
1405 
1406 	FLAG_N = NFLAG_8(res);
1407 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1408 	FLAG_X = FLAG_C = CFLAG_8(res);
1409 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1410 
1411 	m68ki_write_8(ea, FLAG_Z);
1412 }
1413 
1414 
m68k_op_addi_8_pd(void)1415 static void m68k_op_addi_8_pd(void)
1416 {
1417 	uint src = OPER_I_8();
1418 	uint ea = EA_AY_PD_8();
1419 	uint dst = m68ki_read_8(ea);
1420 	uint res = src + dst;
1421 
1422 	FLAG_N = NFLAG_8(res);
1423 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1424 	FLAG_X = FLAG_C = CFLAG_8(res);
1425 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1426 
1427 	m68ki_write_8(ea, FLAG_Z);
1428 }
1429 
1430 
m68k_op_addi_8_pd7(void)1431 static void m68k_op_addi_8_pd7(void)
1432 {
1433 	uint src = OPER_I_8();
1434 	uint ea = EA_A7_PD_8();
1435 	uint dst = m68ki_read_8(ea);
1436 	uint res = src + dst;
1437 
1438 	FLAG_N = NFLAG_8(res);
1439 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1440 	FLAG_X = FLAG_C = CFLAG_8(res);
1441 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1442 
1443 	m68ki_write_8(ea, FLAG_Z);
1444 }
1445 
1446 
m68k_op_addi_8_di(void)1447 static void m68k_op_addi_8_di(void)
1448 {
1449 	uint src = OPER_I_8();
1450 	uint ea = EA_AY_DI_8();
1451 	uint dst = m68ki_read_8(ea);
1452 	uint res = src + dst;
1453 
1454 	FLAG_N = NFLAG_8(res);
1455 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1456 	FLAG_X = FLAG_C = CFLAG_8(res);
1457 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1458 
1459 	m68ki_write_8(ea, FLAG_Z);
1460 }
1461 
1462 
m68k_op_addi_8_ix(void)1463 static void m68k_op_addi_8_ix(void)
1464 {
1465 	uint src = OPER_I_8();
1466 	uint ea = EA_AY_IX_8();
1467 	uint dst = m68ki_read_8(ea);
1468 	uint res = src + dst;
1469 
1470 	FLAG_N = NFLAG_8(res);
1471 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1472 	FLAG_X = FLAG_C = CFLAG_8(res);
1473 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1474 
1475 	m68ki_write_8(ea, FLAG_Z);
1476 }
1477 
1478 
m68k_op_addi_8_aw(void)1479 static void m68k_op_addi_8_aw(void)
1480 {
1481 	uint src = OPER_I_8();
1482 	uint ea = EA_AW_8();
1483 	uint dst = m68ki_read_8(ea);
1484 	uint res = src + dst;
1485 
1486 	FLAG_N = NFLAG_8(res);
1487 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1488 	FLAG_X = FLAG_C = CFLAG_8(res);
1489 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1490 
1491 	m68ki_write_8(ea, FLAG_Z);
1492 }
1493 
1494 
m68k_op_addi_8_al(void)1495 static void m68k_op_addi_8_al(void)
1496 {
1497 	uint src = OPER_I_8();
1498 	uint ea = EA_AL_8();
1499 	uint dst = m68ki_read_8(ea);
1500 	uint res = src + dst;
1501 
1502 	FLAG_N = NFLAG_8(res);
1503 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1504 	FLAG_X = FLAG_C = CFLAG_8(res);
1505 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1506 
1507 	m68ki_write_8(ea, FLAG_Z);
1508 }
1509 
1510 
m68k_op_addi_16_d(void)1511 static void m68k_op_addi_16_d(void)
1512 {
1513 	uint* r_dst = &DY;
1514 	uint src = OPER_I_16();
1515 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
1516 	uint res = src + dst;
1517 
1518 	FLAG_N = NFLAG_16(res);
1519 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1520 	FLAG_X = FLAG_C = CFLAG_16(res);
1521 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1522 
1523 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
1524 }
1525 
1526 
m68k_op_addi_16_ai(void)1527 static void m68k_op_addi_16_ai(void)
1528 {
1529 	uint src = OPER_I_16();
1530 	uint ea = EA_AY_AI_16();
1531 	uint dst = m68ki_read_16(ea);
1532 	uint res = src + dst;
1533 
1534 	FLAG_N = NFLAG_16(res);
1535 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1536 	FLAG_X = FLAG_C = CFLAG_16(res);
1537 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1538 
1539 	m68ki_write_16(ea, FLAG_Z);
1540 }
1541 
1542 
m68k_op_addi_16_pi(void)1543 static void m68k_op_addi_16_pi(void)
1544 {
1545 	uint src = OPER_I_16();
1546 	uint ea = EA_AY_PI_16();
1547 	uint dst = m68ki_read_16(ea);
1548 	uint res = src + dst;
1549 
1550 	FLAG_N = NFLAG_16(res);
1551 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1552 	FLAG_X = FLAG_C = CFLAG_16(res);
1553 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1554 
1555 	m68ki_write_16(ea, FLAG_Z);
1556 }
1557 
1558 
m68k_op_addi_16_pd(void)1559 static void m68k_op_addi_16_pd(void)
1560 {
1561 	uint src = OPER_I_16();
1562 	uint ea = EA_AY_PD_16();
1563 	uint dst = m68ki_read_16(ea);
1564 	uint res = src + dst;
1565 
1566 	FLAG_N = NFLAG_16(res);
1567 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1568 	FLAG_X = FLAG_C = CFLAG_16(res);
1569 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1570 
1571 	m68ki_write_16(ea, FLAG_Z);
1572 }
1573 
1574 
m68k_op_addi_16_di(void)1575 static void m68k_op_addi_16_di(void)
1576 {
1577 	uint src = OPER_I_16();
1578 	uint ea = EA_AY_DI_16();
1579 	uint dst = m68ki_read_16(ea);
1580 	uint res = src + dst;
1581 
1582 	FLAG_N = NFLAG_16(res);
1583 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1584 	FLAG_X = FLAG_C = CFLAG_16(res);
1585 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1586 
1587 	m68ki_write_16(ea, FLAG_Z);
1588 }
1589 
1590 
m68k_op_addi_16_ix(void)1591 static void m68k_op_addi_16_ix(void)
1592 {
1593 	uint src = OPER_I_16();
1594 	uint ea = EA_AY_IX_16();
1595 	uint dst = m68ki_read_16(ea);
1596 	uint res = src + dst;
1597 
1598 	FLAG_N = NFLAG_16(res);
1599 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1600 	FLAG_X = FLAG_C = CFLAG_16(res);
1601 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1602 
1603 	m68ki_write_16(ea, FLAG_Z);
1604 }
1605 
1606 
m68k_op_addi_16_aw(void)1607 static void m68k_op_addi_16_aw(void)
1608 {
1609 	uint src = OPER_I_16();
1610 	uint ea = EA_AW_16();
1611 	uint dst = m68ki_read_16(ea);
1612 	uint res = src + dst;
1613 
1614 	FLAG_N = NFLAG_16(res);
1615 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1616 	FLAG_X = FLAG_C = CFLAG_16(res);
1617 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1618 
1619 	m68ki_write_16(ea, FLAG_Z);
1620 }
1621 
1622 
m68k_op_addi_16_al(void)1623 static void m68k_op_addi_16_al(void)
1624 {
1625 	uint src = OPER_I_16();
1626 	uint ea = EA_AL_16();
1627 	uint dst = m68ki_read_16(ea);
1628 	uint res = src + dst;
1629 
1630 	FLAG_N = NFLAG_16(res);
1631 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1632 	FLAG_X = FLAG_C = CFLAG_16(res);
1633 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1634 
1635 	m68ki_write_16(ea, FLAG_Z);
1636 }
1637 
1638 
m68k_op_addi_32_d(void)1639 static void m68k_op_addi_32_d(void)
1640 {
1641 	uint* r_dst = &DY;
1642 	uint src = OPER_I_32();
1643 	uint dst = *r_dst;
1644 	uint res = src + dst;
1645 
1646 	FLAG_N = NFLAG_32(res);
1647 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1648 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1649 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1650 
1651 	*r_dst = FLAG_Z;
1652 }
1653 
1654 
m68k_op_addi_32_ai(void)1655 static void m68k_op_addi_32_ai(void)
1656 {
1657 	uint src = OPER_I_32();
1658 	uint ea = EA_AY_AI_32();
1659 	uint dst = m68ki_read_32(ea);
1660 	uint res = src + dst;
1661 
1662 	FLAG_N = NFLAG_32(res);
1663 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1664 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1665 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1666 
1667 	m68ki_write_32(ea, FLAG_Z);
1668 }
1669 
1670 
m68k_op_addi_32_pi(void)1671 static void m68k_op_addi_32_pi(void)
1672 {
1673 	uint src = OPER_I_32();
1674 	uint ea = EA_AY_PI_32();
1675 	uint dst = m68ki_read_32(ea);
1676 	uint res = src + dst;
1677 
1678 	FLAG_N = NFLAG_32(res);
1679 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1680 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1681 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1682 
1683 	m68ki_write_32(ea, FLAG_Z);
1684 }
1685 
1686 
m68k_op_addi_32_pd(void)1687 static void m68k_op_addi_32_pd(void)
1688 {
1689 	uint src = OPER_I_32();
1690 	uint ea = EA_AY_PD_32();
1691 	uint dst = m68ki_read_32(ea);
1692 	uint res = src + dst;
1693 
1694 	FLAG_N = NFLAG_32(res);
1695 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1696 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1697 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1698 
1699 	m68ki_write_32(ea, FLAG_Z);
1700 }
1701 
1702 
m68k_op_addi_32_di(void)1703 static void m68k_op_addi_32_di(void)
1704 {
1705 	uint src = OPER_I_32();
1706 	uint ea = EA_AY_DI_32();
1707 	uint dst = m68ki_read_32(ea);
1708 	uint res = src + dst;
1709 
1710 	FLAG_N = NFLAG_32(res);
1711 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1712 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1713 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1714 
1715 	m68ki_write_32(ea, FLAG_Z);
1716 }
1717 
1718 
m68k_op_addi_32_ix(void)1719 static void m68k_op_addi_32_ix(void)
1720 {
1721 	uint src = OPER_I_32();
1722 	uint ea = EA_AY_IX_32();
1723 	uint dst = m68ki_read_32(ea);
1724 	uint res = src + dst;
1725 
1726 	FLAG_N = NFLAG_32(res);
1727 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1728 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1729 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1730 
1731 	m68ki_write_32(ea, FLAG_Z);
1732 }
1733 
1734 
m68k_op_addi_32_aw(void)1735 static void m68k_op_addi_32_aw(void)
1736 {
1737 	uint src = OPER_I_32();
1738 	uint ea = EA_AW_32();
1739 	uint dst = m68ki_read_32(ea);
1740 	uint res = src + dst;
1741 
1742 	FLAG_N = NFLAG_32(res);
1743 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1744 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1745 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1746 
1747 	m68ki_write_32(ea, FLAG_Z);
1748 }
1749 
1750 
m68k_op_addi_32_al(void)1751 static void m68k_op_addi_32_al(void)
1752 {
1753 	uint src = OPER_I_32();
1754 	uint ea = EA_AL_32();
1755 	uint dst = m68ki_read_32(ea);
1756 	uint res = src + dst;
1757 
1758 	FLAG_N = NFLAG_32(res);
1759 	FLAG_V = VFLAG_ADD_32(src, dst, res);
1760 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
1761 	FLAG_Z = MASK_OUT_ABOVE_32(res);
1762 
1763 	m68ki_write_32(ea, FLAG_Z);
1764 }
1765 
1766 
m68k_op_addq_8_d(void)1767 static void m68k_op_addq_8_d(void)
1768 {
1769 	uint* r_dst = &DY;
1770 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1771 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
1772 	uint res = src + dst;
1773 
1774 	FLAG_N = NFLAG_8(res);
1775 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1776 	FLAG_X = FLAG_C = CFLAG_8(res);
1777 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1778 
1779 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
1780 }
1781 
1782 
m68k_op_addq_8_ai(void)1783 static void m68k_op_addq_8_ai(void)
1784 {
1785 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1786 	uint ea = EA_AY_AI_8();
1787 	uint dst = m68ki_read_8(ea);
1788 	uint res = src + dst;
1789 
1790 	FLAG_N = NFLAG_8(res);
1791 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1792 	FLAG_X = FLAG_C = CFLAG_8(res);
1793 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1794 
1795 	m68ki_write_8(ea, FLAG_Z);
1796 }
1797 
1798 
m68k_op_addq_8_pi(void)1799 static void m68k_op_addq_8_pi(void)
1800 {
1801 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1802 	uint ea = EA_AY_PI_8();
1803 	uint dst = m68ki_read_8(ea);
1804 	uint res = src + dst;
1805 
1806 	FLAG_N = NFLAG_8(res);
1807 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1808 	FLAG_X = FLAG_C = CFLAG_8(res);
1809 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1810 
1811 	m68ki_write_8(ea, FLAG_Z);
1812 }
1813 
1814 
m68k_op_addq_8_pi7(void)1815 static void m68k_op_addq_8_pi7(void)
1816 {
1817 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1818 	uint ea = EA_A7_PI_8();
1819 	uint dst = m68ki_read_8(ea);
1820 	uint res = src + dst;
1821 
1822 	FLAG_N = NFLAG_8(res);
1823 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1824 	FLAG_X = FLAG_C = CFLAG_8(res);
1825 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1826 
1827 	m68ki_write_8(ea, FLAG_Z);
1828 }
1829 
1830 
m68k_op_addq_8_pd(void)1831 static void m68k_op_addq_8_pd(void)
1832 {
1833 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1834 	uint ea = EA_AY_PD_8();
1835 	uint dst = m68ki_read_8(ea);
1836 	uint res = src + dst;
1837 
1838 	FLAG_N = NFLAG_8(res);
1839 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1840 	FLAG_X = FLAG_C = CFLAG_8(res);
1841 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1842 
1843 	m68ki_write_8(ea, FLAG_Z);
1844 }
1845 
1846 
m68k_op_addq_8_pd7(void)1847 static void m68k_op_addq_8_pd7(void)
1848 {
1849 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1850 	uint ea = EA_A7_PD_8();
1851 	uint dst = m68ki_read_8(ea);
1852 	uint res = src + dst;
1853 
1854 	FLAG_N = NFLAG_8(res);
1855 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1856 	FLAG_X = FLAG_C = CFLAG_8(res);
1857 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1858 
1859 	m68ki_write_8(ea, FLAG_Z);
1860 }
1861 
1862 
m68k_op_addq_8_di(void)1863 static void m68k_op_addq_8_di(void)
1864 {
1865 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1866 	uint ea = EA_AY_DI_8();
1867 	uint dst = m68ki_read_8(ea);
1868 	uint res = src + dst;
1869 
1870 	FLAG_N = NFLAG_8(res);
1871 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1872 	FLAG_X = FLAG_C = CFLAG_8(res);
1873 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1874 
1875 	m68ki_write_8(ea, FLAG_Z);
1876 }
1877 
1878 
m68k_op_addq_8_ix(void)1879 static void m68k_op_addq_8_ix(void)
1880 {
1881 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1882 	uint ea = EA_AY_IX_8();
1883 	uint dst = m68ki_read_8(ea);
1884 	uint res = src + dst;
1885 
1886 	FLAG_N = NFLAG_8(res);
1887 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1888 	FLAG_X = FLAG_C = CFLAG_8(res);
1889 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1890 
1891 	m68ki_write_8(ea, FLAG_Z);
1892 }
1893 
1894 
m68k_op_addq_8_aw(void)1895 static void m68k_op_addq_8_aw(void)
1896 {
1897 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1898 	uint ea = EA_AW_8();
1899 	uint dst = m68ki_read_8(ea);
1900 	uint res = src + dst;
1901 
1902 	FLAG_N = NFLAG_8(res);
1903 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1904 	FLAG_X = FLAG_C = CFLAG_8(res);
1905 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1906 
1907 	m68ki_write_8(ea, FLAG_Z);
1908 }
1909 
1910 
m68k_op_addq_8_al(void)1911 static void m68k_op_addq_8_al(void)
1912 {
1913 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1914 	uint ea = EA_AL_8();
1915 	uint dst = m68ki_read_8(ea);
1916 	uint res = src + dst;
1917 
1918 	FLAG_N = NFLAG_8(res);
1919 	FLAG_V = VFLAG_ADD_8(src, dst, res);
1920 	FLAG_X = FLAG_C = CFLAG_8(res);
1921 	FLAG_Z = MASK_OUT_ABOVE_8(res);
1922 
1923 	m68ki_write_8(ea, FLAG_Z);
1924 }
1925 
1926 
m68k_op_addq_16_d(void)1927 static void m68k_op_addq_16_d(void)
1928 {
1929 	uint* r_dst = &DY;
1930 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1931 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
1932 	uint res = src + dst;
1933 
1934 	FLAG_N = NFLAG_16(res);
1935 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1936 	FLAG_X = FLAG_C = CFLAG_16(res);
1937 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1938 
1939 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
1940 }
1941 
1942 
m68k_op_addq_16_a(void)1943 static void m68k_op_addq_16_a(void)
1944 {
1945 	uint* r_dst = &AY;
1946 
1947 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + (((REG_IR >> 9) - 1) & 7) + 1);
1948 }
1949 
1950 
m68k_op_addq_16_ai(void)1951 static void m68k_op_addq_16_ai(void)
1952 {
1953 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1954 	uint ea = EA_AY_AI_16();
1955 	uint dst = m68ki_read_16(ea);
1956 	uint res = src + dst;
1957 
1958 	FLAG_N = NFLAG_16(res);
1959 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1960 	FLAG_X = FLAG_C = CFLAG_16(res);
1961 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1962 
1963 	m68ki_write_16(ea, FLAG_Z);
1964 }
1965 
1966 
m68k_op_addq_16_pi(void)1967 static void m68k_op_addq_16_pi(void)
1968 {
1969 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1970 	uint ea = EA_AY_PI_16();
1971 	uint dst = m68ki_read_16(ea);
1972 	uint res = src + dst;
1973 
1974 	FLAG_N = NFLAG_16(res);
1975 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1976 	FLAG_X = FLAG_C = CFLAG_16(res);
1977 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1978 
1979 	m68ki_write_16(ea, FLAG_Z);
1980 }
1981 
1982 
m68k_op_addq_16_pd(void)1983 static void m68k_op_addq_16_pd(void)
1984 {
1985 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
1986 	uint ea = EA_AY_PD_16();
1987 	uint dst = m68ki_read_16(ea);
1988 	uint res = src + dst;
1989 
1990 	FLAG_N = NFLAG_16(res);
1991 	FLAG_V = VFLAG_ADD_16(src, dst, res);
1992 	FLAG_X = FLAG_C = CFLAG_16(res);
1993 	FLAG_Z = MASK_OUT_ABOVE_16(res);
1994 
1995 	m68ki_write_16(ea, FLAG_Z);
1996 }
1997 
1998 
m68k_op_addq_16_di(void)1999 static void m68k_op_addq_16_di(void)
2000 {
2001 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2002 	uint ea = EA_AY_DI_16();
2003 	uint dst = m68ki_read_16(ea);
2004 	uint res = src + dst;
2005 
2006 	FLAG_N = NFLAG_16(res);
2007 	FLAG_V = VFLAG_ADD_16(src, dst, res);
2008 	FLAG_X = FLAG_C = CFLAG_16(res);
2009 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2010 
2011 	m68ki_write_16(ea, FLAG_Z);
2012 }
2013 
2014 
m68k_op_addq_16_ix(void)2015 static void m68k_op_addq_16_ix(void)
2016 {
2017 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2018 	uint ea = EA_AY_IX_16();
2019 	uint dst = m68ki_read_16(ea);
2020 	uint res = src + dst;
2021 
2022 	FLAG_N = NFLAG_16(res);
2023 	FLAG_V = VFLAG_ADD_16(src, dst, res);
2024 	FLAG_X = FLAG_C = CFLAG_16(res);
2025 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2026 
2027 	m68ki_write_16(ea, FLAG_Z);
2028 }
2029 
2030 
m68k_op_addq_16_aw(void)2031 static void m68k_op_addq_16_aw(void)
2032 {
2033 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2034 	uint ea = EA_AW_16();
2035 	uint dst = m68ki_read_16(ea);
2036 	uint res = src + dst;
2037 
2038 	FLAG_N = NFLAG_16(res);
2039 	FLAG_V = VFLAG_ADD_16(src, dst, res);
2040 	FLAG_X = FLAG_C = CFLAG_16(res);
2041 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2042 
2043 	m68ki_write_16(ea, FLAG_Z);
2044 }
2045 
2046 
m68k_op_addq_16_al(void)2047 static void m68k_op_addq_16_al(void)
2048 {
2049 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2050 	uint ea = EA_AL_16();
2051 	uint dst = m68ki_read_16(ea);
2052 	uint res = src + dst;
2053 
2054 	FLAG_N = NFLAG_16(res);
2055 	FLAG_V = VFLAG_ADD_16(src, dst, res);
2056 	FLAG_X = FLAG_C = CFLAG_16(res);
2057 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2058 
2059 	m68ki_write_16(ea, FLAG_Z);
2060 }
2061 
2062 
m68k_op_addq_32_d(void)2063 static void m68k_op_addq_32_d(void)
2064 {
2065 	uint* r_dst = &DY;
2066 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2067 	uint dst = *r_dst;
2068 	uint res = src + dst;
2069 
2070 	FLAG_N = NFLAG_32(res);
2071 	FLAG_V = VFLAG_ADD_32(src, dst, res);
2072 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
2073 	FLAG_Z = MASK_OUT_ABOVE_32(res);
2074 
2075 	*r_dst = FLAG_Z;
2076 }
2077 
2078 
m68k_op_addq_32_a(void)2079 static void m68k_op_addq_32_a(void)
2080 {
2081 	uint* r_dst = &AY;
2082 
2083 	*r_dst = MASK_OUT_ABOVE_32(*r_dst + (((REG_IR >> 9) - 1) & 7) + 1);
2084 }
2085 
2086 
m68k_op_addq_32_ai(void)2087 static void m68k_op_addq_32_ai(void)
2088 {
2089 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2090 	uint ea = EA_AY_AI_32();
2091 	uint dst = m68ki_read_32(ea);
2092 	uint res = src + dst;
2093 
2094 
2095 	FLAG_N = NFLAG_32(res);
2096 	FLAG_V = VFLAG_ADD_32(src, dst, res);
2097 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
2098 	FLAG_Z = MASK_OUT_ABOVE_32(res);
2099 
2100 	m68ki_write_32(ea, FLAG_Z);
2101 }
2102 
2103 
m68k_op_addq_32_pi(void)2104 static void m68k_op_addq_32_pi(void)
2105 {
2106 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2107 	uint ea = EA_AY_PI_32();
2108 	uint dst = m68ki_read_32(ea);
2109 	uint res = src + dst;
2110 
2111 
2112 	FLAG_N = NFLAG_32(res);
2113 	FLAG_V = VFLAG_ADD_32(src, dst, res);
2114 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
2115 	FLAG_Z = MASK_OUT_ABOVE_32(res);
2116 
2117 	m68ki_write_32(ea, FLAG_Z);
2118 }
2119 
2120 
m68k_op_addq_32_pd(void)2121 static void m68k_op_addq_32_pd(void)
2122 {
2123 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2124 	uint ea = EA_AY_PD_32();
2125 	uint dst = m68ki_read_32(ea);
2126 	uint res = src + dst;
2127 
2128 
2129 	FLAG_N = NFLAG_32(res);
2130 	FLAG_V = VFLAG_ADD_32(src, dst, res);
2131 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
2132 	FLAG_Z = MASK_OUT_ABOVE_32(res);
2133 
2134 	m68ki_write_32(ea, FLAG_Z);
2135 }
2136 
2137 
m68k_op_addq_32_di(void)2138 static void m68k_op_addq_32_di(void)
2139 {
2140 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2141 	uint ea = EA_AY_DI_32();
2142 	uint dst = m68ki_read_32(ea);
2143 	uint res = src + dst;
2144 
2145 
2146 	FLAG_N = NFLAG_32(res);
2147 	FLAG_V = VFLAG_ADD_32(src, dst, res);
2148 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
2149 	FLAG_Z = MASK_OUT_ABOVE_32(res);
2150 
2151 	m68ki_write_32(ea, FLAG_Z);
2152 }
2153 
2154 
m68k_op_addq_32_ix(void)2155 static void m68k_op_addq_32_ix(void)
2156 {
2157 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2158 	uint ea = EA_AY_IX_32();
2159 	uint dst = m68ki_read_32(ea);
2160 	uint res = src + dst;
2161 
2162 
2163 	FLAG_N = NFLAG_32(res);
2164 	FLAG_V = VFLAG_ADD_32(src, dst, res);
2165 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
2166 	FLAG_Z = MASK_OUT_ABOVE_32(res);
2167 
2168 	m68ki_write_32(ea, FLAG_Z);
2169 }
2170 
2171 
m68k_op_addq_32_aw(void)2172 static void m68k_op_addq_32_aw(void)
2173 {
2174 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2175 	uint ea = EA_AW_32();
2176 	uint dst = m68ki_read_32(ea);
2177 	uint res = src + dst;
2178 
2179 
2180 	FLAG_N = NFLAG_32(res);
2181 	FLAG_V = VFLAG_ADD_32(src, dst, res);
2182 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
2183 	FLAG_Z = MASK_OUT_ABOVE_32(res);
2184 
2185 	m68ki_write_32(ea, FLAG_Z);
2186 }
2187 
2188 
m68k_op_addq_32_al(void)2189 static void m68k_op_addq_32_al(void)
2190 {
2191 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
2192 	uint ea = EA_AL_32();
2193 	uint dst = m68ki_read_32(ea);
2194 	uint res = src + dst;
2195 
2196 
2197 	FLAG_N = NFLAG_32(res);
2198 	FLAG_V = VFLAG_ADD_32(src, dst, res);
2199 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
2200 	FLAG_Z = MASK_OUT_ABOVE_32(res);
2201 
2202 	m68ki_write_32(ea, FLAG_Z);
2203 }
2204 
2205 
m68k_op_addx_8_rr(void)2206 static void m68k_op_addx_8_rr(void)
2207 {
2208 	uint* r_dst = &DX;
2209 	uint src = MASK_OUT_ABOVE_8(DY);
2210 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
2211 	uint res = src + dst + XFLAG_AS_1();
2212 
2213 	FLAG_N = NFLAG_8(res);
2214 	FLAG_V = VFLAG_ADD_8(src, dst, res);
2215 	FLAG_X = FLAG_C = CFLAG_8(res);
2216 
2217 	res = MASK_OUT_ABOVE_8(res);
2218 	FLAG_Z |= res;
2219 
2220 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
2221 }
2222 
2223 
m68k_op_addx_16_rr(void)2224 static void m68k_op_addx_16_rr(void)
2225 {
2226 	uint* r_dst = &DX;
2227 	uint src = MASK_OUT_ABOVE_16(DY);
2228 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
2229 	uint res = src + dst + XFLAG_AS_1();
2230 
2231 	FLAG_N = NFLAG_16(res);
2232 	FLAG_V = VFLAG_ADD_16(src, dst, res);
2233 	FLAG_X = FLAG_C = CFLAG_16(res);
2234 
2235 	res = MASK_OUT_ABOVE_16(res);
2236 	FLAG_Z |= res;
2237 
2238 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
2239 }
2240 
2241 
m68k_op_addx_32_rr(void)2242 static void m68k_op_addx_32_rr(void)
2243 {
2244 	uint* r_dst = &DX;
2245 	uint src = DY;
2246 	uint dst = *r_dst;
2247 	uint res = src + dst + XFLAG_AS_1();
2248 
2249 	FLAG_N = NFLAG_32(res);
2250 	FLAG_V = VFLAG_ADD_32(src, dst, res);
2251 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
2252 
2253 	res = MASK_OUT_ABOVE_32(res);
2254 	FLAG_Z |= res;
2255 
2256 	*r_dst = res;
2257 }
2258 
2259 
m68k_op_addx_8_mm_ax7(void)2260 static void m68k_op_addx_8_mm_ax7(void)
2261 {
2262 	uint src = OPER_AY_PD_8();
2263 	uint ea  = EA_A7_PD_8();
2264 	uint dst = m68ki_read_8(ea);
2265 	uint res = src + dst + XFLAG_AS_1();
2266 
2267 	FLAG_N = NFLAG_8(res);
2268 	FLAG_V = VFLAG_ADD_8(src, dst, res);
2269 	FLAG_X = FLAG_C = CFLAG_8(res);
2270 
2271 	res = MASK_OUT_ABOVE_8(res);
2272 	FLAG_Z |= res;
2273 
2274 	m68ki_write_8(ea, res);
2275 }
2276 
2277 
m68k_op_addx_8_mm_ay7(void)2278 static void m68k_op_addx_8_mm_ay7(void)
2279 {
2280 	uint src = OPER_A7_PD_8();
2281 	uint ea  = EA_AX_PD_8();
2282 	uint dst = m68ki_read_8(ea);
2283 	uint res = src + dst + XFLAG_AS_1();
2284 
2285 	FLAG_N = NFLAG_8(res);
2286 	FLAG_V = VFLAG_ADD_8(src, dst, res);
2287 	FLAG_X = FLAG_C = CFLAG_8(res);
2288 
2289 	res = MASK_OUT_ABOVE_8(res);
2290 	FLAG_Z |= res;
2291 
2292 	m68ki_write_8(ea, res);
2293 }
2294 
2295 
m68k_op_addx_8_mm_axy7(void)2296 static void m68k_op_addx_8_mm_axy7(void)
2297 {
2298 	uint src = OPER_A7_PD_8();
2299 	uint ea  = EA_A7_PD_8();
2300 	uint dst = m68ki_read_8(ea);
2301 	uint res = src + dst + XFLAG_AS_1();
2302 
2303 	FLAG_N = NFLAG_8(res);
2304 	FLAG_V = VFLAG_ADD_8(src, dst, res);
2305 	FLAG_X = FLAG_C = CFLAG_8(res);
2306 
2307 	res = MASK_OUT_ABOVE_8(res);
2308 	FLAG_Z |= res;
2309 
2310 	m68ki_write_8(ea, res);
2311 }
2312 
2313 
m68k_op_addx_8_mm(void)2314 static void m68k_op_addx_8_mm(void)
2315 {
2316 	uint src = OPER_AY_PD_8();
2317 	uint ea  = EA_AX_PD_8();
2318 	uint dst = m68ki_read_8(ea);
2319 	uint res = src + dst + XFLAG_AS_1();
2320 
2321 	FLAG_N = NFLAG_8(res);
2322 	FLAG_V = VFLAG_ADD_8(src, dst, res);
2323 	FLAG_X = FLAG_C = CFLAG_8(res);
2324 
2325 	res = MASK_OUT_ABOVE_8(res);
2326 	FLAG_Z |= res;
2327 
2328 	m68ki_write_8(ea, res);
2329 }
2330 
2331 
m68k_op_addx_16_mm(void)2332 static void m68k_op_addx_16_mm(void)
2333 {
2334 	uint src = OPER_AY_PD_16();
2335 	uint ea  = EA_AX_PD_16();
2336 	uint dst = m68ki_read_16(ea);
2337 	uint res = src + dst + XFLAG_AS_1();
2338 
2339 	FLAG_N = NFLAG_16(res);
2340 	FLAG_V = VFLAG_ADD_16(src, dst, res);
2341 	FLAG_X = FLAG_C = CFLAG_16(res);
2342 
2343 	res = MASK_OUT_ABOVE_16(res);
2344 	FLAG_Z |= res;
2345 
2346 	m68ki_write_16(ea, res);
2347 }
2348 
2349 
m68k_op_addx_32_mm(void)2350 static void m68k_op_addx_32_mm(void)
2351 {
2352 	uint src = OPER_AY_PD_32();
2353 	uint ea  = EA_AX_PD_32();
2354 	uint dst = m68ki_read_32(ea);
2355 	uint res = src + dst + XFLAG_AS_1();
2356 
2357 	FLAG_N = NFLAG_32(res);
2358 	FLAG_V = VFLAG_ADD_32(src, dst, res);
2359 	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
2360 
2361 	res = MASK_OUT_ABOVE_32(res);
2362 	FLAG_Z |= res;
2363 
2364 	m68ki_write_32(ea, res);
2365 }
2366 
2367 
m68k_op_and_8_er_d(void)2368 static void m68k_op_and_8_er_d(void)
2369 {
2370 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (DY | 0xffffff00));
2371 
2372 	FLAG_N = NFLAG_8(FLAG_Z);
2373 	FLAG_C = CFLAG_CLEAR;
2374 	FLAG_V = VFLAG_CLEAR;
2375 }
2376 
2377 
m68k_op_and_8_er_ai(void)2378 static void m68k_op_and_8_er_ai(void)
2379 {
2380 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_AI_8() | 0xffffff00));
2381 
2382 	FLAG_N = NFLAG_8(FLAG_Z);
2383 	FLAG_C = CFLAG_CLEAR;
2384 	FLAG_V = VFLAG_CLEAR;
2385 }
2386 
2387 
m68k_op_and_8_er_pi(void)2388 static void m68k_op_and_8_er_pi(void)
2389 {
2390 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_PI_8() | 0xffffff00));
2391 
2392 	FLAG_N = NFLAG_8(FLAG_Z);
2393 	FLAG_C = CFLAG_CLEAR;
2394 	FLAG_V = VFLAG_CLEAR;
2395 }
2396 
2397 
m68k_op_and_8_er_pi7(void)2398 static void m68k_op_and_8_er_pi7(void)
2399 {
2400 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_A7_PI_8() | 0xffffff00));
2401 
2402 	FLAG_N = NFLAG_8(FLAG_Z);
2403 	FLAG_C = CFLAG_CLEAR;
2404 	FLAG_V = VFLAG_CLEAR;
2405 }
2406 
2407 
m68k_op_and_8_er_pd(void)2408 static void m68k_op_and_8_er_pd(void)
2409 {
2410 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_PD_8() | 0xffffff00));
2411 
2412 	FLAG_N = NFLAG_8(FLAG_Z);
2413 	FLAG_C = CFLAG_CLEAR;
2414 	FLAG_V = VFLAG_CLEAR;
2415 }
2416 
2417 
m68k_op_and_8_er_pd7(void)2418 static void m68k_op_and_8_er_pd7(void)
2419 {
2420 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_A7_PD_8() | 0xffffff00));
2421 
2422 	FLAG_N = NFLAG_8(FLAG_Z);
2423 	FLAG_C = CFLAG_CLEAR;
2424 	FLAG_V = VFLAG_CLEAR;
2425 }
2426 
2427 
m68k_op_and_8_er_di(void)2428 static void m68k_op_and_8_er_di(void)
2429 {
2430 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_DI_8() | 0xffffff00));
2431 
2432 	FLAG_N = NFLAG_8(FLAG_Z);
2433 	FLAG_C = CFLAG_CLEAR;
2434 	FLAG_V = VFLAG_CLEAR;
2435 }
2436 
2437 
m68k_op_and_8_er_ix(void)2438 static void m68k_op_and_8_er_ix(void)
2439 {
2440 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_IX_8() | 0xffffff00));
2441 
2442 	FLAG_N = NFLAG_8(FLAG_Z);
2443 	FLAG_C = CFLAG_CLEAR;
2444 	FLAG_V = VFLAG_CLEAR;
2445 }
2446 
2447 
m68k_op_and_8_er_aw(void)2448 static void m68k_op_and_8_er_aw(void)
2449 {
2450 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AW_8() | 0xffffff00));
2451 
2452 	FLAG_N = NFLAG_8(FLAG_Z);
2453 	FLAG_C = CFLAG_CLEAR;
2454 	FLAG_V = VFLAG_CLEAR;
2455 }
2456 
2457 
m68k_op_and_8_er_al(void)2458 static void m68k_op_and_8_er_al(void)
2459 {
2460 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AL_8() | 0xffffff00));
2461 
2462 	FLAG_N = NFLAG_8(FLAG_Z);
2463 	FLAG_C = CFLAG_CLEAR;
2464 	FLAG_V = VFLAG_CLEAR;
2465 }
2466 
2467 
m68k_op_and_8_er_pcdi(void)2468 static void m68k_op_and_8_er_pcdi(void)
2469 {
2470 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_PCDI_8() | 0xffffff00));
2471 
2472 	FLAG_N = NFLAG_8(FLAG_Z);
2473 	FLAG_C = CFLAG_CLEAR;
2474 	FLAG_V = VFLAG_CLEAR;
2475 }
2476 
2477 
m68k_op_and_8_er_pcix(void)2478 static void m68k_op_and_8_er_pcix(void)
2479 {
2480 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_PCIX_8() | 0xffffff00));
2481 
2482 	FLAG_N = NFLAG_8(FLAG_Z);
2483 	FLAG_C = CFLAG_CLEAR;
2484 	FLAG_V = VFLAG_CLEAR;
2485 }
2486 
2487 
m68k_op_and_8_er_i(void)2488 static void m68k_op_and_8_er_i(void)
2489 {
2490 	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_I_8() | 0xffffff00));
2491 
2492 	FLAG_N = NFLAG_8(FLAG_Z);
2493 	FLAG_C = CFLAG_CLEAR;
2494 	FLAG_V = VFLAG_CLEAR;
2495 }
2496 
2497 
m68k_op_and_16_er_d(void)2498 static void m68k_op_and_16_er_d(void)
2499 {
2500 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (DY | 0xffff0000));
2501 
2502 	FLAG_N = NFLAG_16(FLAG_Z);
2503 	FLAG_C = CFLAG_CLEAR;
2504 	FLAG_V = VFLAG_CLEAR;
2505 }
2506 
2507 
m68k_op_and_16_er_ai(void)2508 static void m68k_op_and_16_er_ai(void)
2509 {
2510 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_AI_16() | 0xffff0000));
2511 
2512 	FLAG_N = NFLAG_16(FLAG_Z);
2513 	FLAG_C = CFLAG_CLEAR;
2514 	FLAG_V = VFLAG_CLEAR;
2515 }
2516 
2517 
m68k_op_and_16_er_pi(void)2518 static void m68k_op_and_16_er_pi(void)
2519 {
2520 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_PI_16() | 0xffff0000));
2521 
2522 	FLAG_N = NFLAG_16(FLAG_Z);
2523 	FLAG_C = CFLAG_CLEAR;
2524 	FLAG_V = VFLAG_CLEAR;
2525 }
2526 
2527 
m68k_op_and_16_er_pd(void)2528 static void m68k_op_and_16_er_pd(void)
2529 {
2530 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_PD_16() | 0xffff0000));
2531 
2532 	FLAG_N = NFLAG_16(FLAG_Z);
2533 	FLAG_C = CFLAG_CLEAR;
2534 	FLAG_V = VFLAG_CLEAR;
2535 }
2536 
2537 
m68k_op_and_16_er_di(void)2538 static void m68k_op_and_16_er_di(void)
2539 {
2540 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_DI_16() | 0xffff0000));
2541 
2542 	FLAG_N = NFLAG_16(FLAG_Z);
2543 	FLAG_C = CFLAG_CLEAR;
2544 	FLAG_V = VFLAG_CLEAR;
2545 }
2546 
2547 
m68k_op_and_16_er_ix(void)2548 static void m68k_op_and_16_er_ix(void)
2549 {
2550 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_IX_16() | 0xffff0000));
2551 
2552 	FLAG_N = NFLAG_16(FLAG_Z);
2553 	FLAG_C = CFLAG_CLEAR;
2554 	FLAG_V = VFLAG_CLEAR;
2555 }
2556 
2557 
m68k_op_and_16_er_aw(void)2558 static void m68k_op_and_16_er_aw(void)
2559 {
2560 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AW_16() | 0xffff0000));
2561 
2562 	FLAG_N = NFLAG_16(FLAG_Z);
2563 	FLAG_C = CFLAG_CLEAR;
2564 	FLAG_V = VFLAG_CLEAR;
2565 }
2566 
2567 
m68k_op_and_16_er_al(void)2568 static void m68k_op_and_16_er_al(void)
2569 {
2570 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AL_16() | 0xffff0000));
2571 
2572 	FLAG_N = NFLAG_16(FLAG_Z);
2573 	FLAG_C = CFLAG_CLEAR;
2574 	FLAG_V = VFLAG_CLEAR;
2575 }
2576 
2577 
m68k_op_and_16_er_pcdi(void)2578 static void m68k_op_and_16_er_pcdi(void)
2579 {
2580 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_PCDI_16() | 0xffff0000));
2581 
2582 	FLAG_N = NFLAG_16(FLAG_Z);
2583 	FLAG_C = CFLAG_CLEAR;
2584 	FLAG_V = VFLAG_CLEAR;
2585 }
2586 
2587 
m68k_op_and_16_er_pcix(void)2588 static void m68k_op_and_16_er_pcix(void)
2589 {
2590 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_PCIX_16() | 0xffff0000));
2591 
2592 	FLAG_N = NFLAG_16(FLAG_Z);
2593 	FLAG_C = CFLAG_CLEAR;
2594 	FLAG_V = VFLAG_CLEAR;
2595 }
2596 
2597 
m68k_op_and_16_er_i(void)2598 static void m68k_op_and_16_er_i(void)
2599 {
2600 	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_I_16() | 0xffff0000));
2601 
2602 	FLAG_N = NFLAG_16(FLAG_Z);
2603 	FLAG_C = CFLAG_CLEAR;
2604 	FLAG_V = VFLAG_CLEAR;
2605 }
2606 
2607 
m68k_op_and_32_er_d(void)2608 static void m68k_op_and_32_er_d(void)
2609 {
2610 	FLAG_Z = DX &= DY;
2611 
2612 	FLAG_N = NFLAG_32(FLAG_Z);
2613 	FLAG_C = CFLAG_CLEAR;
2614 	FLAG_V = VFLAG_CLEAR;
2615 }
2616 
2617 
m68k_op_and_32_er_ai(void)2618 static void m68k_op_and_32_er_ai(void)
2619 {
2620 	FLAG_Z = DX &= OPER_AY_AI_32();
2621 
2622 	FLAG_N = NFLAG_32(FLAG_Z);
2623 	FLAG_C = CFLAG_CLEAR;
2624 	FLAG_V = VFLAG_CLEAR;
2625 }
2626 
2627 
m68k_op_and_32_er_pi(void)2628 static void m68k_op_and_32_er_pi(void)
2629 {
2630 	FLAG_Z = DX &= OPER_AY_PI_32();
2631 
2632 	FLAG_N = NFLAG_32(FLAG_Z);
2633 	FLAG_C = CFLAG_CLEAR;
2634 	FLAG_V = VFLAG_CLEAR;
2635 }
2636 
2637 
m68k_op_and_32_er_pd(void)2638 static void m68k_op_and_32_er_pd(void)
2639 {
2640 	FLAG_Z = DX &= OPER_AY_PD_32();
2641 
2642 	FLAG_N = NFLAG_32(FLAG_Z);
2643 	FLAG_C = CFLAG_CLEAR;
2644 	FLAG_V = VFLAG_CLEAR;
2645 }
2646 
2647 
m68k_op_and_32_er_di(void)2648 static void m68k_op_and_32_er_di(void)
2649 {
2650 	FLAG_Z = DX &= OPER_AY_DI_32();
2651 
2652 	FLAG_N = NFLAG_32(FLAG_Z);
2653 	FLAG_C = CFLAG_CLEAR;
2654 	FLAG_V = VFLAG_CLEAR;
2655 }
2656 
2657 
m68k_op_and_32_er_ix(void)2658 static void m68k_op_and_32_er_ix(void)
2659 {
2660 	FLAG_Z = DX &= OPER_AY_IX_32();
2661 
2662 	FLAG_N = NFLAG_32(FLAG_Z);
2663 	FLAG_C = CFLAG_CLEAR;
2664 	FLAG_V = VFLAG_CLEAR;
2665 }
2666 
2667 
m68k_op_and_32_er_aw(void)2668 static void m68k_op_and_32_er_aw(void)
2669 {
2670 	FLAG_Z = DX &= OPER_AW_32();
2671 
2672 	FLAG_N = NFLAG_32(FLAG_Z);
2673 	FLAG_C = CFLAG_CLEAR;
2674 	FLAG_V = VFLAG_CLEAR;
2675 }
2676 
2677 
m68k_op_and_32_er_al(void)2678 static void m68k_op_and_32_er_al(void)
2679 {
2680 	FLAG_Z = DX &= OPER_AL_32();
2681 
2682 	FLAG_N = NFLAG_32(FLAG_Z);
2683 	FLAG_C = CFLAG_CLEAR;
2684 	FLAG_V = VFLAG_CLEAR;
2685 }
2686 
2687 
m68k_op_and_32_er_pcdi(void)2688 static void m68k_op_and_32_er_pcdi(void)
2689 {
2690 	FLAG_Z = DX &= OPER_PCDI_32();
2691 
2692 	FLAG_N = NFLAG_32(FLAG_Z);
2693 	FLAG_C = CFLAG_CLEAR;
2694 	FLAG_V = VFLAG_CLEAR;
2695 }
2696 
2697 
m68k_op_and_32_er_pcix(void)2698 static void m68k_op_and_32_er_pcix(void)
2699 {
2700 	FLAG_Z = DX &= OPER_PCIX_32();
2701 
2702 	FLAG_N = NFLAG_32(FLAG_Z);
2703 	FLAG_C = CFLAG_CLEAR;
2704 	FLAG_V = VFLAG_CLEAR;
2705 }
2706 
2707 
m68k_op_and_32_er_i(void)2708 static void m68k_op_and_32_er_i(void)
2709 {
2710 	FLAG_Z = DX &= OPER_I_32();
2711 
2712 	FLAG_N = NFLAG_32(FLAG_Z);
2713 	FLAG_C = CFLAG_CLEAR;
2714 	FLAG_V = VFLAG_CLEAR;
2715 }
2716 
2717 
m68k_op_and_8_re_ai(void)2718 static void m68k_op_and_8_re_ai(void)
2719 {
2720 	uint ea = EA_AY_AI_8();
2721 	uint res = DX & m68ki_read_8(ea);
2722 
2723 	FLAG_N = NFLAG_8(res);
2724 	FLAG_C = CFLAG_CLEAR;
2725 	FLAG_V = VFLAG_CLEAR;
2726 	FLAG_Z = MASK_OUT_ABOVE_8(res);
2727 
2728 	m68ki_write_8(ea, FLAG_Z);
2729 }
2730 
2731 
m68k_op_and_8_re_pi(void)2732 static void m68k_op_and_8_re_pi(void)
2733 {
2734 	uint ea = EA_AY_PI_8();
2735 	uint res = DX & m68ki_read_8(ea);
2736 
2737 	FLAG_N = NFLAG_8(res);
2738 	FLAG_C = CFLAG_CLEAR;
2739 	FLAG_V = VFLAG_CLEAR;
2740 	FLAG_Z = MASK_OUT_ABOVE_8(res);
2741 
2742 	m68ki_write_8(ea, FLAG_Z);
2743 }
2744 
2745 
m68k_op_and_8_re_pi7(void)2746 static void m68k_op_and_8_re_pi7(void)
2747 {
2748 	uint ea = EA_A7_PI_8();
2749 	uint res = DX & m68ki_read_8(ea);
2750 
2751 	FLAG_N = NFLAG_8(res);
2752 	FLAG_C = CFLAG_CLEAR;
2753 	FLAG_V = VFLAG_CLEAR;
2754 	FLAG_Z = MASK_OUT_ABOVE_8(res);
2755 
2756 	m68ki_write_8(ea, FLAG_Z);
2757 }
2758 
2759 
m68k_op_and_8_re_pd(void)2760 static void m68k_op_and_8_re_pd(void)
2761 {
2762 	uint ea = EA_AY_PD_8();
2763 	uint res = DX & m68ki_read_8(ea);
2764 
2765 	FLAG_N = NFLAG_8(res);
2766 	FLAG_C = CFLAG_CLEAR;
2767 	FLAG_V = VFLAG_CLEAR;
2768 	FLAG_Z = MASK_OUT_ABOVE_8(res);
2769 
2770 	m68ki_write_8(ea, FLAG_Z);
2771 }
2772 
2773 
m68k_op_and_8_re_pd7(void)2774 static void m68k_op_and_8_re_pd7(void)
2775 {
2776 	uint ea = EA_A7_PD_8();
2777 	uint res = DX & m68ki_read_8(ea);
2778 
2779 	FLAG_N = NFLAG_8(res);
2780 	FLAG_C = CFLAG_CLEAR;
2781 	FLAG_V = VFLAG_CLEAR;
2782 	FLAG_Z = MASK_OUT_ABOVE_8(res);
2783 
2784 	m68ki_write_8(ea, FLAG_Z);
2785 }
2786 
2787 
m68k_op_and_8_re_di(void)2788 static void m68k_op_and_8_re_di(void)
2789 {
2790 	uint ea = EA_AY_DI_8();
2791 	uint res = DX & m68ki_read_8(ea);
2792 
2793 	FLAG_N = NFLAG_8(res);
2794 	FLAG_C = CFLAG_CLEAR;
2795 	FLAG_V = VFLAG_CLEAR;
2796 	FLAG_Z = MASK_OUT_ABOVE_8(res);
2797 
2798 	m68ki_write_8(ea, FLAG_Z);
2799 }
2800 
2801 
m68k_op_and_8_re_ix(void)2802 static void m68k_op_and_8_re_ix(void)
2803 {
2804 	uint ea = EA_AY_IX_8();
2805 	uint res = DX & m68ki_read_8(ea);
2806 
2807 	FLAG_N = NFLAG_8(res);
2808 	FLAG_C = CFLAG_CLEAR;
2809 	FLAG_V = VFLAG_CLEAR;
2810 	FLAG_Z = MASK_OUT_ABOVE_8(res);
2811 
2812 	m68ki_write_8(ea, FLAG_Z);
2813 }
2814 
2815 
m68k_op_and_8_re_aw(void)2816 static void m68k_op_and_8_re_aw(void)
2817 {
2818 	uint ea = EA_AW_8();
2819 	uint res = DX & m68ki_read_8(ea);
2820 
2821 	FLAG_N = NFLAG_8(res);
2822 	FLAG_C = CFLAG_CLEAR;
2823 	FLAG_V = VFLAG_CLEAR;
2824 	FLAG_Z = MASK_OUT_ABOVE_8(res);
2825 
2826 	m68ki_write_8(ea, FLAG_Z);
2827 }
2828 
2829 
m68k_op_and_8_re_al(void)2830 static void m68k_op_and_8_re_al(void)
2831 {
2832 	uint ea = EA_AL_8();
2833 	uint res = DX & m68ki_read_8(ea);
2834 
2835 	FLAG_N = NFLAG_8(res);
2836 	FLAG_C = CFLAG_CLEAR;
2837 	FLAG_V = VFLAG_CLEAR;
2838 	FLAG_Z = MASK_OUT_ABOVE_8(res);
2839 
2840 	m68ki_write_8(ea, FLAG_Z);
2841 }
2842 
2843 
m68k_op_and_16_re_ai(void)2844 static void m68k_op_and_16_re_ai(void)
2845 {
2846 	uint ea = EA_AY_AI_16();
2847 	uint res = DX & m68ki_read_16(ea);
2848 
2849 	FLAG_N = NFLAG_16(res);
2850 	FLAG_C = CFLAG_CLEAR;
2851 	FLAG_V = VFLAG_CLEAR;
2852 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2853 
2854 	m68ki_write_16(ea, FLAG_Z);
2855 }
2856 
2857 
m68k_op_and_16_re_pi(void)2858 static void m68k_op_and_16_re_pi(void)
2859 {
2860 	uint ea = EA_AY_PI_16();
2861 	uint res = DX & m68ki_read_16(ea);
2862 
2863 	FLAG_N = NFLAG_16(res);
2864 	FLAG_C = CFLAG_CLEAR;
2865 	FLAG_V = VFLAG_CLEAR;
2866 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2867 
2868 	m68ki_write_16(ea, FLAG_Z);
2869 }
2870 
2871 
m68k_op_and_16_re_pd(void)2872 static void m68k_op_and_16_re_pd(void)
2873 {
2874 	uint ea = EA_AY_PD_16();
2875 	uint res = DX & m68ki_read_16(ea);
2876 
2877 	FLAG_N = NFLAG_16(res);
2878 	FLAG_C = CFLAG_CLEAR;
2879 	FLAG_V = VFLAG_CLEAR;
2880 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2881 
2882 	m68ki_write_16(ea, FLAG_Z);
2883 }
2884 
2885 
m68k_op_and_16_re_di(void)2886 static void m68k_op_and_16_re_di(void)
2887 {
2888 	uint ea = EA_AY_DI_16();
2889 	uint res = DX & m68ki_read_16(ea);
2890 
2891 	FLAG_N = NFLAG_16(res);
2892 	FLAG_C = CFLAG_CLEAR;
2893 	FLAG_V = VFLAG_CLEAR;
2894 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2895 
2896 	m68ki_write_16(ea, FLAG_Z);
2897 }
2898 
2899 
m68k_op_and_16_re_ix(void)2900 static void m68k_op_and_16_re_ix(void)
2901 {
2902 	uint ea = EA_AY_IX_16();
2903 	uint res = DX & m68ki_read_16(ea);
2904 
2905 	FLAG_N = NFLAG_16(res);
2906 	FLAG_C = CFLAG_CLEAR;
2907 	FLAG_V = VFLAG_CLEAR;
2908 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2909 
2910 	m68ki_write_16(ea, FLAG_Z);
2911 }
2912 
2913 
m68k_op_and_16_re_aw(void)2914 static void m68k_op_and_16_re_aw(void)
2915 {
2916 	uint ea = EA_AW_16();
2917 	uint res = DX & m68ki_read_16(ea);
2918 
2919 	FLAG_N = NFLAG_16(res);
2920 	FLAG_C = CFLAG_CLEAR;
2921 	FLAG_V = VFLAG_CLEAR;
2922 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2923 
2924 	m68ki_write_16(ea, FLAG_Z);
2925 }
2926 
2927 
m68k_op_and_16_re_al(void)2928 static void m68k_op_and_16_re_al(void)
2929 {
2930 	uint ea = EA_AL_16();
2931 	uint res = DX & m68ki_read_16(ea);
2932 
2933 	FLAG_N = NFLAG_16(res);
2934 	FLAG_C = CFLAG_CLEAR;
2935 	FLAG_V = VFLAG_CLEAR;
2936 	FLAG_Z = MASK_OUT_ABOVE_16(res);
2937 
2938 	m68ki_write_16(ea, FLAG_Z);
2939 }
2940 
2941 
m68k_op_and_32_re_ai(void)2942 static void m68k_op_and_32_re_ai(void)
2943 {
2944 	uint ea = EA_AY_AI_32();
2945 	uint res = DX & m68ki_read_32(ea);
2946 
2947 	FLAG_N = NFLAG_32(res);
2948 	FLAG_Z = res;
2949 	FLAG_C = CFLAG_CLEAR;
2950 	FLAG_V = VFLAG_CLEAR;
2951 
2952 	m68ki_write_32(ea, res);
2953 }
2954 
2955 
m68k_op_and_32_re_pi(void)2956 static void m68k_op_and_32_re_pi(void)
2957 {
2958 	uint ea = EA_AY_PI_32();
2959 	uint res = DX & m68ki_read_32(ea);
2960 
2961 	FLAG_N = NFLAG_32(res);
2962 	FLAG_Z = res;
2963 	FLAG_C = CFLAG_CLEAR;
2964 	FLAG_V = VFLAG_CLEAR;
2965 
2966 	m68ki_write_32(ea, res);
2967 }
2968 
2969 
m68k_op_and_32_re_pd(void)2970 static void m68k_op_and_32_re_pd(void)
2971 {
2972 	uint ea = EA_AY_PD_32();
2973 	uint res = DX & m68ki_read_32(ea);
2974 
2975 	FLAG_N = NFLAG_32(res);
2976 	FLAG_Z = res;
2977 	FLAG_C = CFLAG_CLEAR;
2978 	FLAG_V = VFLAG_CLEAR;
2979 
2980 	m68ki_write_32(ea, res);
2981 }
2982 
2983 
m68k_op_and_32_re_di(void)2984 static void m68k_op_and_32_re_di(void)
2985 {
2986 	uint ea = EA_AY_DI_32();
2987 	uint res = DX & m68ki_read_32(ea);
2988 
2989 	FLAG_N = NFLAG_32(res);
2990 	FLAG_Z = res;
2991 	FLAG_C = CFLAG_CLEAR;
2992 	FLAG_V = VFLAG_CLEAR;
2993 
2994 	m68ki_write_32(ea, res);
2995 }
2996 
2997 
m68k_op_and_32_re_ix(void)2998 static void m68k_op_and_32_re_ix(void)
2999 {
3000 	uint ea = EA_AY_IX_32();
3001 	uint res = DX & m68ki_read_32(ea);
3002 
3003 	FLAG_N = NFLAG_32(res);
3004 	FLAG_Z = res;
3005 	FLAG_C = CFLAG_CLEAR;
3006 	FLAG_V = VFLAG_CLEAR;
3007 
3008 	m68ki_write_32(ea, res);
3009 }
3010 
3011 
m68k_op_and_32_re_aw(void)3012 static void m68k_op_and_32_re_aw(void)
3013 {
3014 	uint ea = EA_AW_32();
3015 	uint res = DX & m68ki_read_32(ea);
3016 
3017 	FLAG_N = NFLAG_32(res);
3018 	FLAG_Z = res;
3019 	FLAG_C = CFLAG_CLEAR;
3020 	FLAG_V = VFLAG_CLEAR;
3021 
3022 	m68ki_write_32(ea, res);
3023 }
3024 
3025 
m68k_op_and_32_re_al(void)3026 static void m68k_op_and_32_re_al(void)
3027 {
3028 	uint ea = EA_AL_32();
3029 	uint res = DX & m68ki_read_32(ea);
3030 
3031 	FLAG_N = NFLAG_32(res);
3032 	FLAG_Z = res;
3033 	FLAG_C = CFLAG_CLEAR;
3034 	FLAG_V = VFLAG_CLEAR;
3035 
3036 	m68ki_write_32(ea, res);
3037 }
3038 
3039 
m68k_op_andi_8_d(void)3040 static void m68k_op_andi_8_d(void)
3041 {
3042 	FLAG_Z = MASK_OUT_ABOVE_8(DY &= (OPER_I_8() | 0xffffff00));
3043 
3044 	FLAG_N = NFLAG_8(FLAG_Z);
3045 	FLAG_C = CFLAG_CLEAR;
3046 	FLAG_V = VFLAG_CLEAR;
3047 }
3048 
3049 
m68k_op_andi_8_ai(void)3050 static void m68k_op_andi_8_ai(void)
3051 {
3052 	uint src = OPER_I_8();
3053 	uint ea = EA_AY_AI_8();
3054 	uint res = src & m68ki_read_8(ea);
3055 
3056 	FLAG_N = NFLAG_8(res);
3057 	FLAG_Z = res;
3058 	FLAG_C = CFLAG_CLEAR;
3059 	FLAG_V = VFLAG_CLEAR;
3060 
3061 	m68ki_write_8(ea, res);
3062 }
3063 
3064 
m68k_op_andi_8_pi(void)3065 static void m68k_op_andi_8_pi(void)
3066 {
3067 	uint src = OPER_I_8();
3068 	uint ea = EA_AY_PI_8();
3069 	uint res = src & m68ki_read_8(ea);
3070 
3071 	FLAG_N = NFLAG_8(res);
3072 	FLAG_Z = res;
3073 	FLAG_C = CFLAG_CLEAR;
3074 	FLAG_V = VFLAG_CLEAR;
3075 
3076 	m68ki_write_8(ea, res);
3077 }
3078 
3079 
m68k_op_andi_8_pi7(void)3080 static void m68k_op_andi_8_pi7(void)
3081 {
3082 	uint src = OPER_I_8();
3083 	uint ea = EA_A7_PI_8();
3084 	uint res = src & m68ki_read_8(ea);
3085 
3086 	FLAG_N = NFLAG_8(res);
3087 	FLAG_Z = res;
3088 	FLAG_C = CFLAG_CLEAR;
3089 	FLAG_V = VFLAG_CLEAR;
3090 
3091 	m68ki_write_8(ea, res);
3092 }
3093 
3094 
m68k_op_andi_8_pd(void)3095 static void m68k_op_andi_8_pd(void)
3096 {
3097 	uint src = OPER_I_8();
3098 	uint ea = EA_AY_PD_8();
3099 	uint res = src & m68ki_read_8(ea);
3100 
3101 	FLAG_N = NFLAG_8(res);
3102 	FLAG_Z = res;
3103 	FLAG_C = CFLAG_CLEAR;
3104 	FLAG_V = VFLAG_CLEAR;
3105 
3106 	m68ki_write_8(ea, res);
3107 }
3108 
3109 
m68k_op_andi_8_pd7(void)3110 static void m68k_op_andi_8_pd7(void)
3111 {
3112 	uint src = OPER_I_8();
3113 	uint ea = EA_A7_PD_8();
3114 	uint res = src & m68ki_read_8(ea);
3115 
3116 	FLAG_N = NFLAG_8(res);
3117 	FLAG_Z = res;
3118 	FLAG_C = CFLAG_CLEAR;
3119 	FLAG_V = VFLAG_CLEAR;
3120 
3121 	m68ki_write_8(ea, res);
3122 }
3123 
3124 
m68k_op_andi_8_di(void)3125 static void m68k_op_andi_8_di(void)
3126 {
3127 	uint src = OPER_I_8();
3128 	uint ea = EA_AY_DI_8();
3129 	uint res = src & m68ki_read_8(ea);
3130 
3131 	FLAG_N = NFLAG_8(res);
3132 	FLAG_Z = res;
3133 	FLAG_C = CFLAG_CLEAR;
3134 	FLAG_V = VFLAG_CLEAR;
3135 
3136 	m68ki_write_8(ea, res);
3137 }
3138 
3139 
m68k_op_andi_8_ix(void)3140 static void m68k_op_andi_8_ix(void)
3141 {
3142 	uint src = OPER_I_8();
3143 	uint ea = EA_AY_IX_8();
3144 	uint res = src & m68ki_read_8(ea);
3145 
3146 	FLAG_N = NFLAG_8(res);
3147 	FLAG_Z = res;
3148 	FLAG_C = CFLAG_CLEAR;
3149 	FLAG_V = VFLAG_CLEAR;
3150 
3151 	m68ki_write_8(ea, res);
3152 }
3153 
3154 
m68k_op_andi_8_aw(void)3155 static void m68k_op_andi_8_aw(void)
3156 {
3157 	uint src = OPER_I_8();
3158 	uint ea = EA_AW_8();
3159 	uint res = src & m68ki_read_8(ea);
3160 
3161 	FLAG_N = NFLAG_8(res);
3162 	FLAG_Z = res;
3163 	FLAG_C = CFLAG_CLEAR;
3164 	FLAG_V = VFLAG_CLEAR;
3165 
3166 	m68ki_write_8(ea, res);
3167 }
3168 
3169 
m68k_op_andi_8_al(void)3170 static void m68k_op_andi_8_al(void)
3171 {
3172 	uint src = OPER_I_8();
3173 	uint ea = EA_AL_8();
3174 	uint res = src & m68ki_read_8(ea);
3175 
3176 	FLAG_N = NFLAG_8(res);
3177 	FLAG_Z = res;
3178 	FLAG_C = CFLAG_CLEAR;
3179 	FLAG_V = VFLAG_CLEAR;
3180 
3181 	m68ki_write_8(ea, res);
3182 }
3183 
3184 
m68k_op_andi_16_d(void)3185 static void m68k_op_andi_16_d(void)
3186 {
3187 	FLAG_Z = MASK_OUT_ABOVE_16(DY &= (OPER_I_16() | 0xffff0000));
3188 
3189 	FLAG_N = NFLAG_16(FLAG_Z);
3190 	FLAG_C = CFLAG_CLEAR;
3191 	FLAG_V = VFLAG_CLEAR;
3192 }
3193 
3194 
m68k_op_andi_16_ai(void)3195 static void m68k_op_andi_16_ai(void)
3196 {
3197 	uint src = OPER_I_16();
3198 	uint ea = EA_AY_AI_16();
3199 	uint res = src & m68ki_read_16(ea);
3200 
3201 	FLAG_N = NFLAG_16(res);
3202 	FLAG_Z = res;
3203 	FLAG_C = CFLAG_CLEAR;
3204 	FLAG_V = VFLAG_CLEAR;
3205 
3206 	m68ki_write_16(ea, res);
3207 }
3208 
3209 
m68k_op_andi_16_pi(void)3210 static void m68k_op_andi_16_pi(void)
3211 {
3212 	uint src = OPER_I_16();
3213 	uint ea = EA_AY_PI_16();
3214 	uint res = src & m68ki_read_16(ea);
3215 
3216 	FLAG_N = NFLAG_16(res);
3217 	FLAG_Z = res;
3218 	FLAG_C = CFLAG_CLEAR;
3219 	FLAG_V = VFLAG_CLEAR;
3220 
3221 	m68ki_write_16(ea, res);
3222 }
3223 
3224 
m68k_op_andi_16_pd(void)3225 static void m68k_op_andi_16_pd(void)
3226 {
3227 	uint src = OPER_I_16();
3228 	uint ea = EA_AY_PD_16();
3229 	uint res = src & m68ki_read_16(ea);
3230 
3231 	FLAG_N = NFLAG_16(res);
3232 	FLAG_Z = res;
3233 	FLAG_C = CFLAG_CLEAR;
3234 	FLAG_V = VFLAG_CLEAR;
3235 
3236 	m68ki_write_16(ea, res);
3237 }
3238 
3239 
m68k_op_andi_16_di(void)3240 static void m68k_op_andi_16_di(void)
3241 {
3242 	uint src = OPER_I_16();
3243 	uint ea = EA_AY_DI_16();
3244 	uint res = src & m68ki_read_16(ea);
3245 
3246 	FLAG_N = NFLAG_16(res);
3247 	FLAG_Z = res;
3248 	FLAG_C = CFLAG_CLEAR;
3249 	FLAG_V = VFLAG_CLEAR;
3250 
3251 	m68ki_write_16(ea, res);
3252 }
3253 
3254 
m68k_op_andi_16_ix(void)3255 static void m68k_op_andi_16_ix(void)
3256 {
3257 	uint src = OPER_I_16();
3258 	uint ea = EA_AY_IX_16();
3259 	uint res = src & m68ki_read_16(ea);
3260 
3261 	FLAG_N = NFLAG_16(res);
3262 	FLAG_Z = res;
3263 	FLAG_C = CFLAG_CLEAR;
3264 	FLAG_V = VFLAG_CLEAR;
3265 
3266 	m68ki_write_16(ea, res);
3267 }
3268 
3269 
m68k_op_andi_16_aw(void)3270 static void m68k_op_andi_16_aw(void)
3271 {
3272 	uint src = OPER_I_16();
3273 	uint ea = EA_AW_16();
3274 	uint res = src & m68ki_read_16(ea);
3275 
3276 	FLAG_N = NFLAG_16(res);
3277 	FLAG_Z = res;
3278 	FLAG_C = CFLAG_CLEAR;
3279 	FLAG_V = VFLAG_CLEAR;
3280 
3281 	m68ki_write_16(ea, res);
3282 }
3283 
3284 
m68k_op_andi_16_al(void)3285 static void m68k_op_andi_16_al(void)
3286 {
3287 	uint src = OPER_I_16();
3288 	uint ea = EA_AL_16();
3289 	uint res = src & m68ki_read_16(ea);
3290 
3291 	FLAG_N = NFLAG_16(res);
3292 	FLAG_Z = res;
3293 	FLAG_C = CFLAG_CLEAR;
3294 	FLAG_V = VFLAG_CLEAR;
3295 
3296 	m68ki_write_16(ea, res);
3297 }
3298 
3299 
m68k_op_andi_32_d(void)3300 static void m68k_op_andi_32_d(void)
3301 {
3302 	FLAG_Z = DY &= (OPER_I_32());
3303 
3304 	FLAG_N = NFLAG_32(FLAG_Z);
3305 	FLAG_C = CFLAG_CLEAR;
3306 	FLAG_V = VFLAG_CLEAR;
3307 }
3308 
3309 
m68k_op_andi_32_ai(void)3310 static void m68k_op_andi_32_ai(void)
3311 {
3312 	uint src = OPER_I_32();
3313 	uint ea = EA_AY_AI_32();
3314 	uint res = src & m68ki_read_32(ea);
3315 
3316 	FLAG_N = NFLAG_32(res);
3317 	FLAG_Z = res;
3318 	FLAG_C = CFLAG_CLEAR;
3319 	FLAG_V = VFLAG_CLEAR;
3320 
3321 	m68ki_write_32(ea, res);
3322 }
3323 
3324 
m68k_op_andi_32_pi(void)3325 static void m68k_op_andi_32_pi(void)
3326 {
3327 	uint src = OPER_I_32();
3328 	uint ea = EA_AY_PI_32();
3329 	uint res = src & m68ki_read_32(ea);
3330 
3331 	FLAG_N = NFLAG_32(res);
3332 	FLAG_Z = res;
3333 	FLAG_C = CFLAG_CLEAR;
3334 	FLAG_V = VFLAG_CLEAR;
3335 
3336 	m68ki_write_32(ea, res);
3337 }
3338 
3339 
m68k_op_andi_32_pd(void)3340 static void m68k_op_andi_32_pd(void)
3341 {
3342 	uint src = OPER_I_32();
3343 	uint ea = EA_AY_PD_32();
3344 	uint res = src & m68ki_read_32(ea);
3345 
3346 	FLAG_N = NFLAG_32(res);
3347 	FLAG_Z = res;
3348 	FLAG_C = CFLAG_CLEAR;
3349 	FLAG_V = VFLAG_CLEAR;
3350 
3351 	m68ki_write_32(ea, res);
3352 }
3353 
3354 
m68k_op_andi_32_di(void)3355 static void m68k_op_andi_32_di(void)
3356 {
3357 	uint src = OPER_I_32();
3358 	uint ea = EA_AY_DI_32();
3359 	uint res = src & m68ki_read_32(ea);
3360 
3361 	FLAG_N = NFLAG_32(res);
3362 	FLAG_Z = res;
3363 	FLAG_C = CFLAG_CLEAR;
3364 	FLAG_V = VFLAG_CLEAR;
3365 
3366 	m68ki_write_32(ea, res);
3367 }
3368 
3369 
m68k_op_andi_32_ix(void)3370 static void m68k_op_andi_32_ix(void)
3371 {
3372 	uint src = OPER_I_32();
3373 	uint ea = EA_AY_IX_32();
3374 	uint res = src & m68ki_read_32(ea);
3375 
3376 	FLAG_N = NFLAG_32(res);
3377 	FLAG_Z = res;
3378 	FLAG_C = CFLAG_CLEAR;
3379 	FLAG_V = VFLAG_CLEAR;
3380 
3381 	m68ki_write_32(ea, res);
3382 }
3383 
3384 
m68k_op_andi_32_aw(void)3385 static void m68k_op_andi_32_aw(void)
3386 {
3387 	uint src = OPER_I_32();
3388 	uint ea = EA_AW_32();
3389 	uint res = src & m68ki_read_32(ea);
3390 
3391 	FLAG_N = NFLAG_32(res);
3392 	FLAG_Z = res;
3393 	FLAG_C = CFLAG_CLEAR;
3394 	FLAG_V = VFLAG_CLEAR;
3395 
3396 	m68ki_write_32(ea, res);
3397 }
3398 
3399 
m68k_op_andi_32_al(void)3400 static void m68k_op_andi_32_al(void)
3401 {
3402 	uint src = OPER_I_32();
3403 	uint ea = EA_AL_32();
3404 	uint res = src & m68ki_read_32(ea);
3405 
3406 	FLAG_N = NFLAG_32(res);
3407 	FLAG_Z = res;
3408 	FLAG_C = CFLAG_CLEAR;
3409 	FLAG_V = VFLAG_CLEAR;
3410 
3411 	m68ki_write_32(ea, res);
3412 }
3413 
3414 
m68k_op_andi_16_toc(void)3415 static void m68k_op_andi_16_toc(void)
3416 {
3417 	m68ki_set_ccr(m68ki_get_ccr() & OPER_I_16());
3418 }
3419 
3420 
m68k_op_andi_16_tos(void)3421 static void m68k_op_andi_16_tos(void)
3422 {
3423 	if(FLAG_S)
3424 	{
3425 		uint src = OPER_I_16();
3426 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
3427 		m68ki_set_sr(m68ki_get_sr() & src);
3428 		return;
3429 	}
3430 	m68ki_exception_privilege_violation();
3431 }
3432 
3433 
m68k_op_asr_8_s(void)3434 static void m68k_op_asr_8_s(void)
3435 {
3436 	uint* r_dst = &DY;
3437 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3438 	uint src = MASK_OUT_ABOVE_8(*r_dst);
3439 	uint res = src >> shift;
3440 
3441 	if(shift != 0)
3442 		USE_CYCLES(shift<<CYC_SHIFT);
3443 
3444 	if(GET_MSB_8(src))
3445 		res |= m68ki_shift_8_table[shift];
3446 
3447 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3448 
3449 	FLAG_N = NFLAG_8(res);
3450 	FLAG_Z = res;
3451 	FLAG_V = VFLAG_CLEAR;
3452 	FLAG_X = FLAG_C = src << (9-shift);
3453 }
3454 
3455 
m68k_op_asr_16_s(void)3456 static void m68k_op_asr_16_s(void)
3457 {
3458 	uint* r_dst = &DY;
3459 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3460 	uint src = MASK_OUT_ABOVE_16(*r_dst);
3461 	uint res = src >> shift;
3462 
3463 	if(shift != 0)
3464 		USE_CYCLES(shift<<CYC_SHIFT);
3465 
3466 	if(GET_MSB_16(src))
3467 		res |= m68ki_shift_16_table[shift];
3468 
3469 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3470 
3471 	FLAG_N = NFLAG_16(res);
3472 	FLAG_Z = res;
3473 	FLAG_V = VFLAG_CLEAR;
3474 	FLAG_X = FLAG_C = src << (9-shift);
3475 }
3476 
3477 
m68k_op_asr_32_s(void)3478 static void m68k_op_asr_32_s(void)
3479 {
3480 	uint* r_dst = &DY;
3481 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3482 	uint src = *r_dst;
3483 	uint res = src >> shift;
3484 
3485 	if(shift != 0)
3486 		USE_CYCLES(shift<<CYC_SHIFT);
3487 
3488 	if(GET_MSB_32(src))
3489 		res |= m68ki_shift_32_table[shift];
3490 
3491 	*r_dst = res;
3492 
3493 	FLAG_N = NFLAG_32(res);
3494 	FLAG_Z = res;
3495 	FLAG_V = VFLAG_CLEAR;
3496 	FLAG_X = FLAG_C = src << (9-shift);
3497 }
3498 
3499 
m68k_op_asr_8_r(void)3500 static void m68k_op_asr_8_r(void)
3501 {
3502 	uint* r_dst = &DY;
3503 	uint shift = DX & 0x3f;
3504 	uint src = MASK_OUT_ABOVE_8(*r_dst);
3505 	uint res = src >> shift;
3506 
3507 	if(shift != 0)
3508 	{
3509 		USE_CYCLES(shift<<CYC_SHIFT);
3510 
3511 		if(shift < 8)
3512 		{
3513 			if(GET_MSB_8(src))
3514 				res |= m68ki_shift_8_table[shift];
3515 
3516 			*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3517 
3518 			FLAG_X = FLAG_C = src << (9-shift);
3519 			FLAG_N = NFLAG_8(res);
3520 			FLAG_Z = res;
3521 			FLAG_V = VFLAG_CLEAR;
3522 			return;
3523 		}
3524 
3525 		if(GET_MSB_8(src))
3526 		{
3527 			*r_dst |= 0xff;
3528 			FLAG_C = CFLAG_SET;
3529 			FLAG_X = XFLAG_SET;
3530 			FLAG_N = NFLAG_SET;
3531 			FLAG_Z = ZFLAG_CLEAR;
3532 			FLAG_V = VFLAG_CLEAR;
3533 			return;
3534 		}
3535 
3536 		*r_dst &= 0xffffff00;
3537 		FLAG_C = CFLAG_CLEAR;
3538 		FLAG_X = XFLAG_CLEAR;
3539 		FLAG_N = NFLAG_CLEAR;
3540 		FLAG_Z = ZFLAG_SET;
3541 		FLAG_V = VFLAG_CLEAR;
3542 		return;
3543 	}
3544 
3545 	FLAG_C = CFLAG_CLEAR;
3546 	FLAG_N = NFLAG_8(src);
3547 	FLAG_Z = src;
3548 	FLAG_V = VFLAG_CLEAR;
3549 }
3550 
3551 
m68k_op_asr_16_r(void)3552 static void m68k_op_asr_16_r(void)
3553 {
3554 	uint* r_dst = &DY;
3555 	uint shift = DX & 0x3f;
3556 	uint src = MASK_OUT_ABOVE_16(*r_dst);
3557 	uint res = src >> shift;
3558 
3559 	if(shift != 0)
3560 	{
3561 		USE_CYCLES(shift<<CYC_SHIFT);
3562 
3563 		if(shift < 16)
3564 		{
3565 			if(GET_MSB_16(src))
3566 				res |= m68ki_shift_16_table[shift];
3567 
3568 			*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3569 
3570 			FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
3571 			FLAG_N = NFLAG_16(res);
3572 			FLAG_Z = res;
3573 			FLAG_V = VFLAG_CLEAR;
3574 			return;
3575 		}
3576 
3577 		if(GET_MSB_16(src))
3578 		{
3579 			*r_dst |= 0xffff;
3580 			FLAG_C = CFLAG_SET;
3581 			FLAG_X = XFLAG_SET;
3582 			FLAG_N = NFLAG_SET;
3583 			FLAG_Z = ZFLAG_CLEAR;
3584 			FLAG_V = VFLAG_CLEAR;
3585 			return;
3586 		}
3587 
3588 		*r_dst &= 0xffff0000;
3589 		FLAG_C = CFLAG_CLEAR;
3590 		FLAG_X = XFLAG_CLEAR;
3591 		FLAG_N = NFLAG_CLEAR;
3592 		FLAG_Z = ZFLAG_SET;
3593 		FLAG_V = VFLAG_CLEAR;
3594 		return;
3595 	}
3596 
3597 	FLAG_C = CFLAG_CLEAR;
3598 	FLAG_N = NFLAG_16(src);
3599 	FLAG_Z = src;
3600 	FLAG_V = VFLAG_CLEAR;
3601 }
3602 
3603 
m68k_op_asr_32_r(void)3604 static void m68k_op_asr_32_r(void)
3605 {
3606 	uint* r_dst = &DY;
3607 	uint shift = DX & 0x3f;
3608 	uint src = *r_dst;
3609 	uint res = src >> shift;
3610 
3611 	if(shift != 0)
3612 	{
3613 		USE_CYCLES(shift<<CYC_SHIFT);
3614 
3615 		if(shift < 32)
3616 		{
3617 			if(GET_MSB_32(src))
3618 				res |= m68ki_shift_32_table[shift];
3619 
3620 			*r_dst = res;
3621 
3622 			FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
3623 			FLAG_N = NFLAG_32(res);
3624 			FLAG_Z = res;
3625 			FLAG_V = VFLAG_CLEAR;
3626 			return;
3627 		}
3628 
3629 		if(GET_MSB_32(src))
3630 		{
3631 			*r_dst = 0xffffffff;
3632 			FLAG_C = CFLAG_SET;
3633 			FLAG_X = XFLAG_SET;
3634 			FLAG_N = NFLAG_SET;
3635 			FLAG_Z = ZFLAG_CLEAR;
3636 			FLAG_V = VFLAG_CLEAR;
3637 			return;
3638 		}
3639 
3640 		*r_dst = 0;
3641 		FLAG_C = CFLAG_CLEAR;
3642 		FLAG_X = XFLAG_CLEAR;
3643 		FLAG_N = NFLAG_CLEAR;
3644 		FLAG_Z = ZFLAG_SET;
3645 		FLAG_V = VFLAG_CLEAR;
3646 		return;
3647 	}
3648 
3649 	FLAG_C = CFLAG_CLEAR;
3650 	FLAG_N = NFLAG_32(src);
3651 	FLAG_Z = src;
3652 	FLAG_V = VFLAG_CLEAR;
3653 }
3654 
3655 
m68k_op_asr_16_ai(void)3656 static void m68k_op_asr_16_ai(void)
3657 {
3658 	uint ea = EA_AY_AI_16();
3659 	uint src = m68ki_read_16(ea);
3660 	uint res = src >> 1;
3661 
3662 	if(GET_MSB_16(src))
3663 		res |= 0x8000;
3664 
3665 	m68ki_write_16(ea, res);
3666 
3667 	FLAG_N = NFLAG_16(res);
3668 	FLAG_Z = res;
3669 	FLAG_V = VFLAG_CLEAR;
3670 	FLAG_C = FLAG_X = src << 8;
3671 }
3672 
3673 
m68k_op_asr_16_pi(void)3674 static void m68k_op_asr_16_pi(void)
3675 {
3676 	uint ea = EA_AY_PI_16();
3677 	uint src = m68ki_read_16(ea);
3678 	uint res = src >> 1;
3679 
3680 	if(GET_MSB_16(src))
3681 		res |= 0x8000;
3682 
3683 	m68ki_write_16(ea, res);
3684 
3685 	FLAG_N = NFLAG_16(res);
3686 	FLAG_Z = res;
3687 	FLAG_V = VFLAG_CLEAR;
3688 	FLAG_C = FLAG_X = src << 8;
3689 }
3690 
3691 
m68k_op_asr_16_pd(void)3692 static void m68k_op_asr_16_pd(void)
3693 {
3694 	uint ea = EA_AY_PD_16();
3695 	uint src = m68ki_read_16(ea);
3696 	uint res = src >> 1;
3697 
3698 	if(GET_MSB_16(src))
3699 		res |= 0x8000;
3700 
3701 	m68ki_write_16(ea, res);
3702 
3703 	FLAG_N = NFLAG_16(res);
3704 	FLAG_Z = res;
3705 	FLAG_V = VFLAG_CLEAR;
3706 	FLAG_C = FLAG_X = src << 8;
3707 }
3708 
3709 
m68k_op_asr_16_di(void)3710 static void m68k_op_asr_16_di(void)
3711 {
3712 	uint ea = EA_AY_DI_16();
3713 	uint src = m68ki_read_16(ea);
3714 	uint res = src >> 1;
3715 
3716 	if(GET_MSB_16(src))
3717 		res |= 0x8000;
3718 
3719 	m68ki_write_16(ea, res);
3720 
3721 	FLAG_N = NFLAG_16(res);
3722 	FLAG_Z = res;
3723 	FLAG_V = VFLAG_CLEAR;
3724 	FLAG_C = FLAG_X = src << 8;
3725 }
3726 
3727 
m68k_op_asr_16_ix(void)3728 static void m68k_op_asr_16_ix(void)
3729 {
3730 	uint ea = EA_AY_IX_16();
3731 	uint src = m68ki_read_16(ea);
3732 	uint res = src >> 1;
3733 
3734 	if(GET_MSB_16(src))
3735 		res |= 0x8000;
3736 
3737 	m68ki_write_16(ea, res);
3738 
3739 	FLAG_N = NFLAG_16(res);
3740 	FLAG_Z = res;
3741 	FLAG_V = VFLAG_CLEAR;
3742 	FLAG_C = FLAG_X = src << 8;
3743 }
3744 
3745 
m68k_op_asr_16_aw(void)3746 static void m68k_op_asr_16_aw(void)
3747 {
3748 	uint ea = EA_AW_16();
3749 	uint src = m68ki_read_16(ea);
3750 	uint res = src >> 1;
3751 
3752 	if(GET_MSB_16(src))
3753 		res |= 0x8000;
3754 
3755 	m68ki_write_16(ea, res);
3756 
3757 	FLAG_N = NFLAG_16(res);
3758 	FLAG_Z = res;
3759 	FLAG_V = VFLAG_CLEAR;
3760 	FLAG_C = FLAG_X = src << 8;
3761 }
3762 
3763 
m68k_op_asr_16_al(void)3764 static void m68k_op_asr_16_al(void)
3765 {
3766 	uint ea = EA_AL_16();
3767 	uint src = m68ki_read_16(ea);
3768 	uint res = src >> 1;
3769 
3770 	if(GET_MSB_16(src))
3771 		res |= 0x8000;
3772 
3773 	m68ki_write_16(ea, res);
3774 
3775 	FLAG_N = NFLAG_16(res);
3776 	FLAG_Z = res;
3777 	FLAG_V = VFLAG_CLEAR;
3778 	FLAG_C = FLAG_X = src << 8;
3779 }
3780 
3781 
m68k_op_asl_8_s(void)3782 static void m68k_op_asl_8_s(void)
3783 {
3784 	uint* r_dst = &DY;
3785 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3786 	uint src = MASK_OUT_ABOVE_8(*r_dst);
3787 	uint res = MASK_OUT_ABOVE_8(src << shift);
3788 
3789 	if(shift != 0)
3790 		USE_CYCLES(shift<<CYC_SHIFT);
3791 
3792 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3793 
3794 	FLAG_X = FLAG_C = src << shift;
3795 	FLAG_N = NFLAG_8(res);
3796 	FLAG_Z = res;
3797 	src &= m68ki_shift_8_table[shift + 1];
3798 	FLAG_V = (!(src == 0 || (src == m68ki_shift_8_table[shift + 1] && shift < 8)))<<7;
3799 }
3800 
3801 
m68k_op_asl_16_s(void)3802 static void m68k_op_asl_16_s(void)
3803 {
3804 	uint* r_dst = &DY;
3805 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3806 	uint src = MASK_OUT_ABOVE_16(*r_dst);
3807 	uint res = MASK_OUT_ABOVE_16(src << shift);
3808 
3809 	if(shift != 0)
3810 		USE_CYCLES(shift<<CYC_SHIFT);
3811 
3812 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3813 
3814 	FLAG_N = NFLAG_16(res);
3815 	FLAG_Z = res;
3816 	FLAG_X = FLAG_C = src >> (8-shift);
3817 	src &= m68ki_shift_16_table[shift + 1];
3818 	FLAG_V = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7;
3819 }
3820 
3821 
m68k_op_asl_32_s(void)3822 static void m68k_op_asl_32_s(void)
3823 {
3824 	uint* r_dst = &DY;
3825 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3826 	uint src = *r_dst;
3827 	uint res = MASK_OUT_ABOVE_32(src << shift);
3828 
3829 	if(shift != 0)
3830 		USE_CYCLES(shift<<CYC_SHIFT);
3831 
3832 	*r_dst = res;
3833 
3834 	FLAG_N = NFLAG_32(res);
3835 	FLAG_Z = res;
3836 	FLAG_X = FLAG_C = src >> (24-shift);
3837 	src &= m68ki_shift_32_table[shift + 1];
3838 	FLAG_V = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7;
3839 }
3840 
3841 
m68k_op_asl_8_r(void)3842 static void m68k_op_asl_8_r(void)
3843 {
3844 	uint* r_dst = &DY;
3845 	uint shift = DX & 0x3f;
3846 	uint src = MASK_OUT_ABOVE_8(*r_dst);
3847 	uint res = MASK_OUT_ABOVE_8(src << shift);
3848 
3849 	if(shift != 0)
3850 	{
3851 		USE_CYCLES(shift<<CYC_SHIFT);
3852 
3853 		if(shift < 8)
3854 		{
3855 			*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3856 			FLAG_X = FLAG_C = src << shift;
3857 			FLAG_N = NFLAG_8(res);
3858 			FLAG_Z = res;
3859 			src &= m68ki_shift_8_table[shift + 1];
3860 			FLAG_V = (!(src == 0 || src == m68ki_shift_8_table[shift + 1]))<<7;
3861 			return;
3862 		}
3863 
3864 		*r_dst &= 0xffffff00;
3865 		FLAG_X = FLAG_C = ((shift == 8 ? src & 1 : 0))<<8;
3866 		FLAG_N = NFLAG_CLEAR;
3867 		FLAG_Z = ZFLAG_SET;
3868 		FLAG_V = (!(src == 0))<<7;
3869 		return;
3870 	}
3871 
3872 	FLAG_C = CFLAG_CLEAR;
3873 	FLAG_N = NFLAG_8(src);
3874 	FLAG_Z = src;
3875 	FLAG_V = VFLAG_CLEAR;
3876 }
3877 
3878 
m68k_op_asl_16_r(void)3879 static void m68k_op_asl_16_r(void)
3880 {
3881 	uint* r_dst = &DY;
3882 	uint shift = DX & 0x3f;
3883 	uint src = MASK_OUT_ABOVE_16(*r_dst);
3884 	uint res = MASK_OUT_ABOVE_16(src << shift);
3885 
3886 	if(shift != 0)
3887 	{
3888 		USE_CYCLES(shift<<CYC_SHIFT);
3889 
3890 		if(shift < 16)
3891 		{
3892 			*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3893 			FLAG_X = FLAG_C = (src << shift) >> 8;
3894 			FLAG_N = NFLAG_16(res);
3895 			FLAG_Z = res;
3896 			src &= m68ki_shift_16_table[shift + 1];
3897 			FLAG_V = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7;
3898 			return;
3899 		}
3900 
3901 		*r_dst &= 0xffff0000;
3902 		FLAG_X = FLAG_C = ((shift == 16 ? src & 1 : 0))<<8;
3903 		FLAG_N = NFLAG_CLEAR;
3904 		FLAG_Z = ZFLAG_SET;
3905 		FLAG_V = (!(src == 0))<<7;
3906 		return;
3907 	}
3908 
3909 	FLAG_C = CFLAG_CLEAR;
3910 	FLAG_N = NFLAG_16(src);
3911 	FLAG_Z = src;
3912 	FLAG_V = VFLAG_CLEAR;
3913 }
3914 
3915 
m68k_op_asl_32_r(void)3916 static void m68k_op_asl_32_r(void)
3917 {
3918 	uint* r_dst = &DY;
3919 	uint shift = DX & 0x3f;
3920 	uint src = *r_dst;
3921 	uint res = MASK_OUT_ABOVE_32(src << shift);
3922 
3923 	if(shift != 0)
3924 	{
3925 		USE_CYCLES(shift<<CYC_SHIFT);
3926 
3927 		if(shift < 32)
3928 		{
3929 			*r_dst = res;
3930 			FLAG_X = FLAG_C = (src >> (32 - shift)) << 8;
3931 			FLAG_N = NFLAG_32(res);
3932 			FLAG_Z = res;
3933 			src &= m68ki_shift_32_table[shift + 1];
3934 			FLAG_V = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7;
3935 			return;
3936 		}
3937 
3938 		*r_dst = 0;
3939 		FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8;
3940 		FLAG_N = NFLAG_CLEAR;
3941 		FLAG_Z = ZFLAG_SET;
3942 		FLAG_V = (!(src == 0))<<7;
3943 		return;
3944 	}
3945 
3946 	FLAG_C = CFLAG_CLEAR;
3947 	FLAG_N = NFLAG_32(src);
3948 	FLAG_Z = src;
3949 	FLAG_V = VFLAG_CLEAR;
3950 }
3951 
3952 
m68k_op_asl_16_ai(void)3953 static void m68k_op_asl_16_ai(void)
3954 {
3955 	uint ea = EA_AY_AI_16();
3956 	uint src = m68ki_read_16(ea);
3957 	uint res = MASK_OUT_ABOVE_16(src << 1);
3958 
3959 	m68ki_write_16(ea, res);
3960 
3961 	FLAG_N = NFLAG_16(res);
3962 	FLAG_Z = res;
3963 	FLAG_X = FLAG_C = src >> 7;
3964 	src &= 0xc000;
3965 	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
3966 }
3967 
3968 
m68k_op_asl_16_pi(void)3969 static void m68k_op_asl_16_pi(void)
3970 {
3971 	uint ea = EA_AY_PI_16();
3972 	uint src = m68ki_read_16(ea);
3973 	uint res = MASK_OUT_ABOVE_16(src << 1);
3974 
3975 	m68ki_write_16(ea, res);
3976 
3977 	FLAG_N = NFLAG_16(res);
3978 	FLAG_Z = res;
3979 	FLAG_X = FLAG_C = src >> 7;
3980 	src &= 0xc000;
3981 	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
3982 }
3983 
3984 
m68k_op_asl_16_pd(void)3985 static void m68k_op_asl_16_pd(void)
3986 {
3987 	uint ea = EA_AY_PD_16();
3988 	uint src = m68ki_read_16(ea);
3989 	uint res = MASK_OUT_ABOVE_16(src << 1);
3990 
3991 	m68ki_write_16(ea, res);
3992 
3993 	FLAG_N = NFLAG_16(res);
3994 	FLAG_Z = res;
3995 	FLAG_X = FLAG_C = src >> 7;
3996 	src &= 0xc000;
3997 	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
3998 }
3999 
4000 
m68k_op_asl_16_di(void)4001 static void m68k_op_asl_16_di(void)
4002 {
4003 	uint ea = EA_AY_DI_16();
4004 	uint src = m68ki_read_16(ea);
4005 	uint res = MASK_OUT_ABOVE_16(src << 1);
4006 
4007 	m68ki_write_16(ea, res);
4008 
4009 	FLAG_N = NFLAG_16(res);
4010 	FLAG_Z = res;
4011 	FLAG_X = FLAG_C = src >> 7;
4012 	src &= 0xc000;
4013 	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
4014 }
4015 
4016 
m68k_op_asl_16_ix(void)4017 static void m68k_op_asl_16_ix(void)
4018 {
4019 	uint ea = EA_AY_IX_16();
4020 	uint src = m68ki_read_16(ea);
4021 	uint res = MASK_OUT_ABOVE_16(src << 1);
4022 
4023 	m68ki_write_16(ea, res);
4024 
4025 	FLAG_N = NFLAG_16(res);
4026 	FLAG_Z = res;
4027 	FLAG_X = FLAG_C = src >> 7;
4028 	src &= 0xc000;
4029 	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
4030 }
4031 
4032 
m68k_op_asl_16_aw(void)4033 static void m68k_op_asl_16_aw(void)
4034 {
4035 	uint ea = EA_AW_16();
4036 	uint src = m68ki_read_16(ea);
4037 	uint res = MASK_OUT_ABOVE_16(src << 1);
4038 
4039 	m68ki_write_16(ea, res);
4040 
4041 	FLAG_N = NFLAG_16(res);
4042 	FLAG_Z = res;
4043 	FLAG_X = FLAG_C = src >> 7;
4044 	src &= 0xc000;
4045 	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
4046 }
4047 
4048 
m68k_op_asl_16_al(void)4049 static void m68k_op_asl_16_al(void)
4050 {
4051 	uint ea = EA_AL_16();
4052 	uint src = m68ki_read_16(ea);
4053 	uint res = MASK_OUT_ABOVE_16(src << 1);
4054 
4055 	m68ki_write_16(ea, res);
4056 
4057 	FLAG_N = NFLAG_16(res);
4058 	FLAG_Z = res;
4059 	FLAG_X = FLAG_C = src >> 7;
4060 	src &= 0xc000;
4061 	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
4062 }
4063 
4064 
m68k_op_bhi_8(void)4065 static void m68k_op_bhi_8(void)
4066 {
4067 	if(COND_HI())
4068 	{
4069 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4070 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4071 		return;
4072 	}
4073 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4074 }
4075 
4076 
m68k_op_bls_8(void)4077 static void m68k_op_bls_8(void)
4078 {
4079 	if(COND_LS())
4080 	{
4081 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4082 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4083 		return;
4084 	}
4085 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4086 }
4087 
4088 
m68k_op_bcc_8(void)4089 static void m68k_op_bcc_8(void)
4090 {
4091 	if(COND_CC())
4092 	{
4093 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4094 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4095 		return;
4096 	}
4097 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4098 }
4099 
4100 
m68k_op_bcs_8(void)4101 static void m68k_op_bcs_8(void)
4102 {
4103 	if(COND_CS())
4104 	{
4105 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4106 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4107 		return;
4108 	}
4109 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4110 }
4111 
4112 
m68k_op_bne_8(void)4113 static void m68k_op_bne_8(void)
4114 {
4115 	if(COND_NE())
4116 	{
4117 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4118 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4119 		return;
4120 	}
4121 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4122 }
4123 
4124 
m68k_op_beq_8(void)4125 static void m68k_op_beq_8(void)
4126 {
4127 	if(COND_EQ())
4128 	{
4129 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4130 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4131 		return;
4132 	}
4133 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4134 }
4135 
4136 
m68k_op_bvc_8(void)4137 static void m68k_op_bvc_8(void)
4138 {
4139 	if(COND_VC())
4140 	{
4141 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4142 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4143 		return;
4144 	}
4145 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4146 }
4147 
4148 
m68k_op_bvs_8(void)4149 static void m68k_op_bvs_8(void)
4150 {
4151 	if(COND_VS())
4152 	{
4153 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4154 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4155 		return;
4156 	}
4157 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4158 }
4159 
4160 
m68k_op_bpl_8(void)4161 static void m68k_op_bpl_8(void)
4162 {
4163 	if(COND_PL())
4164 	{
4165 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4166 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4167 		return;
4168 	}
4169 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4170 }
4171 
4172 
m68k_op_bmi_8(void)4173 static void m68k_op_bmi_8(void)
4174 {
4175 	if(COND_MI())
4176 	{
4177 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4178 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4179 		return;
4180 	}
4181 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4182 }
4183 
4184 
m68k_op_bge_8(void)4185 static void m68k_op_bge_8(void)
4186 {
4187 	if(COND_GE())
4188 	{
4189 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4190 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4191 		return;
4192 	}
4193 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4194 }
4195 
4196 
m68k_op_blt_8(void)4197 static void m68k_op_blt_8(void)
4198 {
4199 	if(COND_LT())
4200 	{
4201 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4202 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4203 		return;
4204 	}
4205 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4206 }
4207 
4208 
m68k_op_bgt_8(void)4209 static void m68k_op_bgt_8(void)
4210 {
4211 	if(COND_GT())
4212 	{
4213 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4214 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4215 		return;
4216 	}
4217 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4218 }
4219 
4220 
m68k_op_ble_8(void)4221 static void m68k_op_ble_8(void)
4222 {
4223 	if(COND_LE())
4224 	{
4225 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4226 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4227 		return;
4228 	}
4229 	USE_CYCLES(CYC_BCC_NOTAKE_B);
4230 }
4231 
4232 
m68k_op_bhi_16(void)4233 static void m68k_op_bhi_16(void)
4234 {
4235 	if(COND_HI())
4236 	{
4237 		uint offset = OPER_I_16();
4238 		REG_PC -= 2;
4239 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4240 		m68ki_branch_16(offset);
4241 		return;
4242 	}
4243 	REG_PC += 2;
4244 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4245 }
4246 
4247 
m68k_op_bls_16(void)4248 static void m68k_op_bls_16(void)
4249 {
4250 	if(COND_LS())
4251 	{
4252 		uint offset = OPER_I_16();
4253 		REG_PC -= 2;
4254 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4255 		m68ki_branch_16(offset);
4256 		return;
4257 	}
4258 	REG_PC += 2;
4259 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4260 }
4261 
4262 
m68k_op_bcc_16(void)4263 static void m68k_op_bcc_16(void)
4264 {
4265 	if(COND_CC())
4266 	{
4267 		uint offset = OPER_I_16();
4268 		REG_PC -= 2;
4269 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4270 		m68ki_branch_16(offset);
4271 		return;
4272 	}
4273 	REG_PC += 2;
4274 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4275 }
4276 
4277 
m68k_op_bcs_16(void)4278 static void m68k_op_bcs_16(void)
4279 {
4280 	if(COND_CS())
4281 	{
4282 		uint offset = OPER_I_16();
4283 		REG_PC -= 2;
4284 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4285 		m68ki_branch_16(offset);
4286 		return;
4287 	}
4288 	REG_PC += 2;
4289 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4290 }
4291 
4292 
m68k_op_bne_16(void)4293 static void m68k_op_bne_16(void)
4294 {
4295 	if(COND_NE())
4296 	{
4297 		uint offset = OPER_I_16();
4298 		REG_PC -= 2;
4299 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4300 		m68ki_branch_16(offset);
4301 		return;
4302 	}
4303 	REG_PC += 2;
4304 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4305 }
4306 
4307 
m68k_op_beq_16(void)4308 static void m68k_op_beq_16(void)
4309 {
4310 	if(COND_EQ())
4311 	{
4312 		uint offset = OPER_I_16();
4313 		REG_PC -= 2;
4314 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4315 		m68ki_branch_16(offset);
4316 		return;
4317 	}
4318 	REG_PC += 2;
4319 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4320 }
4321 
4322 
m68k_op_bvc_16(void)4323 static void m68k_op_bvc_16(void)
4324 {
4325 	if(COND_VC())
4326 	{
4327 		uint offset = OPER_I_16();
4328 		REG_PC -= 2;
4329 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4330 		m68ki_branch_16(offset);
4331 		return;
4332 	}
4333 	REG_PC += 2;
4334 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4335 }
4336 
4337 
m68k_op_bvs_16(void)4338 static void m68k_op_bvs_16(void)
4339 {
4340 	if(COND_VS())
4341 	{
4342 		uint offset = OPER_I_16();
4343 		REG_PC -= 2;
4344 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4345 		m68ki_branch_16(offset);
4346 		return;
4347 	}
4348 	REG_PC += 2;
4349 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4350 }
4351 
4352 
m68k_op_bpl_16(void)4353 static void m68k_op_bpl_16(void)
4354 {
4355 	if(COND_PL())
4356 	{
4357 		uint offset = OPER_I_16();
4358 		REG_PC -= 2;
4359 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4360 		m68ki_branch_16(offset);
4361 		return;
4362 	}
4363 	REG_PC += 2;
4364 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4365 }
4366 
4367 
m68k_op_bmi_16(void)4368 static void m68k_op_bmi_16(void)
4369 {
4370 	if(COND_MI())
4371 	{
4372 		uint offset = OPER_I_16();
4373 		REG_PC -= 2;
4374 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4375 		m68ki_branch_16(offset);
4376 		return;
4377 	}
4378 	REG_PC += 2;
4379 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4380 }
4381 
4382 
m68k_op_bge_16(void)4383 static void m68k_op_bge_16(void)
4384 {
4385 	if(COND_GE())
4386 	{
4387 		uint offset = OPER_I_16();
4388 		REG_PC -= 2;
4389 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4390 		m68ki_branch_16(offset);
4391 		return;
4392 	}
4393 	REG_PC += 2;
4394 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4395 }
4396 
4397 
m68k_op_blt_16(void)4398 static void m68k_op_blt_16(void)
4399 {
4400 	if(COND_LT())
4401 	{
4402 		uint offset = OPER_I_16();
4403 		REG_PC -= 2;
4404 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4405 		m68ki_branch_16(offset);
4406 		return;
4407 	}
4408 	REG_PC += 2;
4409 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4410 }
4411 
4412 
m68k_op_bgt_16(void)4413 static void m68k_op_bgt_16(void)
4414 {
4415 	if(COND_GT())
4416 	{
4417 		uint offset = OPER_I_16();
4418 		REG_PC -= 2;
4419 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4420 		m68ki_branch_16(offset);
4421 		return;
4422 	}
4423 	REG_PC += 2;
4424 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4425 }
4426 
4427 
m68k_op_ble_16(void)4428 static void m68k_op_ble_16(void)
4429 {
4430 	if(COND_LE())
4431 	{
4432 		uint offset = OPER_I_16();
4433 		REG_PC -= 2;
4434 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4435 		m68ki_branch_16(offset);
4436 		return;
4437 	}
4438 	REG_PC += 2;
4439 	USE_CYCLES(CYC_BCC_NOTAKE_W);
4440 }
4441 
4442 
m68k_op_bhi_32(void)4443 static void m68k_op_bhi_32(void)
4444 {
4445 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4446 	{
4447 		if(COND_HI())
4448 		{
4449 			uint offset = OPER_I_32();
4450 			REG_PC -= 4;
4451 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4452 			m68ki_branch_32(offset);
4453 			return;
4454 		}
4455 		REG_PC += 4;
4456 		return;
4457 	}
4458 	else
4459 	{
4460 		if(COND_HI())
4461 		{
4462 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4463 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4464 			return;
4465 		}
4466 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4467 	}
4468 }
4469 
4470 
m68k_op_bls_32(void)4471 static void m68k_op_bls_32(void)
4472 {
4473 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4474 	{
4475 		if(COND_LS())
4476 		{
4477 			uint offset = OPER_I_32();
4478 			REG_PC -= 4;
4479 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4480 			m68ki_branch_32(offset);
4481 			return;
4482 		}
4483 		REG_PC += 4;
4484 		return;
4485 	}
4486 	else
4487 	{
4488 		if(COND_LS())
4489 		{
4490 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4491 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4492 			return;
4493 		}
4494 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4495 	}
4496 }
4497 
4498 
m68k_op_bcc_32(void)4499 static void m68k_op_bcc_32(void)
4500 {
4501 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4502 	{
4503 		if(COND_CC())
4504 		{
4505 			uint offset = OPER_I_32();
4506 			REG_PC -= 4;
4507 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4508 			m68ki_branch_32(offset);
4509 			return;
4510 		}
4511 		REG_PC += 4;
4512 		return;
4513 	}
4514 	else
4515 	{
4516 		if(COND_CC())
4517 		{
4518 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4519 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4520 			return;
4521 		}
4522 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4523 	}
4524 }
4525 
4526 
m68k_op_bcs_32(void)4527 static void m68k_op_bcs_32(void)
4528 {
4529 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4530 	{
4531 		if(COND_CS())
4532 		{
4533 			uint offset = OPER_I_32();
4534 			REG_PC -= 4;
4535 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4536 			m68ki_branch_32(offset);
4537 			return;
4538 		}
4539 		REG_PC += 4;
4540 		return;
4541 	}
4542 	else
4543 	{
4544 		if(COND_CS())
4545 		{
4546 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4547 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4548 			return;
4549 		}
4550 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4551 	}
4552 }
4553 
4554 
m68k_op_bne_32(void)4555 static void m68k_op_bne_32(void)
4556 {
4557 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4558 	{
4559 		if(COND_NE())
4560 		{
4561 			uint offset = OPER_I_32();
4562 			REG_PC -= 4;
4563 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4564 			m68ki_branch_32(offset);
4565 			return;
4566 		}
4567 		REG_PC += 4;
4568 		return;
4569 	}
4570 	else
4571 	{
4572 		if(COND_NE())
4573 		{
4574 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4575 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4576 			return;
4577 		}
4578 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4579 	}
4580 }
4581 
4582 
m68k_op_beq_32(void)4583 static void m68k_op_beq_32(void)
4584 {
4585 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4586 	{
4587 		if(COND_EQ())
4588 		{
4589 			uint offset = OPER_I_32();
4590 			REG_PC -= 4;
4591 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4592 			m68ki_branch_32(offset);
4593 			return;
4594 		}
4595 		REG_PC += 4;
4596 		return;
4597 	}
4598 	else
4599 	{
4600 		if(COND_EQ())
4601 		{
4602 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4603 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4604 			return;
4605 		}
4606 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4607 	}
4608 }
4609 
4610 
m68k_op_bvc_32(void)4611 static void m68k_op_bvc_32(void)
4612 {
4613 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4614 	{
4615 		if(COND_VC())
4616 		{
4617 			uint offset = OPER_I_32();
4618 			REG_PC -= 4;
4619 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4620 			m68ki_branch_32(offset);
4621 			return;
4622 		}
4623 		REG_PC += 4;
4624 		return;
4625 	}
4626 	else
4627 	{
4628 		if(COND_VC())
4629 		{
4630 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4631 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4632 			return;
4633 		}
4634 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4635 	}
4636 }
4637 
4638 
m68k_op_bvs_32(void)4639 static void m68k_op_bvs_32(void)
4640 {
4641 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4642 	{
4643 		if(COND_VS())
4644 		{
4645 			uint offset = OPER_I_32();
4646 			REG_PC -= 4;
4647 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4648 			m68ki_branch_32(offset);
4649 			return;
4650 		}
4651 		REG_PC += 4;
4652 		return;
4653 	}
4654 	else
4655 	{
4656 		if(COND_VS())
4657 		{
4658 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4659 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4660 			return;
4661 		}
4662 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4663 	}
4664 }
4665 
4666 
m68k_op_bpl_32(void)4667 static void m68k_op_bpl_32(void)
4668 {
4669 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4670 	{
4671 		if(COND_PL())
4672 		{
4673 			uint offset = OPER_I_32();
4674 			REG_PC -= 4;
4675 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4676 			m68ki_branch_32(offset);
4677 			return;
4678 		}
4679 		REG_PC += 4;
4680 		return;
4681 	}
4682 	else
4683 	{
4684 		if(COND_PL())
4685 		{
4686 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4687 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4688 			return;
4689 		}
4690 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4691 	}
4692 }
4693 
4694 
m68k_op_bmi_32(void)4695 static void m68k_op_bmi_32(void)
4696 {
4697 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4698 	{
4699 		if(COND_MI())
4700 		{
4701 			uint offset = OPER_I_32();
4702 			REG_PC -= 4;
4703 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4704 			m68ki_branch_32(offset);
4705 			return;
4706 		}
4707 		REG_PC += 4;
4708 		return;
4709 	}
4710 	else
4711 	{
4712 		if(COND_MI())
4713 		{
4714 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4715 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4716 			return;
4717 		}
4718 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4719 	}
4720 }
4721 
4722 
m68k_op_bge_32(void)4723 static void m68k_op_bge_32(void)
4724 {
4725 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4726 	{
4727 		if(COND_GE())
4728 		{
4729 			uint offset = OPER_I_32();
4730 			REG_PC -= 4;
4731 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4732 			m68ki_branch_32(offset);
4733 			return;
4734 		}
4735 		REG_PC += 4;
4736 		return;
4737 	}
4738 	else
4739 	{
4740 		if(COND_GE())
4741 		{
4742 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4743 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4744 			return;
4745 		}
4746 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4747 	}
4748 }
4749 
4750 
m68k_op_blt_32(void)4751 static void m68k_op_blt_32(void)
4752 {
4753 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4754 	{
4755 		if(COND_LT())
4756 		{
4757 			uint offset = OPER_I_32();
4758 			REG_PC -= 4;
4759 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4760 			m68ki_branch_32(offset);
4761 			return;
4762 		}
4763 		REG_PC += 4;
4764 		return;
4765 	}
4766 	else
4767 	{
4768 		if(COND_LT())
4769 		{
4770 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4771 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4772 			return;
4773 		}
4774 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4775 	}
4776 }
4777 
4778 
m68k_op_bgt_32(void)4779 static void m68k_op_bgt_32(void)
4780 {
4781 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4782 	{
4783 		if(COND_GT())
4784 		{
4785 			uint offset = OPER_I_32();
4786 			REG_PC -= 4;
4787 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4788 			m68ki_branch_32(offset);
4789 			return;
4790 		}
4791 		REG_PC += 4;
4792 		return;
4793 	}
4794 	else
4795 	{
4796 		if(COND_GT())
4797 		{
4798 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4799 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4800 			return;
4801 		}
4802 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4803 	}
4804 }
4805 
4806 
m68k_op_ble_32(void)4807 static void m68k_op_ble_32(void)
4808 {
4809 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
4810 	{
4811 		if(COND_LE())
4812 		{
4813 			uint offset = OPER_I_32();
4814 			REG_PC -= 4;
4815 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4816 			m68ki_branch_32(offset);
4817 			return;
4818 		}
4819 		REG_PC += 4;
4820 		return;
4821 	}
4822 	else
4823 	{
4824 		if(COND_LE())
4825 		{
4826 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
4827 			m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
4828 			return;
4829 		}
4830 		USE_CYCLES(CYC_BCC_NOTAKE_B);
4831 	}
4832 }
4833 
4834 
m68k_op_bchg_32_r_d(void)4835 static void m68k_op_bchg_32_r_d(void)
4836 {
4837 	uint* r_dst = &DY;
4838 	uint mask = 1 << (DX & 0x1f);
4839 
4840 	FLAG_Z = *r_dst & mask;
4841 	*r_dst ^= mask;
4842 }
4843 
4844 
m68k_op_bchg_8_r_ai(void)4845 static void m68k_op_bchg_8_r_ai(void)
4846 {
4847 	uint ea = EA_AY_AI_8();
4848 	uint src = m68ki_read_8(ea);
4849 	uint mask = 1 << (DX & 7);
4850 
4851 	FLAG_Z = src & mask;
4852 	m68ki_write_8(ea, src ^ mask);
4853 }
4854 
4855 
m68k_op_bchg_8_r_pi(void)4856 static void m68k_op_bchg_8_r_pi(void)
4857 {
4858 	uint ea = EA_AY_PI_8();
4859 	uint src = m68ki_read_8(ea);
4860 	uint mask = 1 << (DX & 7);
4861 
4862 	FLAG_Z = src & mask;
4863 	m68ki_write_8(ea, src ^ mask);
4864 }
4865 
4866 
m68k_op_bchg_8_r_pi7(void)4867 static void m68k_op_bchg_8_r_pi7(void)
4868 {
4869 	uint ea = EA_A7_PI_8();
4870 	uint src = m68ki_read_8(ea);
4871 	uint mask = 1 << (DX & 7);
4872 
4873 	FLAG_Z = src & mask;
4874 	m68ki_write_8(ea, src ^ mask);
4875 }
4876 
4877 
m68k_op_bchg_8_r_pd(void)4878 static void m68k_op_bchg_8_r_pd(void)
4879 {
4880 	uint ea = EA_AY_PD_8();
4881 	uint src = m68ki_read_8(ea);
4882 	uint mask = 1 << (DX & 7);
4883 
4884 	FLAG_Z = src & mask;
4885 	m68ki_write_8(ea, src ^ mask);
4886 }
4887 
4888 
m68k_op_bchg_8_r_pd7(void)4889 static void m68k_op_bchg_8_r_pd7(void)
4890 {
4891 	uint ea = EA_A7_PD_8();
4892 	uint src = m68ki_read_8(ea);
4893 	uint mask = 1 << (DX & 7);
4894 
4895 	FLAG_Z = src & mask;
4896 	m68ki_write_8(ea, src ^ mask);
4897 }
4898 
4899 
m68k_op_bchg_8_r_di(void)4900 static void m68k_op_bchg_8_r_di(void)
4901 {
4902 	uint ea = EA_AY_DI_8();
4903 	uint src = m68ki_read_8(ea);
4904 	uint mask = 1 << (DX & 7);
4905 
4906 	FLAG_Z = src & mask;
4907 	m68ki_write_8(ea, src ^ mask);
4908 }
4909 
4910 
m68k_op_bchg_8_r_ix(void)4911 static void m68k_op_bchg_8_r_ix(void)
4912 {
4913 	uint ea = EA_AY_IX_8();
4914 	uint src = m68ki_read_8(ea);
4915 	uint mask = 1 << (DX & 7);
4916 
4917 	FLAG_Z = src & mask;
4918 	m68ki_write_8(ea, src ^ mask);
4919 }
4920 
4921 
m68k_op_bchg_8_r_aw(void)4922 static void m68k_op_bchg_8_r_aw(void)
4923 {
4924 	uint ea = EA_AW_8();
4925 	uint src = m68ki_read_8(ea);
4926 	uint mask = 1 << (DX & 7);
4927 
4928 	FLAG_Z = src & mask;
4929 	m68ki_write_8(ea, src ^ mask);
4930 }
4931 
4932 
m68k_op_bchg_8_r_al(void)4933 static void m68k_op_bchg_8_r_al(void)
4934 {
4935 	uint ea = EA_AL_8();
4936 	uint src = m68ki_read_8(ea);
4937 	uint mask = 1 << (DX & 7);
4938 
4939 	FLAG_Z = src & mask;
4940 	m68ki_write_8(ea, src ^ mask);
4941 }
4942 
4943 
m68k_op_bchg_32_s_d(void)4944 static void m68k_op_bchg_32_s_d(void)
4945 {
4946 	uint* r_dst = &DY;
4947 	uint mask = ((uint)1 << (OPER_I_8() & 0x1f));
4948 
4949 	FLAG_Z = *r_dst & mask;
4950 	*r_dst ^= mask;
4951 }
4952 
4953 
m68k_op_bchg_8_s_ai(void)4954 static void m68k_op_bchg_8_s_ai(void)
4955 {
4956 	uint mask = 1 << (OPER_I_8() & 7);
4957 	uint ea = EA_AY_AI_8();
4958 	uint src = m68ki_read_8(ea);
4959 
4960 	FLAG_Z = src & mask;
4961 	m68ki_write_8(ea, src ^ mask);
4962 }
4963 
4964 
m68k_op_bchg_8_s_pi(void)4965 static void m68k_op_bchg_8_s_pi(void)
4966 {
4967 	uint mask = 1 << (OPER_I_8() & 7);
4968 	uint ea = EA_AY_PI_8();
4969 	uint src = m68ki_read_8(ea);
4970 
4971 	FLAG_Z = src & mask;
4972 	m68ki_write_8(ea, src ^ mask);
4973 }
4974 
4975 
m68k_op_bchg_8_s_pi7(void)4976 static void m68k_op_bchg_8_s_pi7(void)
4977 {
4978 	uint mask = 1 << (OPER_I_8() & 7);
4979 	uint ea = EA_A7_PI_8();
4980 	uint src = m68ki_read_8(ea);
4981 
4982 	FLAG_Z = src & mask;
4983 	m68ki_write_8(ea, src ^ mask);
4984 }
4985 
4986 
m68k_op_bchg_8_s_pd(void)4987 static void m68k_op_bchg_8_s_pd(void)
4988 {
4989 	uint mask = 1 << (OPER_I_8() & 7);
4990 	uint ea = EA_AY_PD_8();
4991 	uint src = m68ki_read_8(ea);
4992 
4993 	FLAG_Z = src & mask;
4994 	m68ki_write_8(ea, src ^ mask);
4995 }
4996 
4997 
m68k_op_bchg_8_s_pd7(void)4998 static void m68k_op_bchg_8_s_pd7(void)
4999 {
5000 	uint mask = 1 << (OPER_I_8() & 7);
5001 	uint ea = EA_A7_PD_8();
5002 	uint src = m68ki_read_8(ea);
5003 
5004 	FLAG_Z = src & mask;
5005 	m68ki_write_8(ea, src ^ mask);
5006 }
5007 
5008 
m68k_op_bchg_8_s_di(void)5009 static void m68k_op_bchg_8_s_di(void)
5010 {
5011 	uint mask = 1 << (OPER_I_8() & 7);
5012 	uint ea = EA_AY_DI_8();
5013 	uint src = m68ki_read_8(ea);
5014 
5015 	FLAG_Z = src & mask;
5016 	m68ki_write_8(ea, src ^ mask);
5017 }
5018 
5019 
m68k_op_bchg_8_s_ix(void)5020 static void m68k_op_bchg_8_s_ix(void)
5021 {
5022 	uint mask = 1 << (OPER_I_8() & 7);
5023 	uint ea = EA_AY_IX_8();
5024 	uint src = m68ki_read_8(ea);
5025 
5026 	FLAG_Z = src & mask;
5027 	m68ki_write_8(ea, src ^ mask);
5028 }
5029 
5030 
m68k_op_bchg_8_s_aw(void)5031 static void m68k_op_bchg_8_s_aw(void)
5032 {
5033 	uint mask = 1 << (OPER_I_8() & 7);
5034 	uint ea = EA_AW_8();
5035 	uint src = m68ki_read_8(ea);
5036 
5037 	FLAG_Z = src & mask;
5038 	m68ki_write_8(ea, src ^ mask);
5039 }
5040 
5041 
m68k_op_bchg_8_s_al(void)5042 static void m68k_op_bchg_8_s_al(void)
5043 {
5044 	uint mask = 1 << (OPER_I_8() & 7);
5045 	uint ea = EA_AL_8();
5046 	uint src = m68ki_read_8(ea);
5047 
5048 	FLAG_Z = src & mask;
5049 	m68ki_write_8(ea, src ^ mask);
5050 }
5051 
5052 
m68k_op_bclr_32_r_d(void)5053 static void m68k_op_bclr_32_r_d(void)
5054 {
5055 	uint* r_dst = &DY;
5056 	uint mask = 1 << (DX & 0x1f);
5057 
5058 	FLAG_Z = *r_dst & mask;
5059 	*r_dst &= ~mask;
5060 }
5061 
5062 
m68k_op_bclr_8_r_ai(void)5063 static void m68k_op_bclr_8_r_ai(void)
5064 {
5065 	uint ea = EA_AY_AI_8();
5066 	uint src = m68ki_read_8(ea);
5067 	uint mask = 1 << (DX & 7);
5068 
5069 	FLAG_Z = src & mask;
5070 	m68ki_write_8(ea, src & ~mask);
5071 }
5072 
5073 
m68k_op_bclr_8_r_pi(void)5074 static void m68k_op_bclr_8_r_pi(void)
5075 {
5076 	uint ea = EA_AY_PI_8();
5077 	uint src = m68ki_read_8(ea);
5078 	uint mask = 1 << (DX & 7);
5079 
5080 	FLAG_Z = src & mask;
5081 	m68ki_write_8(ea, src & ~mask);
5082 }
5083 
5084 
m68k_op_bclr_8_r_pi7(void)5085 static void m68k_op_bclr_8_r_pi7(void)
5086 {
5087 	uint ea = EA_A7_PI_8();
5088 	uint src = m68ki_read_8(ea);
5089 	uint mask = 1 << (DX & 7);
5090 
5091 	FLAG_Z = src & mask;
5092 	m68ki_write_8(ea, src & ~mask);
5093 }
5094 
5095 
m68k_op_bclr_8_r_pd(void)5096 static void m68k_op_bclr_8_r_pd(void)
5097 {
5098 	uint ea = EA_AY_PD_8();
5099 	uint src = m68ki_read_8(ea);
5100 	uint mask = 1 << (DX & 7);
5101 
5102 	FLAG_Z = src & mask;
5103 	m68ki_write_8(ea, src & ~mask);
5104 }
5105 
5106 
m68k_op_bclr_8_r_pd7(void)5107 static void m68k_op_bclr_8_r_pd7(void)
5108 {
5109 	uint ea = EA_A7_PD_8();
5110 	uint src = m68ki_read_8(ea);
5111 	uint mask = 1 << (DX & 7);
5112 
5113 	FLAG_Z = src & mask;
5114 	m68ki_write_8(ea, src & ~mask);
5115 }
5116 
5117 
m68k_op_bclr_8_r_di(void)5118 static void m68k_op_bclr_8_r_di(void)
5119 {
5120 	uint ea = EA_AY_DI_8();
5121 	uint src = m68ki_read_8(ea);
5122 	uint mask = 1 << (DX & 7);
5123 
5124 	FLAG_Z = src & mask;
5125 	m68ki_write_8(ea, src & ~mask);
5126 }
5127 
5128 
m68k_op_bclr_8_r_ix(void)5129 static void m68k_op_bclr_8_r_ix(void)
5130 {
5131 	uint ea = EA_AY_IX_8();
5132 	uint src = m68ki_read_8(ea);
5133 	uint mask = 1 << (DX & 7);
5134 
5135 	FLAG_Z = src & mask;
5136 	m68ki_write_8(ea, src & ~mask);
5137 }
5138 
5139 
m68k_op_bclr_8_r_aw(void)5140 static void m68k_op_bclr_8_r_aw(void)
5141 {
5142 	uint ea = EA_AW_8();
5143 	uint src = m68ki_read_8(ea);
5144 	uint mask = 1 << (DX & 7);
5145 
5146 	FLAG_Z = src & mask;
5147 	m68ki_write_8(ea, src & ~mask);
5148 }
5149 
5150 
m68k_op_bclr_8_r_al(void)5151 static void m68k_op_bclr_8_r_al(void)
5152 {
5153 	uint ea = EA_AL_8();
5154 	uint src = m68ki_read_8(ea);
5155 	uint mask = 1 << (DX & 7);
5156 
5157 	FLAG_Z = src & mask;
5158 	m68ki_write_8(ea, src & ~mask);
5159 }
5160 
5161 
m68k_op_bclr_32_s_d(void)5162 static void m68k_op_bclr_32_s_d(void)
5163 {
5164 	uint* r_dst = &DY;
5165 	uint mask = ((uint)1 << (OPER_I_8() & 0x1f));
5166 
5167 	FLAG_Z = *r_dst & mask;
5168 	*r_dst &= ~mask;
5169 }
5170 
5171 
m68k_op_bclr_8_s_ai(void)5172 static void m68k_op_bclr_8_s_ai(void)
5173 {
5174 	uint mask = 1 << (OPER_I_8() & 7);
5175 	uint ea = EA_AY_AI_8();
5176 	uint src = m68ki_read_8(ea);
5177 
5178 	FLAG_Z = src & mask;
5179 	m68ki_write_8(ea, src & ~mask);
5180 }
5181 
5182 
m68k_op_bclr_8_s_pi(void)5183 static void m68k_op_bclr_8_s_pi(void)
5184 {
5185 	uint mask = 1 << (OPER_I_8() & 7);
5186 	uint ea = EA_AY_PI_8();
5187 	uint src = m68ki_read_8(ea);
5188 
5189 	FLAG_Z = src & mask;
5190 	m68ki_write_8(ea, src & ~mask);
5191 }
5192 
5193 
m68k_op_bclr_8_s_pi7(void)5194 static void m68k_op_bclr_8_s_pi7(void)
5195 {
5196 	uint mask = 1 << (OPER_I_8() & 7);
5197 	uint ea = EA_A7_PI_8();
5198 	uint src = m68ki_read_8(ea);
5199 
5200 	FLAG_Z = src & mask;
5201 	m68ki_write_8(ea, src & ~mask);
5202 }
5203 
5204 
m68k_op_bclr_8_s_pd(void)5205 static void m68k_op_bclr_8_s_pd(void)
5206 {
5207 	uint mask = 1 << (OPER_I_8() & 7);
5208 	uint ea = EA_AY_PD_8();
5209 	uint src = m68ki_read_8(ea);
5210 
5211 	FLAG_Z = src & mask;
5212 	m68ki_write_8(ea, src & ~mask);
5213 }
5214 
5215 
m68k_op_bclr_8_s_pd7(void)5216 static void m68k_op_bclr_8_s_pd7(void)
5217 {
5218 	uint mask = 1 << (OPER_I_8() & 7);
5219 	uint ea = EA_A7_PD_8();
5220 	uint src = m68ki_read_8(ea);
5221 
5222 	FLAG_Z = src & mask;
5223 	m68ki_write_8(ea, src & ~mask);
5224 }
5225 
5226 
m68k_op_bclr_8_s_di(void)5227 static void m68k_op_bclr_8_s_di(void)
5228 {
5229 	uint mask = 1 << (OPER_I_8() & 7);
5230 	uint ea = EA_AY_DI_8();
5231 	uint src = m68ki_read_8(ea);
5232 
5233 	FLAG_Z = src & mask;
5234 	m68ki_write_8(ea, src & ~mask);
5235 }
5236 
5237 
m68k_op_bclr_8_s_ix(void)5238 static void m68k_op_bclr_8_s_ix(void)
5239 {
5240 	uint mask = 1 << (OPER_I_8() & 7);
5241 	uint ea = EA_AY_IX_8();
5242 	uint src = m68ki_read_8(ea);
5243 
5244 	FLAG_Z = src & mask;
5245 	m68ki_write_8(ea, src & ~mask);
5246 }
5247 
5248 
m68k_op_bclr_8_s_aw(void)5249 static void m68k_op_bclr_8_s_aw(void)
5250 {
5251 	uint mask = 1 << (OPER_I_8() & 7);
5252 	uint ea = EA_AW_8();
5253 	uint src = m68ki_read_8(ea);
5254 
5255 	FLAG_Z = src & mask;
5256 	m68ki_write_8(ea, src & ~mask);
5257 }
5258 
5259 
m68k_op_bclr_8_s_al(void)5260 static void m68k_op_bclr_8_s_al(void)
5261 {
5262 	uint mask = 1 << (OPER_I_8() & 7);
5263 	uint ea = EA_AL_8();
5264 	uint src = m68ki_read_8(ea);
5265 
5266 	FLAG_Z = src & mask;
5267 	m68ki_write_8(ea, src & ~mask);
5268 }
5269 
5270 
m68k_op_bfchg_32_d(void)5271 static void m68k_op_bfchg_32_d(void)
5272 {
5273 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5274 	{
5275 		uint word2 = OPER_I_16();
5276 		uint offset = (word2>>6)&31;
5277 		uint width = word2;
5278 		uint* data = &DY;
5279 		uint64 mask;
5280 
5281 
5282 		if(BIT_B(word2))
5283 			offset = REG_D[offset&7];
5284 		if(BIT_5(word2))
5285 			width = REG_D[width&7];
5286 
5287 		offset &= 31;
5288 		width = ((width-1) & 31) + 1;
5289 
5290 		mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5291 		mask = ROR_32(mask, offset);
5292 
5293 		FLAG_N = NFLAG_32(*data<<offset);
5294 		FLAG_Z = *data & mask;
5295 		FLAG_V = VFLAG_CLEAR;
5296 		FLAG_C = CFLAG_CLEAR;
5297 
5298 		*data ^= mask;
5299 
5300 		return;
5301 	}
5302 	m68ki_exception_illegal();
5303 }
5304 
5305 
m68k_op_bfchg_32_ai(void)5306 static void m68k_op_bfchg_32_ai(void)
5307 {
5308 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5309 	{
5310 		uint word2 = OPER_I_16();
5311 		sint offset = (word2>>6)&31;
5312 		uint width = word2;
5313 		uint mask_base;
5314 		uint data_long;
5315 		uint mask_long;
5316 		uint data_byte = 0;
5317 		uint mask_byte = 0;
5318 		uint ea = EA_AY_AI_8();
5319 
5320 
5321 		if(BIT_B(word2))
5322 			offset = MAKE_INT_32(REG_D[offset&7]);
5323 		if(BIT_5(word2))
5324 			width = REG_D[width&7];
5325 
5326 		/* Offset is signed so we have to use ugly math =( */
5327 		ea += offset / 8;
5328 		offset %= 8;
5329 		if(offset < 0)
5330 		{
5331 			offset += 8;
5332 			ea--;
5333 		}
5334 		width = ((width-1) & 31) + 1;
5335 
5336 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5337 		mask_long = mask_base >> offset;
5338 
5339 		data_long = m68ki_read_32(ea);
5340 		FLAG_N = NFLAG_32(data_long << offset);
5341 		FLAG_Z = data_long & mask_long;
5342 		FLAG_V = VFLAG_CLEAR;
5343 		FLAG_C = CFLAG_CLEAR;
5344 
5345 		m68ki_write_32(ea, data_long ^ mask_long);
5346 
5347 		if((width + offset) > 32)
5348 		{
5349 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
5350 			data_byte = m68ki_read_8(ea+4);
5351 			FLAG_Z |= (data_byte & mask_byte);
5352 			m68ki_write_8(ea+4, data_byte ^ mask_byte);
5353 		}
5354 		return;
5355 	}
5356 	m68ki_exception_illegal();
5357 }
5358 
5359 
m68k_op_bfchg_32_di(void)5360 static void m68k_op_bfchg_32_di(void)
5361 {
5362 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5363 	{
5364 		uint word2 = OPER_I_16();
5365 		sint offset = (word2>>6)&31;
5366 		uint width = word2;
5367 		uint mask_base;
5368 		uint data_long;
5369 		uint mask_long;
5370 		uint data_byte = 0;
5371 		uint mask_byte = 0;
5372 		uint ea = EA_AY_DI_8();
5373 
5374 
5375 		if(BIT_B(word2))
5376 			offset = MAKE_INT_32(REG_D[offset&7]);
5377 		if(BIT_5(word2))
5378 			width = REG_D[width&7];
5379 
5380 		/* Offset is signed so we have to use ugly math =( */
5381 		ea += offset / 8;
5382 		offset %= 8;
5383 		if(offset < 0)
5384 		{
5385 			offset += 8;
5386 			ea--;
5387 		}
5388 		width = ((width-1) & 31) + 1;
5389 
5390 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5391 		mask_long = mask_base >> offset;
5392 
5393 		data_long = m68ki_read_32(ea);
5394 		FLAG_N = NFLAG_32(data_long << offset);
5395 		FLAG_Z = data_long & mask_long;
5396 		FLAG_V = VFLAG_CLEAR;
5397 		FLAG_C = CFLAG_CLEAR;
5398 
5399 		m68ki_write_32(ea, data_long ^ mask_long);
5400 
5401 		if((width + offset) > 32)
5402 		{
5403 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
5404 			data_byte = m68ki_read_8(ea+4);
5405 			FLAG_Z |= (data_byte & mask_byte);
5406 			m68ki_write_8(ea+4, data_byte ^ mask_byte);
5407 		}
5408 		return;
5409 	}
5410 	m68ki_exception_illegal();
5411 }
5412 
5413 
m68k_op_bfchg_32_ix(void)5414 static void m68k_op_bfchg_32_ix(void)
5415 {
5416 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5417 	{
5418 		uint word2 = OPER_I_16();
5419 		sint offset = (word2>>6)&31;
5420 		uint width = word2;
5421 		uint mask_base;
5422 		uint data_long;
5423 		uint mask_long;
5424 		uint data_byte = 0;
5425 		uint mask_byte = 0;
5426 		uint ea = EA_AY_IX_8();
5427 
5428 
5429 		if(BIT_B(word2))
5430 			offset = MAKE_INT_32(REG_D[offset&7]);
5431 		if(BIT_5(word2))
5432 			width = REG_D[width&7];
5433 
5434 		/* Offset is signed so we have to use ugly math =( */
5435 		ea += offset / 8;
5436 		offset %= 8;
5437 		if(offset < 0)
5438 		{
5439 			offset += 8;
5440 			ea--;
5441 		}
5442 		width = ((width-1) & 31) + 1;
5443 
5444 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5445 		mask_long = mask_base >> offset;
5446 
5447 		data_long = m68ki_read_32(ea);
5448 		FLAG_N = NFLAG_32(data_long << offset);
5449 		FLAG_Z = data_long & mask_long;
5450 		FLAG_V = VFLAG_CLEAR;
5451 		FLAG_C = CFLAG_CLEAR;
5452 
5453 		m68ki_write_32(ea, data_long ^ mask_long);
5454 
5455 		if((width + offset) > 32)
5456 		{
5457 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
5458 			data_byte = m68ki_read_8(ea+4);
5459 			FLAG_Z |= (data_byte & mask_byte);
5460 			m68ki_write_8(ea+4, data_byte ^ mask_byte);
5461 		}
5462 		return;
5463 	}
5464 	m68ki_exception_illegal();
5465 }
5466 
5467 
m68k_op_bfchg_32_aw(void)5468 static void m68k_op_bfchg_32_aw(void)
5469 {
5470 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5471 	{
5472 		uint word2 = OPER_I_16();
5473 		sint offset = (word2>>6)&31;
5474 		uint width = word2;
5475 		uint mask_base;
5476 		uint data_long;
5477 		uint mask_long;
5478 		uint data_byte = 0;
5479 		uint mask_byte = 0;
5480 		uint ea = EA_AW_8();
5481 
5482 
5483 		if(BIT_B(word2))
5484 			offset = MAKE_INT_32(REG_D[offset&7]);
5485 		if(BIT_5(word2))
5486 			width = REG_D[width&7];
5487 
5488 		/* Offset is signed so we have to use ugly math =( */
5489 		ea += offset / 8;
5490 		offset %= 8;
5491 		if(offset < 0)
5492 		{
5493 			offset += 8;
5494 			ea--;
5495 		}
5496 		width = ((width-1) & 31) + 1;
5497 
5498 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5499 		mask_long = mask_base >> offset;
5500 
5501 		data_long = m68ki_read_32(ea);
5502 		FLAG_N = NFLAG_32(data_long << offset);
5503 		FLAG_Z = data_long & mask_long;
5504 		FLAG_V = VFLAG_CLEAR;
5505 		FLAG_C = CFLAG_CLEAR;
5506 
5507 		m68ki_write_32(ea, data_long ^ mask_long);
5508 
5509 		if((width + offset) > 32)
5510 		{
5511 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
5512 			data_byte = m68ki_read_8(ea+4);
5513 			FLAG_Z |= (data_byte & mask_byte);
5514 			m68ki_write_8(ea+4, data_byte ^ mask_byte);
5515 		}
5516 		return;
5517 	}
5518 	m68ki_exception_illegal();
5519 }
5520 
5521 
m68k_op_bfchg_32_al(void)5522 static void m68k_op_bfchg_32_al(void)
5523 {
5524 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5525 	{
5526 		uint word2 = OPER_I_16();
5527 		sint offset = (word2>>6)&31;
5528 		uint width = word2;
5529 		uint mask_base;
5530 		uint data_long;
5531 		uint mask_long;
5532 		uint data_byte = 0;
5533 		uint mask_byte = 0;
5534 		uint ea = EA_AL_8();
5535 
5536 
5537 		if(BIT_B(word2))
5538 			offset = MAKE_INT_32(REG_D[offset&7]);
5539 		if(BIT_5(word2))
5540 			width = REG_D[width&7];
5541 
5542 		/* Offset is signed so we have to use ugly math =( */
5543 		ea += offset / 8;
5544 		offset %= 8;
5545 		if(offset < 0)
5546 		{
5547 			offset += 8;
5548 			ea--;
5549 		}
5550 		width = ((width-1) & 31) + 1;
5551 
5552 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5553 		mask_long = mask_base >> offset;
5554 
5555 		data_long = m68ki_read_32(ea);
5556 		FLAG_N = NFLAG_32(data_long << offset);
5557 		FLAG_Z = data_long & mask_long;
5558 		FLAG_V = VFLAG_CLEAR;
5559 		FLAG_C = CFLAG_CLEAR;
5560 
5561 		m68ki_write_32(ea, data_long ^ mask_long);
5562 
5563 		if((width + offset) > 32)
5564 		{
5565 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
5566 			data_byte = m68ki_read_8(ea+4);
5567 			FLAG_Z |= (data_byte & mask_byte);
5568 			m68ki_write_8(ea+4, data_byte ^ mask_byte);
5569 		}
5570 		return;
5571 	}
5572 	m68ki_exception_illegal();
5573 }
5574 
5575 
m68k_op_bfclr_32_d(void)5576 static void m68k_op_bfclr_32_d(void)
5577 {
5578 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5579 	{
5580 		uint word2 = OPER_I_16();
5581 		uint offset = (word2>>6)&31;
5582 		uint width = word2;
5583 		uint* data = &DY;
5584 		uint64 mask;
5585 
5586 
5587 		if(BIT_B(word2))
5588 			offset = REG_D[offset&7];
5589 		if(BIT_5(word2))
5590 			width = REG_D[width&7];
5591 
5592 
5593 		offset &= 31;
5594 		width = ((width-1) & 31) + 1;
5595 
5596 
5597 		mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5598 		mask = ROR_32(mask, offset);
5599 
5600 		FLAG_N = NFLAG_32(*data<<offset);
5601 		FLAG_Z = *data & mask;
5602 		FLAG_V = VFLAG_CLEAR;
5603 		FLAG_C = CFLAG_CLEAR;
5604 
5605 		*data &= ~mask;
5606 
5607 		return;
5608 	}
5609 	m68ki_exception_illegal();
5610 }
5611 
5612 
m68k_op_bfclr_32_ai(void)5613 static void m68k_op_bfclr_32_ai(void)
5614 {
5615 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5616 	{
5617 		uint word2 = OPER_I_16();
5618 		sint offset = (word2>>6)&31;
5619 		uint width = word2;
5620 		uint mask_base;
5621 		uint data_long;
5622 		uint mask_long;
5623 		uint data_byte = 0;
5624 		uint mask_byte = 0;
5625 		uint ea = EA_AY_AI_8();
5626 
5627 
5628 		if(BIT_B(word2))
5629 			offset = MAKE_INT_32(REG_D[offset&7]);
5630 		if(BIT_5(word2))
5631 			width = REG_D[width&7];
5632 
5633 		/* Offset is signed so we have to use ugly math =( */
5634 		ea += offset / 8;
5635 		offset %= 8;
5636 		if(offset < 0)
5637 		{
5638 			offset += 8;
5639 			ea--;
5640 		}
5641 		width = ((width-1) & 31) + 1;
5642 
5643 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5644 		mask_long = mask_base >> offset;
5645 
5646 		data_long = m68ki_read_32(ea);
5647 		FLAG_N = NFLAG_32(data_long << offset);
5648 		FLAG_Z = data_long & mask_long;
5649 		FLAG_V = VFLAG_CLEAR;
5650 		FLAG_C = CFLAG_CLEAR;
5651 
5652 		m68ki_write_32(ea, data_long & ~mask_long);
5653 
5654 		if((width + offset) > 32)
5655 		{
5656 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
5657 			data_byte = m68ki_read_8(ea+4);
5658 			FLAG_Z |= (data_byte & mask_byte);
5659 			m68ki_write_8(ea+4, data_byte & ~mask_byte);
5660 		}
5661 		return;
5662 	}
5663 	m68ki_exception_illegal();
5664 }
5665 
5666 
m68k_op_bfclr_32_di(void)5667 static void m68k_op_bfclr_32_di(void)
5668 {
5669 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5670 	{
5671 		uint word2 = OPER_I_16();
5672 		sint offset = (word2>>6)&31;
5673 		uint width = word2;
5674 		uint mask_base;
5675 		uint data_long;
5676 		uint mask_long;
5677 		uint data_byte = 0;
5678 		uint mask_byte = 0;
5679 		uint ea = EA_AY_DI_8();
5680 
5681 
5682 		if(BIT_B(word2))
5683 			offset = MAKE_INT_32(REG_D[offset&7]);
5684 		if(BIT_5(word2))
5685 			width = REG_D[width&7];
5686 
5687 		/* Offset is signed so we have to use ugly math =( */
5688 		ea += offset / 8;
5689 		offset %= 8;
5690 		if(offset < 0)
5691 		{
5692 			offset += 8;
5693 			ea--;
5694 		}
5695 		width = ((width-1) & 31) + 1;
5696 
5697 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5698 		mask_long = mask_base >> offset;
5699 
5700 		data_long = m68ki_read_32(ea);
5701 		FLAG_N = NFLAG_32(data_long << offset);
5702 		FLAG_Z = data_long & mask_long;
5703 		FLAG_V = VFLAG_CLEAR;
5704 		FLAG_C = CFLAG_CLEAR;
5705 
5706 		m68ki_write_32(ea, data_long & ~mask_long);
5707 
5708 		if((width + offset) > 32)
5709 		{
5710 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
5711 			data_byte = m68ki_read_8(ea+4);
5712 			FLAG_Z |= (data_byte & mask_byte);
5713 			m68ki_write_8(ea+4, data_byte & ~mask_byte);
5714 		}
5715 		return;
5716 	}
5717 	m68ki_exception_illegal();
5718 }
5719 
5720 
m68k_op_bfclr_32_ix(void)5721 static void m68k_op_bfclr_32_ix(void)
5722 {
5723 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5724 	{
5725 		uint word2 = OPER_I_16();
5726 		sint offset = (word2>>6)&31;
5727 		uint width = word2;
5728 		uint mask_base;
5729 		uint data_long;
5730 		uint mask_long;
5731 		uint data_byte = 0;
5732 		uint mask_byte = 0;
5733 		uint ea = EA_AY_IX_8();
5734 
5735 
5736 		if(BIT_B(word2))
5737 			offset = MAKE_INT_32(REG_D[offset&7]);
5738 		if(BIT_5(word2))
5739 			width = REG_D[width&7];
5740 
5741 		/* Offset is signed so we have to use ugly math =( */
5742 		ea += offset / 8;
5743 		offset %= 8;
5744 		if(offset < 0)
5745 		{
5746 			offset += 8;
5747 			ea--;
5748 		}
5749 		width = ((width-1) & 31) + 1;
5750 
5751 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5752 		mask_long = mask_base >> offset;
5753 
5754 		data_long = m68ki_read_32(ea);
5755 		FLAG_N = NFLAG_32(data_long << offset);
5756 		FLAG_Z = data_long & mask_long;
5757 		FLAG_V = VFLAG_CLEAR;
5758 		FLAG_C = CFLAG_CLEAR;
5759 
5760 		m68ki_write_32(ea, data_long & ~mask_long);
5761 
5762 		if((width + offset) > 32)
5763 		{
5764 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
5765 			data_byte = m68ki_read_8(ea+4);
5766 			FLAG_Z |= (data_byte & mask_byte);
5767 			m68ki_write_8(ea+4, data_byte & ~mask_byte);
5768 		}
5769 		return;
5770 	}
5771 	m68ki_exception_illegal();
5772 }
5773 
5774 
m68k_op_bfclr_32_aw(void)5775 static void m68k_op_bfclr_32_aw(void)
5776 {
5777 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5778 	{
5779 		uint word2 = OPER_I_16();
5780 		sint offset = (word2>>6)&31;
5781 		uint width = word2;
5782 		uint mask_base;
5783 		uint data_long;
5784 		uint mask_long;
5785 		uint data_byte = 0;
5786 		uint mask_byte = 0;
5787 		uint ea = EA_AW_8();
5788 
5789 
5790 		if(BIT_B(word2))
5791 			offset = MAKE_INT_32(REG_D[offset&7]);
5792 		if(BIT_5(word2))
5793 			width = REG_D[width&7];
5794 
5795 		/* Offset is signed so we have to use ugly math =( */
5796 		ea += offset / 8;
5797 		offset %= 8;
5798 		if(offset < 0)
5799 		{
5800 			offset += 8;
5801 			ea--;
5802 		}
5803 		width = ((width-1) & 31) + 1;
5804 
5805 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5806 		mask_long = mask_base >> offset;
5807 
5808 		data_long = m68ki_read_32(ea);
5809 		FLAG_N = NFLAG_32(data_long << offset);
5810 		FLAG_Z = data_long & mask_long;
5811 		FLAG_V = VFLAG_CLEAR;
5812 		FLAG_C = CFLAG_CLEAR;
5813 
5814 		m68ki_write_32(ea, data_long & ~mask_long);
5815 
5816 		if((width + offset) > 32)
5817 		{
5818 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
5819 			data_byte = m68ki_read_8(ea+4);
5820 			FLAG_Z |= (data_byte & mask_byte);
5821 			m68ki_write_8(ea+4, data_byte & ~mask_byte);
5822 		}
5823 		return;
5824 	}
5825 	m68ki_exception_illegal();
5826 }
5827 
5828 
m68k_op_bfclr_32_al(void)5829 static void m68k_op_bfclr_32_al(void)
5830 {
5831 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5832 	{
5833 		uint word2 = OPER_I_16();
5834 		sint offset = (word2>>6)&31;
5835 		uint width = word2;
5836 		uint mask_base;
5837 		uint data_long;
5838 		uint mask_long;
5839 		uint data_byte = 0;
5840 		uint mask_byte = 0;
5841 		uint ea = EA_AL_8();
5842 
5843 
5844 		if(BIT_B(word2))
5845 			offset = MAKE_INT_32(REG_D[offset&7]);
5846 		if(BIT_5(word2))
5847 			width = REG_D[width&7];
5848 
5849 		/* Offset is signed so we have to use ugly math =( */
5850 		ea += offset / 8;
5851 		offset %= 8;
5852 		if(offset < 0)
5853 		{
5854 			offset += 8;
5855 			ea--;
5856 		}
5857 		width = ((width-1) & 31) + 1;
5858 
5859 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5860 		mask_long = mask_base >> offset;
5861 
5862 		data_long = m68ki_read_32(ea);
5863 		FLAG_N = NFLAG_32(data_long << offset);
5864 		FLAG_Z = data_long & mask_long;
5865 		FLAG_V = VFLAG_CLEAR;
5866 		FLAG_C = CFLAG_CLEAR;
5867 
5868 		m68ki_write_32(ea, data_long & ~mask_long);
5869 
5870 		if((width + offset) > 32)
5871 		{
5872 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
5873 			data_byte = m68ki_read_8(ea+4);
5874 			FLAG_Z |= (data_byte & mask_byte);
5875 			m68ki_write_8(ea+4, data_byte & ~mask_byte);
5876 		}
5877 		return;
5878 	}
5879 	m68ki_exception_illegal();
5880 }
5881 
5882 
m68k_op_bfexts_32_d(void)5883 static void m68k_op_bfexts_32_d(void)
5884 {
5885 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5886 	{
5887 		uint word2 = OPER_I_16();
5888 		uint offset = (word2>>6)&31;
5889 		uint width = word2;
5890 		uint64 data = DY;
5891 
5892 
5893 		if(BIT_B(word2))
5894 			offset = REG_D[offset&7];
5895 		if(BIT_5(word2))
5896 			width = REG_D[width&7];
5897 
5898 		offset &= 31;
5899 		width = ((width-1) & 31) + 1;
5900 
5901 		data = ROL_32(data, offset);
5902 		FLAG_N = NFLAG_32(data);
5903 		data = MAKE_INT_32(data) >> (32 - width);
5904 
5905 		FLAG_Z = data;
5906 		FLAG_V = VFLAG_CLEAR;
5907 		FLAG_C = CFLAG_CLEAR;
5908 
5909 		REG_D[(word2>>12)&7] = data;
5910 
5911 		return;
5912 	}
5913 	m68ki_exception_illegal();
5914 }
5915 
5916 
m68k_op_bfexts_32_ai(void)5917 static void m68k_op_bfexts_32_ai(void)
5918 {
5919 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5920 	{
5921 		uint word2 = OPER_I_16();
5922 		sint offset = (word2>>6)&31;
5923 		uint width = word2;
5924 		uint data;
5925 		uint ea = EA_AY_AI_8();
5926 
5927 
5928 		if(BIT_B(word2))
5929 			offset = MAKE_INT_32(REG_D[offset&7]);
5930 		if(BIT_5(word2))
5931 			width = REG_D[width&7];
5932 
5933 		/* Offset is signed so we have to use ugly math =( */
5934 		ea += offset / 8;
5935 		offset %= 8;
5936 		if(offset < 0)
5937 		{
5938 			offset += 8;
5939 			ea--;
5940 		}
5941 		width = ((width-1) & 31) + 1;
5942 
5943 		data = m68ki_read_32(ea);
5944 
5945 		data = MASK_OUT_ABOVE_32(data<<offset);
5946 
5947 		if((offset+width) > 32)
5948 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
5949 
5950 		FLAG_N = NFLAG_32(data);
5951 		data  = MAKE_INT_32(data) >> (32 - width);
5952 
5953 		FLAG_Z = data;
5954 		FLAG_V = VFLAG_CLEAR;
5955 		FLAG_C = CFLAG_CLEAR;
5956 
5957 		REG_D[(word2 >> 12) & 7] = data;
5958 
5959 		return;
5960 	}
5961 	m68ki_exception_illegal();
5962 }
5963 
5964 
m68k_op_bfexts_32_di(void)5965 static void m68k_op_bfexts_32_di(void)
5966 {
5967 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
5968 	{
5969 		uint word2 = OPER_I_16();
5970 		sint offset = (word2>>6)&31;
5971 		uint width = word2;
5972 		uint data;
5973 		uint ea = EA_AY_DI_8();
5974 
5975 
5976 		if(BIT_B(word2))
5977 			offset = MAKE_INT_32(REG_D[offset&7]);
5978 		if(BIT_5(word2))
5979 			width = REG_D[width&7];
5980 
5981 		/* Offset is signed so we have to use ugly math =( */
5982 		ea += offset / 8;
5983 		offset %= 8;
5984 		if(offset < 0)
5985 		{
5986 			offset += 8;
5987 			ea--;
5988 		}
5989 		width = ((width-1) & 31) + 1;
5990 
5991 		data = m68ki_read_32(ea);
5992 
5993 		data = MASK_OUT_ABOVE_32(data<<offset);
5994 
5995 		if((offset+width) > 32)
5996 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
5997 
5998 		FLAG_N = NFLAG_32(data);
5999 		data  = MAKE_INT_32(data) >> (32 - width);
6000 
6001 		FLAG_Z = data;
6002 		FLAG_V = VFLAG_CLEAR;
6003 		FLAG_C = CFLAG_CLEAR;
6004 
6005 		REG_D[(word2 >> 12) & 7] = data;
6006 
6007 		return;
6008 	}
6009 	m68ki_exception_illegal();
6010 }
6011 
6012 
m68k_op_bfexts_32_ix(void)6013 static void m68k_op_bfexts_32_ix(void)
6014 {
6015 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6016 	{
6017 		uint word2 = OPER_I_16();
6018 		sint offset = (word2>>6)&31;
6019 		uint width = word2;
6020 		uint data;
6021 		uint ea = EA_AY_IX_8();
6022 
6023 
6024 		if(BIT_B(word2))
6025 			offset = MAKE_INT_32(REG_D[offset&7]);
6026 		if(BIT_5(word2))
6027 			width = REG_D[width&7];
6028 
6029 		/* Offset is signed so we have to use ugly math =( */
6030 		ea += offset / 8;
6031 		offset %= 8;
6032 		if(offset < 0)
6033 		{
6034 			offset += 8;
6035 			ea--;
6036 		}
6037 		width = ((width-1) & 31) + 1;
6038 
6039 		data = m68ki_read_32(ea);
6040 
6041 		data = MASK_OUT_ABOVE_32(data<<offset);
6042 
6043 		if((offset+width) > 32)
6044 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6045 
6046 		FLAG_N = NFLAG_32(data);
6047 		data  = MAKE_INT_32(data) >> (32 - width);
6048 
6049 		FLAG_Z = data;
6050 		FLAG_V = VFLAG_CLEAR;
6051 		FLAG_C = CFLAG_CLEAR;
6052 
6053 		REG_D[(word2 >> 12) & 7] = data;
6054 
6055 		return;
6056 	}
6057 	m68ki_exception_illegal();
6058 }
6059 
6060 
m68k_op_bfexts_32_aw(void)6061 static void m68k_op_bfexts_32_aw(void)
6062 {
6063 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6064 	{
6065 		uint word2 = OPER_I_16();
6066 		sint offset = (word2>>6)&31;
6067 		uint width = word2;
6068 		uint data;
6069 		uint ea = EA_AW_8();
6070 
6071 
6072 		if(BIT_B(word2))
6073 			offset = MAKE_INT_32(REG_D[offset&7]);
6074 		if(BIT_5(word2))
6075 			width = REG_D[width&7];
6076 
6077 		/* Offset is signed so we have to use ugly math =( */
6078 		ea += offset / 8;
6079 		offset %= 8;
6080 		if(offset < 0)
6081 		{
6082 			offset += 8;
6083 			ea--;
6084 		}
6085 		width = ((width-1) & 31) + 1;
6086 
6087 		data = m68ki_read_32(ea);
6088 
6089 		data = MASK_OUT_ABOVE_32(data<<offset);
6090 
6091 		if((offset+width) > 32)
6092 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6093 
6094 		FLAG_N = NFLAG_32(data);
6095 		data  = MAKE_INT_32(data) >> (32 - width);
6096 
6097 		FLAG_Z = data;
6098 		FLAG_V = VFLAG_CLEAR;
6099 		FLAG_C = CFLAG_CLEAR;
6100 
6101 		REG_D[(word2 >> 12) & 7] = data;
6102 
6103 		return;
6104 	}
6105 	m68ki_exception_illegal();
6106 }
6107 
6108 
m68k_op_bfexts_32_al(void)6109 static void m68k_op_bfexts_32_al(void)
6110 {
6111 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6112 	{
6113 		uint word2 = OPER_I_16();
6114 		sint offset = (word2>>6)&31;
6115 		uint width = word2;
6116 		uint data;
6117 		uint ea = EA_AL_8();
6118 
6119 
6120 		if(BIT_B(word2))
6121 			offset = MAKE_INT_32(REG_D[offset&7]);
6122 		if(BIT_5(word2))
6123 			width = REG_D[width&7];
6124 
6125 		/* Offset is signed so we have to use ugly math =( */
6126 		ea += offset / 8;
6127 		offset %= 8;
6128 		if(offset < 0)
6129 		{
6130 			offset += 8;
6131 			ea--;
6132 		}
6133 		width = ((width-1) & 31) + 1;
6134 
6135 		data = m68ki_read_32(ea);
6136 
6137 		data = MASK_OUT_ABOVE_32(data<<offset);
6138 
6139 		if((offset+width) > 32)
6140 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6141 
6142 		FLAG_N = NFLAG_32(data);
6143 		data  = MAKE_INT_32(data) >> (32 - width);
6144 
6145 		FLAG_Z = data;
6146 		FLAG_V = VFLAG_CLEAR;
6147 		FLAG_C = CFLAG_CLEAR;
6148 
6149 		REG_D[(word2 >> 12) & 7] = data;
6150 
6151 		return;
6152 	}
6153 	m68ki_exception_illegal();
6154 }
6155 
6156 
m68k_op_bfexts_32_pcdi(void)6157 static void m68k_op_bfexts_32_pcdi(void)
6158 {
6159 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6160 	{
6161 		uint word2 = OPER_I_16();
6162 		sint offset = (word2>>6)&31;
6163 		uint width = word2;
6164 		uint data;
6165 		uint ea = EA_PCDI_8();
6166 
6167 
6168 		if(BIT_B(word2))
6169 			offset = MAKE_INT_32(REG_D[offset&7]);
6170 		if(BIT_5(word2))
6171 			width = REG_D[width&7];
6172 
6173 		/* Offset is signed so we have to use ugly math =( */
6174 		ea += offset / 8;
6175 		offset %= 8;
6176 		if(offset < 0)
6177 		{
6178 			offset += 8;
6179 			ea--;
6180 		}
6181 		width = ((width-1) & 31) + 1;
6182 
6183 		data = m68ki_read_32(ea);
6184 
6185 		data = MASK_OUT_ABOVE_32(data<<offset);
6186 
6187 		if((offset+width) > 32)
6188 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6189 
6190 		FLAG_N = NFLAG_32(data);
6191 		data  = MAKE_INT_32(data) >> (32 - width);
6192 
6193 		FLAG_Z = data;
6194 		FLAG_V = VFLAG_CLEAR;
6195 		FLAG_C = CFLAG_CLEAR;
6196 
6197 		REG_D[(word2 >> 12) & 7] = data;
6198 
6199 		return;
6200 	}
6201 	m68ki_exception_illegal();
6202 }
6203 
6204 
m68k_op_bfexts_32_pcix(void)6205 static void m68k_op_bfexts_32_pcix(void)
6206 {
6207 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6208 	{
6209 		uint word2 = OPER_I_16();
6210 		sint offset = (word2>>6)&31;
6211 		uint width = word2;
6212 		uint data;
6213 		uint ea = EA_PCIX_8();
6214 
6215 
6216 		if(BIT_B(word2))
6217 			offset = MAKE_INT_32(REG_D[offset&7]);
6218 		if(BIT_5(word2))
6219 			width = REG_D[width&7];
6220 
6221 		/* Offset is signed so we have to use ugly math =( */
6222 		ea += offset / 8;
6223 		offset %= 8;
6224 		if(offset < 0)
6225 		{
6226 			offset += 8;
6227 			ea--;
6228 		}
6229 		width = ((width-1) & 31) + 1;
6230 
6231 		data = m68ki_read_32(ea);
6232 
6233 		data = MASK_OUT_ABOVE_32(data<<offset);
6234 
6235 		if((offset+width) > 32)
6236 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6237 
6238 		FLAG_N = NFLAG_32(data);
6239 		data  = MAKE_INT_32(data) >> (32 - width);
6240 
6241 		FLAG_Z = data;
6242 		FLAG_V = VFLAG_CLEAR;
6243 		FLAG_C = CFLAG_CLEAR;
6244 
6245 		REG_D[(word2 >> 12) & 7] = data;
6246 
6247 		return;
6248 	}
6249 	m68ki_exception_illegal();
6250 }
6251 
6252 
m68k_op_bfextu_32_d(void)6253 static void m68k_op_bfextu_32_d(void)
6254 {
6255 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6256 	{
6257 		uint word2 = OPER_I_16();
6258 		uint offset = (word2>>6)&31;
6259 		uint width = word2;
6260 		uint64 data = DY;
6261 
6262 
6263 		if(BIT_B(word2))
6264 			offset = REG_D[offset&7];
6265 		if(BIT_5(word2))
6266 			width = REG_D[width&7];
6267 
6268 		offset &= 31;
6269 		width = ((width-1) & 31) + 1;
6270 
6271 		data = ROL_32(data, offset);
6272 		FLAG_N = NFLAG_32(data);
6273 		data >>= 32 - width;
6274 
6275 		FLAG_Z = data;
6276 		FLAG_V = VFLAG_CLEAR;
6277 		FLAG_C = CFLAG_CLEAR;
6278 
6279 		REG_D[(word2>>12)&7] = data;
6280 
6281 		return;
6282 	}
6283 	m68ki_exception_illegal();
6284 }
6285 
6286 
m68k_op_bfextu_32_ai(void)6287 static void m68k_op_bfextu_32_ai(void)
6288 {
6289 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6290 	{
6291 		uint word2 = OPER_I_16();
6292 		sint offset = (word2>>6)&31;
6293 		uint width = word2;
6294 		uint data;
6295 		uint ea = EA_AY_AI_8();
6296 
6297 
6298 		if(BIT_B(word2))
6299 		offset = MAKE_INT_32(REG_D[offset&7]);
6300 		if(BIT_5(word2))
6301 			width = REG_D[width&7];
6302 
6303 		/* Offset is signed so we have to use ugly math =( */
6304 		ea += offset / 8;
6305 		offset %= 8;
6306 		if(offset < 0)
6307 		{
6308 			offset += 8;
6309 			ea--;
6310 		}
6311 		width = ((width-1) & 31) + 1;
6312 
6313 		data = m68ki_read_32(ea);
6314 		data = MASK_OUT_ABOVE_32(data<<offset);
6315 
6316 		if((offset+width) > 32)
6317 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6318 
6319 		FLAG_N = NFLAG_32(data);
6320 		data  >>= (32 - width);
6321 
6322 		FLAG_Z = data;
6323 		FLAG_V = VFLAG_CLEAR;
6324 		FLAG_C = CFLAG_CLEAR;
6325 
6326 		REG_D[(word2 >> 12) & 7] = data;
6327 
6328 		return;
6329 	}
6330 	m68ki_exception_illegal();
6331 }
6332 
6333 
m68k_op_bfextu_32_di(void)6334 static void m68k_op_bfextu_32_di(void)
6335 {
6336 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6337 	{
6338 		uint word2 = OPER_I_16();
6339 		sint offset = (word2>>6)&31;
6340 		uint width = word2;
6341 		uint data;
6342 		uint ea = EA_AY_DI_8();
6343 
6344 
6345 		if(BIT_B(word2))
6346 		offset = MAKE_INT_32(REG_D[offset&7]);
6347 		if(BIT_5(word2))
6348 			width = REG_D[width&7];
6349 
6350 		/* Offset is signed so we have to use ugly math =( */
6351 		ea += offset / 8;
6352 		offset %= 8;
6353 		if(offset < 0)
6354 		{
6355 			offset += 8;
6356 			ea--;
6357 		}
6358 		width = ((width-1) & 31) + 1;
6359 
6360 		data = m68ki_read_32(ea);
6361 		data = MASK_OUT_ABOVE_32(data<<offset);
6362 
6363 		if((offset+width) > 32)
6364 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6365 
6366 		FLAG_N = NFLAG_32(data);
6367 		data  >>= (32 - width);
6368 
6369 		FLAG_Z = data;
6370 		FLAG_V = VFLAG_CLEAR;
6371 		FLAG_C = CFLAG_CLEAR;
6372 
6373 		REG_D[(word2 >> 12) & 7] = data;
6374 
6375 		return;
6376 	}
6377 	m68ki_exception_illegal();
6378 }
6379 
6380 
m68k_op_bfextu_32_ix(void)6381 static void m68k_op_bfextu_32_ix(void)
6382 {
6383 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6384 	{
6385 		uint word2 = OPER_I_16();
6386 		sint offset = (word2>>6)&31;
6387 		uint width = word2;
6388 		uint data;
6389 		uint ea = EA_AY_IX_8();
6390 
6391 
6392 		if(BIT_B(word2))
6393 		offset = MAKE_INT_32(REG_D[offset&7]);
6394 		if(BIT_5(word2))
6395 			width = REG_D[width&7];
6396 
6397 		/* Offset is signed so we have to use ugly math =( */
6398 		ea += offset / 8;
6399 		offset %= 8;
6400 		if(offset < 0)
6401 		{
6402 			offset += 8;
6403 			ea--;
6404 		}
6405 		width = ((width-1) & 31) + 1;
6406 
6407 		data = m68ki_read_32(ea);
6408 		data = MASK_OUT_ABOVE_32(data<<offset);
6409 
6410 		if((offset+width) > 32)
6411 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6412 
6413 		FLAG_N = NFLAG_32(data);
6414 		data  >>= (32 - width);
6415 
6416 		FLAG_Z = data;
6417 		FLAG_V = VFLAG_CLEAR;
6418 		FLAG_C = CFLAG_CLEAR;
6419 
6420 		REG_D[(word2 >> 12) & 7] = data;
6421 
6422 		return;
6423 	}
6424 	m68ki_exception_illegal();
6425 }
6426 
6427 
m68k_op_bfextu_32_aw(void)6428 static void m68k_op_bfextu_32_aw(void)
6429 {
6430 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6431 	{
6432 		uint word2 = OPER_I_16();
6433 		sint offset = (word2>>6)&31;
6434 		uint width = word2;
6435 		uint data;
6436 		uint ea = EA_AW_8();
6437 
6438 
6439 		if(BIT_B(word2))
6440 		offset = MAKE_INT_32(REG_D[offset&7]);
6441 		if(BIT_5(word2))
6442 			width = REG_D[width&7];
6443 
6444 		/* Offset is signed so we have to use ugly math =( */
6445 		ea += offset / 8;
6446 		offset %= 8;
6447 		if(offset < 0)
6448 		{
6449 			offset += 8;
6450 			ea--;
6451 		}
6452 		width = ((width-1) & 31) + 1;
6453 
6454 		data = m68ki_read_32(ea);
6455 		data = MASK_OUT_ABOVE_32(data<<offset);
6456 
6457 		if((offset+width) > 32)
6458 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6459 
6460 		FLAG_N = NFLAG_32(data);
6461 		data  >>= (32 - width);
6462 
6463 		FLAG_Z = data;
6464 		FLAG_V = VFLAG_CLEAR;
6465 		FLAG_C = CFLAG_CLEAR;
6466 
6467 		REG_D[(word2 >> 12) & 7] = data;
6468 
6469 		return;
6470 	}
6471 	m68ki_exception_illegal();
6472 }
6473 
6474 
m68k_op_bfextu_32_al(void)6475 static void m68k_op_bfextu_32_al(void)
6476 {
6477 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6478 	{
6479 		uint word2 = OPER_I_16();
6480 		sint offset = (word2>>6)&31;
6481 		uint width = word2;
6482 		uint data;
6483 		uint ea = EA_AL_8();
6484 
6485 
6486 		if(BIT_B(word2))
6487 		offset = MAKE_INT_32(REG_D[offset&7]);
6488 		if(BIT_5(word2))
6489 			width = REG_D[width&7];
6490 
6491 		/* Offset is signed so we have to use ugly math =( */
6492 		ea += offset / 8;
6493 		offset %= 8;
6494 		if(offset < 0)
6495 		{
6496 			offset += 8;
6497 			ea--;
6498 		}
6499 		width = ((width-1) & 31) + 1;
6500 
6501 		data = m68ki_read_32(ea);
6502 		data = MASK_OUT_ABOVE_32(data<<offset);
6503 
6504 		if((offset+width) > 32)
6505 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6506 
6507 		FLAG_N = NFLAG_32(data);
6508 		data  >>= (32 - width);
6509 
6510 		FLAG_Z = data;
6511 		FLAG_V = VFLAG_CLEAR;
6512 		FLAG_C = CFLAG_CLEAR;
6513 
6514 		REG_D[(word2 >> 12) & 7] = data;
6515 
6516 		return;
6517 	}
6518 	m68ki_exception_illegal();
6519 }
6520 
6521 
m68k_op_bfextu_32_pcdi(void)6522 static void m68k_op_bfextu_32_pcdi(void)
6523 {
6524 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6525 	{
6526 		uint word2 = OPER_I_16();
6527 		sint offset = (word2>>6)&31;
6528 		uint width = word2;
6529 		uint data;
6530 		uint ea = EA_PCDI_8();
6531 
6532 
6533 		if(BIT_B(word2))
6534 		offset = MAKE_INT_32(REG_D[offset&7]);
6535 		if(BIT_5(word2))
6536 			width = REG_D[width&7];
6537 
6538 		/* Offset is signed so we have to use ugly math =( */
6539 		ea += offset / 8;
6540 		offset %= 8;
6541 		if(offset < 0)
6542 		{
6543 			offset += 8;
6544 			ea--;
6545 		}
6546 		width = ((width-1) & 31) + 1;
6547 
6548 		data = m68ki_read_32(ea);
6549 		data = MASK_OUT_ABOVE_32(data<<offset);
6550 
6551 		if((offset+width) > 32)
6552 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6553 
6554 		FLAG_N = NFLAG_32(data);
6555 		data  >>= (32 - width);
6556 
6557 		FLAG_Z = data;
6558 		FLAG_V = VFLAG_CLEAR;
6559 		FLAG_C = CFLAG_CLEAR;
6560 
6561 		REG_D[(word2 >> 12) & 7] = data;
6562 
6563 		return;
6564 	}
6565 	m68ki_exception_illegal();
6566 }
6567 
6568 
m68k_op_bfextu_32_pcix(void)6569 static void m68k_op_bfextu_32_pcix(void)
6570 {
6571 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6572 	{
6573 		uint word2 = OPER_I_16();
6574 		sint offset = (word2>>6)&31;
6575 		uint width = word2;
6576 		uint data;
6577 		uint ea = EA_PCIX_8();
6578 
6579 
6580 		if(BIT_B(word2))
6581 		offset = MAKE_INT_32(REG_D[offset&7]);
6582 		if(BIT_5(word2))
6583 			width = REG_D[width&7];
6584 
6585 		/* Offset is signed so we have to use ugly math =( */
6586 		ea += offset / 8;
6587 		offset %= 8;
6588 		if(offset < 0)
6589 		{
6590 			offset += 8;
6591 			ea--;
6592 		}
6593 		width = ((width-1) & 31) + 1;
6594 
6595 		data = m68ki_read_32(ea);
6596 		data = MASK_OUT_ABOVE_32(data<<offset);
6597 
6598 		if((offset+width) > 32)
6599 			data |= (m68ki_read_8(ea+4) << offset) >> 8;
6600 
6601 		FLAG_N = NFLAG_32(data);
6602 		data  >>= (32 - width);
6603 
6604 		FLAG_Z = data;
6605 		FLAG_V = VFLAG_CLEAR;
6606 		FLAG_C = CFLAG_CLEAR;
6607 
6608 		REG_D[(word2 >> 12) & 7] = data;
6609 
6610 		return;
6611 	}
6612 	m68ki_exception_illegal();
6613 }
6614 
6615 
m68k_op_bfffo_32_d(void)6616 static void m68k_op_bfffo_32_d(void)
6617 {
6618 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6619 	{
6620 		uint word2 = OPER_I_16();
6621 		uint offset = (word2>>6)&31;
6622 		uint width = word2;
6623 		uint64 data = DY;
6624 		uint bit;
6625 
6626 
6627 		if(BIT_B(word2))
6628 			offset = REG_D[offset&7];
6629 		if(BIT_5(word2))
6630 			width = REG_D[width&7];
6631 
6632 		offset &= 31;
6633 		width = ((width-1) & 31) + 1;
6634 
6635 		data = ROL_32(data, offset);
6636 		FLAG_N = NFLAG_32(data);
6637 		data >>= 32 - width;
6638 
6639 		FLAG_Z = data;
6640 		FLAG_V = VFLAG_CLEAR;
6641 		FLAG_C = CFLAG_CLEAR;
6642 
6643 		for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6644 			offset++;
6645 
6646 		REG_D[(word2>>12)&7] = offset;
6647 
6648 		return;
6649 	}
6650 	m68ki_exception_illegal();
6651 }
6652 
6653 
m68k_op_bfffo_32_ai(void)6654 static void m68k_op_bfffo_32_ai(void)
6655 {
6656 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6657 	{
6658 		uint word2 = OPER_I_16();
6659 		sint offset = (word2>>6)&31;
6660 		sint local_offset;
6661 		uint width = word2;
6662 		uint data;
6663 		uint bit;
6664 		uint ea = EA_AY_AI_8();
6665 
6666 
6667 		if(BIT_B(word2))
6668 			offset = MAKE_INT_32(REG_D[offset&7]);
6669 		if(BIT_5(word2))
6670 			width = REG_D[width&7];
6671 
6672 		/* Offset is signed so we have to use ugly math =( */
6673 		ea += offset / 8;
6674 		local_offset = offset % 8;
6675 		if(local_offset < 0)
6676 		{
6677 			local_offset += 8;
6678 			ea--;
6679 		}
6680 		width = ((width-1) & 31) + 1;
6681 
6682 		data = m68ki_read_32(ea);
6683 		data = MASK_OUT_ABOVE_32(data<<local_offset);
6684 
6685 		if((local_offset+width) > 32)
6686 			data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
6687 
6688 		FLAG_N = NFLAG_32(data);
6689 		data  >>= (32 - width);
6690 
6691 		FLAG_Z = data;
6692 		FLAG_V = VFLAG_CLEAR;
6693 		FLAG_C = CFLAG_CLEAR;
6694 
6695 		for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6696 			offset++;
6697 
6698 		REG_D[(word2>>12)&7] = offset;
6699 
6700 		return;
6701 	}
6702 	m68ki_exception_illegal();
6703 }
6704 
6705 
m68k_op_bfffo_32_di(void)6706 static void m68k_op_bfffo_32_di(void)
6707 {
6708 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6709 	{
6710 		uint word2 = OPER_I_16();
6711 		sint offset = (word2>>6)&31;
6712 		sint local_offset;
6713 		uint width = word2;
6714 		uint data;
6715 		uint bit;
6716 		uint ea = EA_AY_DI_8();
6717 
6718 
6719 		if(BIT_B(word2))
6720 			offset = MAKE_INT_32(REG_D[offset&7]);
6721 		if(BIT_5(word2))
6722 			width = REG_D[width&7];
6723 
6724 		/* Offset is signed so we have to use ugly math =( */
6725 		ea += offset / 8;
6726 		local_offset = offset % 8;
6727 		if(local_offset < 0)
6728 		{
6729 			local_offset += 8;
6730 			ea--;
6731 		}
6732 		width = ((width-1) & 31) + 1;
6733 
6734 		data = m68ki_read_32(ea);
6735 		data = MASK_OUT_ABOVE_32(data<<local_offset);
6736 
6737 		if((local_offset+width) > 32)
6738 			data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
6739 
6740 		FLAG_N = NFLAG_32(data);
6741 		data  >>= (32 - width);
6742 
6743 		FLAG_Z = data;
6744 		FLAG_V = VFLAG_CLEAR;
6745 		FLAG_C = CFLAG_CLEAR;
6746 
6747 		for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6748 			offset++;
6749 
6750 		REG_D[(word2>>12)&7] = offset;
6751 
6752 		return;
6753 	}
6754 	m68ki_exception_illegal();
6755 }
6756 
6757 
m68k_op_bfffo_32_ix(void)6758 static void m68k_op_bfffo_32_ix(void)
6759 {
6760 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6761 	{
6762 		uint word2 = OPER_I_16();
6763 		sint offset = (word2>>6)&31;
6764 		sint local_offset;
6765 		uint width = word2;
6766 		uint data;
6767 		uint bit;
6768 		uint ea = EA_AY_IX_8();
6769 
6770 
6771 		if(BIT_B(word2))
6772 			offset = MAKE_INT_32(REG_D[offset&7]);
6773 		if(BIT_5(word2))
6774 			width = REG_D[width&7];
6775 
6776 		/* Offset is signed so we have to use ugly math =( */
6777 		ea += offset / 8;
6778 		local_offset = offset % 8;
6779 		if(local_offset < 0)
6780 		{
6781 			local_offset += 8;
6782 			ea--;
6783 		}
6784 		width = ((width-1) & 31) + 1;
6785 
6786 		data = m68ki_read_32(ea);
6787 		data = MASK_OUT_ABOVE_32(data<<local_offset);
6788 
6789 		if((local_offset+width) > 32)
6790 			data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
6791 
6792 		FLAG_N = NFLAG_32(data);
6793 		data  >>= (32 - width);
6794 
6795 		FLAG_Z = data;
6796 		FLAG_V = VFLAG_CLEAR;
6797 		FLAG_C = CFLAG_CLEAR;
6798 
6799 		for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6800 			offset++;
6801 
6802 		REG_D[(word2>>12)&7] = offset;
6803 
6804 		return;
6805 	}
6806 	m68ki_exception_illegal();
6807 }
6808 
6809 
m68k_op_bfffo_32_aw(void)6810 static void m68k_op_bfffo_32_aw(void)
6811 {
6812 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6813 	{
6814 		uint word2 = OPER_I_16();
6815 		sint offset = (word2>>6)&31;
6816 		sint local_offset;
6817 		uint width = word2;
6818 		uint data;
6819 		uint bit;
6820 		uint ea = EA_AW_8();
6821 
6822 
6823 		if(BIT_B(word2))
6824 			offset = MAKE_INT_32(REG_D[offset&7]);
6825 		if(BIT_5(word2))
6826 			width = REG_D[width&7];
6827 
6828 		/* Offset is signed so we have to use ugly math =( */
6829 		ea += offset / 8;
6830 		local_offset = offset % 8;
6831 		if(local_offset < 0)
6832 		{
6833 			local_offset += 8;
6834 			ea--;
6835 		}
6836 		width = ((width-1) & 31) + 1;
6837 
6838 		data = m68ki_read_32(ea);
6839 		data = MASK_OUT_ABOVE_32(data<<local_offset);
6840 
6841 		if((local_offset+width) > 32)
6842 			data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
6843 
6844 		FLAG_N = NFLAG_32(data);
6845 		data  >>= (32 - width);
6846 
6847 		FLAG_Z = data;
6848 		FLAG_V = VFLAG_CLEAR;
6849 		FLAG_C = CFLAG_CLEAR;
6850 
6851 		for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6852 			offset++;
6853 
6854 		REG_D[(word2>>12)&7] = offset;
6855 
6856 		return;
6857 	}
6858 	m68ki_exception_illegal();
6859 }
6860 
6861 
m68k_op_bfffo_32_al(void)6862 static void m68k_op_bfffo_32_al(void)
6863 {
6864 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6865 	{
6866 		uint word2 = OPER_I_16();
6867 		sint offset = (word2>>6)&31;
6868 		sint local_offset;
6869 		uint width = word2;
6870 		uint data;
6871 		uint bit;
6872 		uint ea = EA_AL_8();
6873 
6874 
6875 		if(BIT_B(word2))
6876 			offset = MAKE_INT_32(REG_D[offset&7]);
6877 		if(BIT_5(word2))
6878 			width = REG_D[width&7];
6879 
6880 		/* Offset is signed so we have to use ugly math =( */
6881 		ea += offset / 8;
6882 		local_offset = offset % 8;
6883 		if(local_offset < 0)
6884 		{
6885 			local_offset += 8;
6886 			ea--;
6887 		}
6888 		width = ((width-1) & 31) + 1;
6889 
6890 		data = m68ki_read_32(ea);
6891 		data = MASK_OUT_ABOVE_32(data<<local_offset);
6892 
6893 		if((local_offset+width) > 32)
6894 			data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
6895 
6896 		FLAG_N = NFLAG_32(data);
6897 		data  >>= (32 - width);
6898 
6899 		FLAG_Z = data;
6900 		FLAG_V = VFLAG_CLEAR;
6901 		FLAG_C = CFLAG_CLEAR;
6902 
6903 		for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6904 			offset++;
6905 
6906 		REG_D[(word2>>12)&7] = offset;
6907 
6908 		return;
6909 	}
6910 	m68ki_exception_illegal();
6911 }
6912 
6913 
m68k_op_bfffo_32_pcdi(void)6914 static void m68k_op_bfffo_32_pcdi(void)
6915 {
6916 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6917 	{
6918 		uint word2 = OPER_I_16();
6919 		sint offset = (word2>>6)&31;
6920 		sint local_offset;
6921 		uint width = word2;
6922 		uint data;
6923 		uint bit;
6924 		uint ea = EA_PCDI_8();
6925 
6926 
6927 		if(BIT_B(word2))
6928 			offset = MAKE_INT_32(REG_D[offset&7]);
6929 		if(BIT_5(word2))
6930 			width = REG_D[width&7];
6931 
6932 		/* Offset is signed so we have to use ugly math =( */
6933 		ea += offset / 8;
6934 		local_offset = offset % 8;
6935 		if(local_offset < 0)
6936 		{
6937 			local_offset += 8;
6938 			ea--;
6939 		}
6940 		width = ((width-1) & 31) + 1;
6941 
6942 		data = m68ki_read_32(ea);
6943 		data = MASK_OUT_ABOVE_32(data<<local_offset);
6944 
6945 		if((local_offset+width) > 32)
6946 			data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
6947 
6948 		FLAG_N = NFLAG_32(data);
6949 		data  >>= (32 - width);
6950 
6951 		FLAG_Z = data;
6952 		FLAG_V = VFLAG_CLEAR;
6953 		FLAG_C = CFLAG_CLEAR;
6954 
6955 		for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6956 			offset++;
6957 
6958 		REG_D[(word2>>12)&7] = offset;
6959 
6960 		return;
6961 	}
6962 	m68ki_exception_illegal();
6963 }
6964 
6965 
m68k_op_bfffo_32_pcix(void)6966 static void m68k_op_bfffo_32_pcix(void)
6967 {
6968 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
6969 	{
6970 		uint word2 = OPER_I_16();
6971 		sint offset = (word2>>6)&31;
6972 		sint local_offset;
6973 		uint width = word2;
6974 		uint data;
6975 		uint bit;
6976 		uint ea = EA_PCIX_8();
6977 
6978 
6979 		if(BIT_B(word2))
6980 			offset = MAKE_INT_32(REG_D[offset&7]);
6981 		if(BIT_5(word2))
6982 			width = REG_D[width&7];
6983 
6984 		/* Offset is signed so we have to use ugly math =( */
6985 		ea += offset / 8;
6986 		local_offset = offset % 8;
6987 		if(local_offset < 0)
6988 		{
6989 			local_offset += 8;
6990 			ea--;
6991 		}
6992 		width = ((width-1) & 31) + 1;
6993 
6994 		data = m68ki_read_32(ea);
6995 		data = MASK_OUT_ABOVE_32(data<<local_offset);
6996 
6997 		if((local_offset+width) > 32)
6998 			data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
6999 
7000 		FLAG_N = NFLAG_32(data);
7001 		data  >>= (32 - width);
7002 
7003 		FLAG_Z = data;
7004 		FLAG_V = VFLAG_CLEAR;
7005 		FLAG_C = CFLAG_CLEAR;
7006 
7007 		for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
7008 			offset++;
7009 
7010 		REG_D[(word2>>12)&7] = offset;
7011 
7012 		return;
7013 	}
7014 	m68ki_exception_illegal();
7015 }
7016 
7017 
m68k_op_bfins_32_d(void)7018 static void m68k_op_bfins_32_d(void)
7019 {
7020 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7021 	{
7022 		uint word2 = OPER_I_16();
7023 		uint offset = (word2>>6)&31;
7024 		uint width = word2;
7025 		uint* data = &DY;
7026 		uint64 mask;
7027 		uint64 insert = REG_D[(word2>>12)&7];
7028 
7029 
7030 		if(BIT_B(word2))
7031 			offset = REG_D[offset&7];
7032 		if(BIT_5(word2))
7033 			width = REG_D[width&7];
7034 
7035 
7036 		offset &= 31;
7037 		width = ((width-1) & 31) + 1;
7038 
7039 
7040 		mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7041 		mask = ROR_32(mask, offset);
7042 
7043 		insert = MASK_OUT_ABOVE_32(insert << (32 - width));
7044 		FLAG_N = NFLAG_32(insert);
7045 		FLAG_Z = insert;
7046 		insert = ROR_32(insert, offset);
7047 
7048 		FLAG_V = VFLAG_CLEAR;
7049 		FLAG_C = CFLAG_CLEAR;
7050 
7051 		*data &= ~mask;
7052 		*data |= insert;
7053 
7054 		return;
7055 	}
7056 	m68ki_exception_illegal();
7057 }
7058 
7059 
m68k_op_bfins_32_ai(void)7060 static void m68k_op_bfins_32_ai(void)
7061 {
7062 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7063 	{
7064 		uint word2 = OPER_I_16();
7065 		sint offset = (word2>>6)&31;
7066 		uint width = word2;
7067 		uint insert_base = REG_D[(word2>>12)&7];
7068 		uint insert_long;
7069 		uint insert_byte;
7070 		uint mask_base;
7071 		uint data_long;
7072 		uint mask_long;
7073 		uint data_byte = 0;
7074 		uint mask_byte = 0;
7075 		uint ea = EA_AY_AI_8();
7076 
7077 
7078 		if(BIT_B(word2))
7079 			offset = MAKE_INT_32(REG_D[offset&7]);
7080 		if(BIT_5(word2))
7081 			width = REG_D[width&7];
7082 
7083 		/* Offset is signed so we have to use ugly math =( */
7084 		ea += offset / 8;
7085 		offset %= 8;
7086 		if(offset < 0)
7087 		{
7088 			offset += 8;
7089 			ea--;
7090 		}
7091 		width = ((width-1) & 31) + 1;
7092 
7093 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7094 		mask_long = mask_base >> offset;
7095 
7096 		insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
7097 		FLAG_N = NFLAG_32(insert_base);
7098 		FLAG_Z = insert_base;
7099 		insert_long = insert_base >> offset;
7100 
7101 		data_long = m68ki_read_32(ea);
7102 		FLAG_V = VFLAG_CLEAR;
7103 		FLAG_C = CFLAG_CLEAR;
7104 
7105 		m68ki_write_32(ea, (data_long & ~mask_long) | insert_long);
7106 
7107 		if((width + offset) > 32)
7108 		{
7109 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7110 			insert_byte = MASK_OUT_ABOVE_8(insert_base);
7111 			data_byte = m68ki_read_8(ea+4);
7112 			FLAG_Z |= (data_byte & mask_byte);
7113 			m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte);
7114 		}
7115 		return;
7116 	}
7117 	m68ki_exception_illegal();
7118 }
7119 
7120 
m68k_op_bfins_32_di(void)7121 static void m68k_op_bfins_32_di(void)
7122 {
7123 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7124 	{
7125 		uint word2 = OPER_I_16();
7126 		sint offset = (word2>>6)&31;
7127 		uint width = word2;
7128 		uint insert_base = REG_D[(word2>>12)&7];
7129 		uint insert_long;
7130 		uint insert_byte;
7131 		uint mask_base;
7132 		uint data_long;
7133 		uint mask_long;
7134 		uint data_byte = 0;
7135 		uint mask_byte = 0;
7136 		uint ea = EA_AY_DI_8();
7137 
7138 
7139 		if(BIT_B(word2))
7140 			offset = MAKE_INT_32(REG_D[offset&7]);
7141 		if(BIT_5(word2))
7142 			width = REG_D[width&7];
7143 
7144 		/* Offset is signed so we have to use ugly math =( */
7145 		ea += offset / 8;
7146 		offset %= 8;
7147 		if(offset < 0)
7148 		{
7149 			offset += 8;
7150 			ea--;
7151 		}
7152 		width = ((width-1) & 31) + 1;
7153 
7154 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7155 		mask_long = mask_base >> offset;
7156 
7157 		insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
7158 		FLAG_N = NFLAG_32(insert_base);
7159 		FLAG_Z = insert_base;
7160 		insert_long = insert_base >> offset;
7161 
7162 		data_long = m68ki_read_32(ea);
7163 		FLAG_V = VFLAG_CLEAR;
7164 		FLAG_C = CFLAG_CLEAR;
7165 
7166 		m68ki_write_32(ea, (data_long & ~mask_long) | insert_long);
7167 
7168 		if((width + offset) > 32)
7169 		{
7170 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7171 			insert_byte = MASK_OUT_ABOVE_8(insert_base);
7172 			data_byte = m68ki_read_8(ea+4);
7173 			FLAG_Z |= (data_byte & mask_byte);
7174 			m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte);
7175 		}
7176 		return;
7177 	}
7178 	m68ki_exception_illegal();
7179 }
7180 
7181 
m68k_op_bfins_32_ix(void)7182 static void m68k_op_bfins_32_ix(void)
7183 {
7184 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7185 	{
7186 		uint word2 = OPER_I_16();
7187 		sint offset = (word2>>6)&31;
7188 		uint width = word2;
7189 		uint insert_base = REG_D[(word2>>12)&7];
7190 		uint insert_long;
7191 		uint insert_byte;
7192 		uint mask_base;
7193 		uint data_long;
7194 		uint mask_long;
7195 		uint data_byte = 0;
7196 		uint mask_byte = 0;
7197 		uint ea = EA_AY_IX_8();
7198 
7199 
7200 		if(BIT_B(word2))
7201 			offset = MAKE_INT_32(REG_D[offset&7]);
7202 		if(BIT_5(word2))
7203 			width = REG_D[width&7];
7204 
7205 		/* Offset is signed so we have to use ugly math =( */
7206 		ea += offset / 8;
7207 		offset %= 8;
7208 		if(offset < 0)
7209 		{
7210 			offset += 8;
7211 			ea--;
7212 		}
7213 		width = ((width-1) & 31) + 1;
7214 
7215 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7216 		mask_long = mask_base >> offset;
7217 
7218 		insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
7219 		FLAG_N = NFLAG_32(insert_base);
7220 		FLAG_Z = insert_base;
7221 		insert_long = insert_base >> offset;
7222 
7223 		data_long = m68ki_read_32(ea);
7224 		FLAG_V = VFLAG_CLEAR;
7225 		FLAG_C = CFLAG_CLEAR;
7226 
7227 		m68ki_write_32(ea, (data_long & ~mask_long) | insert_long);
7228 
7229 		if((width + offset) > 32)
7230 		{
7231 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7232 			insert_byte = MASK_OUT_ABOVE_8(insert_base);
7233 			data_byte = m68ki_read_8(ea+4);
7234 			FLAG_Z |= (data_byte & mask_byte);
7235 			m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte);
7236 		}
7237 		return;
7238 	}
7239 	m68ki_exception_illegal();
7240 }
7241 
7242 
m68k_op_bfins_32_aw(void)7243 static void m68k_op_bfins_32_aw(void)
7244 {
7245 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7246 	{
7247 		uint word2 = OPER_I_16();
7248 		sint offset = (word2>>6)&31;
7249 		uint width = word2;
7250 		uint insert_base = REG_D[(word2>>12)&7];
7251 		uint insert_long;
7252 		uint insert_byte;
7253 		uint mask_base;
7254 		uint data_long;
7255 		uint mask_long;
7256 		uint data_byte = 0;
7257 		uint mask_byte = 0;
7258 		uint ea = EA_AW_8();
7259 
7260 
7261 		if(BIT_B(word2))
7262 			offset = MAKE_INT_32(REG_D[offset&7]);
7263 		if(BIT_5(word2))
7264 			width = REG_D[width&7];
7265 
7266 		/* Offset is signed so we have to use ugly math =( */
7267 		ea += offset / 8;
7268 		offset %= 8;
7269 		if(offset < 0)
7270 		{
7271 			offset += 8;
7272 			ea--;
7273 		}
7274 		width = ((width-1) & 31) + 1;
7275 
7276 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7277 		mask_long = mask_base >> offset;
7278 
7279 		insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
7280 		FLAG_N = NFLAG_32(insert_base);
7281 		FLAG_Z = insert_base;
7282 		insert_long = insert_base >> offset;
7283 
7284 		data_long = m68ki_read_32(ea);
7285 		FLAG_V = VFLAG_CLEAR;
7286 		FLAG_C = CFLAG_CLEAR;
7287 
7288 		m68ki_write_32(ea, (data_long & ~mask_long) | insert_long);
7289 
7290 		if((width + offset) > 32)
7291 		{
7292 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7293 			insert_byte = MASK_OUT_ABOVE_8(insert_base);
7294 			data_byte = m68ki_read_8(ea+4);
7295 			FLAG_Z |= (data_byte & mask_byte);
7296 			m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte);
7297 		}
7298 		return;
7299 	}
7300 	m68ki_exception_illegal();
7301 }
7302 
7303 
m68k_op_bfins_32_al(void)7304 static void m68k_op_bfins_32_al(void)
7305 {
7306 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7307 	{
7308 		uint word2 = OPER_I_16();
7309 		sint offset = (word2>>6)&31;
7310 		uint width = word2;
7311 		uint insert_base = REG_D[(word2>>12)&7];
7312 		uint insert_long;
7313 		uint insert_byte;
7314 		uint mask_base;
7315 		uint data_long;
7316 		uint mask_long;
7317 		uint data_byte = 0;
7318 		uint mask_byte = 0;
7319 		uint ea = EA_AL_8();
7320 
7321 
7322 		if(BIT_B(word2))
7323 			offset = MAKE_INT_32(REG_D[offset&7]);
7324 		if(BIT_5(word2))
7325 			width = REG_D[width&7];
7326 
7327 		/* Offset is signed so we have to use ugly math =( */
7328 		ea += offset / 8;
7329 		offset %= 8;
7330 		if(offset < 0)
7331 		{
7332 			offset += 8;
7333 			ea--;
7334 		}
7335 		width = ((width-1) & 31) + 1;
7336 
7337 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7338 		mask_long = mask_base >> offset;
7339 
7340 		insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
7341 		FLAG_N = NFLAG_32(insert_base);
7342 		FLAG_Z = insert_base;
7343 		insert_long = insert_base >> offset;
7344 
7345 		data_long = m68ki_read_32(ea);
7346 		FLAG_V = VFLAG_CLEAR;
7347 		FLAG_C = CFLAG_CLEAR;
7348 
7349 		m68ki_write_32(ea, (data_long & ~mask_long) | insert_long);
7350 
7351 		if((width + offset) > 32)
7352 		{
7353 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7354 			insert_byte = MASK_OUT_ABOVE_8(insert_base);
7355 			data_byte = m68ki_read_8(ea+4);
7356 			FLAG_Z |= (data_byte & mask_byte);
7357 			m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte);
7358 		}
7359 		return;
7360 	}
7361 	m68ki_exception_illegal();
7362 }
7363 
7364 
m68k_op_bfset_32_d(void)7365 static void m68k_op_bfset_32_d(void)
7366 {
7367 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7368 	{
7369 		uint word2 = OPER_I_16();
7370 		uint offset = (word2>>6)&31;
7371 		uint width = word2;
7372 		uint* data = &DY;
7373 		uint64 mask;
7374 
7375 
7376 		if(BIT_B(word2))
7377 			offset = REG_D[offset&7];
7378 		if(BIT_5(word2))
7379 			width = REG_D[width&7];
7380 
7381 
7382 		offset &= 31;
7383 		width = ((width-1) & 31) + 1;
7384 
7385 
7386 		mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7387 		mask = ROR_32(mask, offset);
7388 
7389 		FLAG_N = NFLAG_32(*data<<offset);
7390 		FLAG_Z = *data & mask;
7391 		FLAG_V = VFLAG_CLEAR;
7392 		FLAG_C = CFLAG_CLEAR;
7393 
7394 		*data |= mask;
7395 
7396 		return;
7397 	}
7398 	m68ki_exception_illegal();
7399 }
7400 
7401 
m68k_op_bfset_32_ai(void)7402 static void m68k_op_bfset_32_ai(void)
7403 {
7404 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7405 	{
7406 		uint word2 = OPER_I_16();
7407 		sint offset = (word2>>6)&31;
7408 		uint width = word2;
7409 		uint mask_base;
7410 		uint data_long;
7411 		uint mask_long;
7412 		uint data_byte = 0;
7413 		uint mask_byte = 0;
7414 		uint ea = EA_AY_AI_8();
7415 
7416 
7417 		if(BIT_B(word2))
7418 			offset = MAKE_INT_32(REG_D[offset&7]);
7419 		if(BIT_5(word2))
7420 			width = REG_D[width&7];
7421 
7422 		/* Offset is signed so we have to use ugly math =( */
7423 		ea += offset / 8;
7424 		offset %= 8;
7425 		if(offset < 0)
7426 		{
7427 			offset += 8;
7428 			ea--;
7429 		}
7430 		width = ((width-1) & 31) + 1;
7431 
7432 
7433 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7434 		mask_long = mask_base >> offset;
7435 
7436 		data_long = m68ki_read_32(ea);
7437 		FLAG_N = NFLAG_32(data_long << offset);
7438 		FLAG_Z = data_long & mask_long;
7439 		FLAG_V = VFLAG_CLEAR;
7440 		FLAG_C = CFLAG_CLEAR;
7441 
7442 		m68ki_write_32(ea, data_long | mask_long);
7443 
7444 		if((width + offset) > 32)
7445 		{
7446 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7447 			data_byte = m68ki_read_8(ea+4);
7448 			FLAG_Z |= (data_byte & mask_byte);
7449 			m68ki_write_8(ea+4, data_byte | mask_byte);
7450 		}
7451 		return;
7452 	}
7453 	m68ki_exception_illegal();
7454 }
7455 
7456 
m68k_op_bfset_32_di(void)7457 static void m68k_op_bfset_32_di(void)
7458 {
7459 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7460 	{
7461 		uint word2 = OPER_I_16();
7462 		sint offset = (word2>>6)&31;
7463 		uint width = word2;
7464 		uint mask_base;
7465 		uint data_long;
7466 		uint mask_long;
7467 		uint data_byte = 0;
7468 		uint mask_byte = 0;
7469 		uint ea = EA_AY_DI_8();
7470 
7471 
7472 		if(BIT_B(word2))
7473 			offset = MAKE_INT_32(REG_D[offset&7]);
7474 		if(BIT_5(word2))
7475 			width = REG_D[width&7];
7476 
7477 		/* Offset is signed so we have to use ugly math =( */
7478 		ea += offset / 8;
7479 		offset %= 8;
7480 		if(offset < 0)
7481 		{
7482 			offset += 8;
7483 			ea--;
7484 		}
7485 		width = ((width-1) & 31) + 1;
7486 
7487 
7488 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7489 		mask_long = mask_base >> offset;
7490 
7491 		data_long = m68ki_read_32(ea);
7492 		FLAG_N = NFLAG_32(data_long << offset);
7493 		FLAG_Z = data_long & mask_long;
7494 		FLAG_V = VFLAG_CLEAR;
7495 		FLAG_C = CFLAG_CLEAR;
7496 
7497 		m68ki_write_32(ea, data_long | mask_long);
7498 
7499 		if((width + offset) > 32)
7500 		{
7501 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7502 			data_byte = m68ki_read_8(ea+4);
7503 			FLAG_Z |= (data_byte & mask_byte);
7504 			m68ki_write_8(ea+4, data_byte | mask_byte);
7505 		}
7506 		return;
7507 	}
7508 	m68ki_exception_illegal();
7509 }
7510 
7511 
m68k_op_bfset_32_ix(void)7512 static void m68k_op_bfset_32_ix(void)
7513 {
7514 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7515 	{
7516 		uint word2 = OPER_I_16();
7517 		sint offset = (word2>>6)&31;
7518 		uint width = word2;
7519 		uint mask_base;
7520 		uint data_long;
7521 		uint mask_long;
7522 		uint data_byte = 0;
7523 		uint mask_byte = 0;
7524 		uint ea = EA_AY_IX_8();
7525 
7526 
7527 		if(BIT_B(word2))
7528 			offset = MAKE_INT_32(REG_D[offset&7]);
7529 		if(BIT_5(word2))
7530 			width = REG_D[width&7];
7531 
7532 		/* Offset is signed so we have to use ugly math =( */
7533 		ea += offset / 8;
7534 		offset %= 8;
7535 		if(offset < 0)
7536 		{
7537 			offset += 8;
7538 			ea--;
7539 		}
7540 		width = ((width-1) & 31) + 1;
7541 
7542 
7543 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7544 		mask_long = mask_base >> offset;
7545 
7546 		data_long = m68ki_read_32(ea);
7547 		FLAG_N = NFLAG_32(data_long << offset);
7548 		FLAG_Z = data_long & mask_long;
7549 		FLAG_V = VFLAG_CLEAR;
7550 		FLAG_C = CFLAG_CLEAR;
7551 
7552 		m68ki_write_32(ea, data_long | mask_long);
7553 
7554 		if((width + offset) > 32)
7555 		{
7556 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7557 			data_byte = m68ki_read_8(ea+4);
7558 			FLAG_Z |= (data_byte & mask_byte);
7559 			m68ki_write_8(ea+4, data_byte | mask_byte);
7560 		}
7561 		return;
7562 	}
7563 	m68ki_exception_illegal();
7564 }
7565 
7566 
m68k_op_bfset_32_aw(void)7567 static void m68k_op_bfset_32_aw(void)
7568 {
7569 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7570 	{
7571 		uint word2 = OPER_I_16();
7572 		sint offset = (word2>>6)&31;
7573 		uint width = word2;
7574 		uint mask_base;
7575 		uint data_long;
7576 		uint mask_long;
7577 		uint data_byte = 0;
7578 		uint mask_byte = 0;
7579 		uint ea = EA_AW_8();
7580 
7581 
7582 		if(BIT_B(word2))
7583 			offset = MAKE_INT_32(REG_D[offset&7]);
7584 		if(BIT_5(word2))
7585 			width = REG_D[width&7];
7586 
7587 		/* Offset is signed so we have to use ugly math =( */
7588 		ea += offset / 8;
7589 		offset %= 8;
7590 		if(offset < 0)
7591 		{
7592 			offset += 8;
7593 			ea--;
7594 		}
7595 		width = ((width-1) & 31) + 1;
7596 
7597 
7598 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7599 		mask_long = mask_base >> offset;
7600 
7601 		data_long = m68ki_read_32(ea);
7602 		FLAG_N = NFLAG_32(data_long << offset);
7603 		FLAG_Z = data_long & mask_long;
7604 		FLAG_V = VFLAG_CLEAR;
7605 		FLAG_C = CFLAG_CLEAR;
7606 
7607 		m68ki_write_32(ea, data_long | mask_long);
7608 
7609 		if((width + offset) > 32)
7610 		{
7611 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7612 			data_byte = m68ki_read_8(ea+4);
7613 			FLAG_Z |= (data_byte & mask_byte);
7614 			m68ki_write_8(ea+4, data_byte | mask_byte);
7615 		}
7616 		return;
7617 	}
7618 	m68ki_exception_illegal();
7619 }
7620 
7621 
m68k_op_bfset_32_al(void)7622 static void m68k_op_bfset_32_al(void)
7623 {
7624 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7625 	{
7626 		uint word2 = OPER_I_16();
7627 		sint offset = (word2>>6)&31;
7628 		uint width = word2;
7629 		uint mask_base;
7630 		uint data_long;
7631 		uint mask_long;
7632 		uint data_byte = 0;
7633 		uint mask_byte = 0;
7634 		uint ea = EA_AL_8();
7635 
7636 
7637 		if(BIT_B(word2))
7638 			offset = MAKE_INT_32(REG_D[offset&7]);
7639 		if(BIT_5(word2))
7640 			width = REG_D[width&7];
7641 
7642 		/* Offset is signed so we have to use ugly math =( */
7643 		ea += offset / 8;
7644 		offset %= 8;
7645 		if(offset < 0)
7646 		{
7647 			offset += 8;
7648 			ea--;
7649 		}
7650 		width = ((width-1) & 31) + 1;
7651 
7652 
7653 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7654 		mask_long = mask_base >> offset;
7655 
7656 		data_long = m68ki_read_32(ea);
7657 		FLAG_N = NFLAG_32(data_long << offset);
7658 		FLAG_Z = data_long & mask_long;
7659 		FLAG_V = VFLAG_CLEAR;
7660 		FLAG_C = CFLAG_CLEAR;
7661 
7662 		m68ki_write_32(ea, data_long | mask_long);
7663 
7664 		if((width + offset) > 32)
7665 		{
7666 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7667 			data_byte = m68ki_read_8(ea+4);
7668 			FLAG_Z |= (data_byte & mask_byte);
7669 			m68ki_write_8(ea+4, data_byte | mask_byte);
7670 		}
7671 		return;
7672 	}
7673 	m68ki_exception_illegal();
7674 }
7675 
7676 
m68k_op_bftst_32_d(void)7677 static void m68k_op_bftst_32_d(void)
7678 {
7679 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7680 	{
7681 		uint word2 = OPER_I_16();
7682 		uint offset = (word2>>6)&31;
7683 		uint width = word2;
7684 		uint* data = &DY;
7685 		uint64 mask;
7686 
7687 
7688 		if(BIT_B(word2))
7689 			offset = REG_D[offset&7];
7690 		if(BIT_5(word2))
7691 			width = REG_D[width&7];
7692 
7693 
7694 		offset &= 31;
7695 		width = ((width-1) & 31) + 1;
7696 
7697 
7698 		mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7699 		mask = ROR_32(mask, offset);
7700 
7701 		FLAG_N = NFLAG_32(*data<<offset);
7702 		FLAG_Z = *data & mask;
7703 		FLAG_V = VFLAG_CLEAR;
7704 		FLAG_C = CFLAG_CLEAR;
7705 
7706 		return;
7707 	}
7708 	m68ki_exception_illegal();
7709 }
7710 
7711 
m68k_op_bftst_32_ai(void)7712 static void m68k_op_bftst_32_ai(void)
7713 {
7714 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7715 	{
7716 		uint word2 = OPER_I_16();
7717 		sint offset = (word2>>6)&31;
7718 		uint width = word2;
7719 		uint mask_base;
7720 		uint data_long;
7721 		uint mask_long;
7722 		uint data_byte = 0;
7723 		uint mask_byte = 0;
7724 		uint ea = EA_AY_AI_8();
7725 
7726 		if(BIT_B(word2))
7727 			offset = MAKE_INT_32(REG_D[offset&7]);
7728 		if(BIT_5(word2))
7729 			width = REG_D[width&7];
7730 
7731 		/* Offset is signed so we have to use ugly math =( */
7732 		ea += offset / 8;
7733 		offset %= 8;
7734 		if(offset < 0)
7735 		{
7736 			offset += 8;
7737 			ea--;
7738 		}
7739 		width = ((width-1) & 31) + 1;
7740 
7741 
7742 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7743 		mask_long = mask_base >> offset;
7744 
7745 		data_long = m68ki_read_32(ea);
7746 		FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
7747 		FLAG_Z = data_long & mask_long;
7748 		FLAG_V = VFLAG_CLEAR;
7749 		FLAG_C = CFLAG_CLEAR;
7750 
7751 		if((width + offset) > 32)
7752 		{
7753 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7754 			data_byte = m68ki_read_8(ea+4);
7755 			FLAG_Z |= (data_byte & mask_byte);
7756 		}
7757 		return;
7758 	}
7759 	m68ki_exception_illegal();
7760 }
7761 
7762 
m68k_op_bftst_32_di(void)7763 static void m68k_op_bftst_32_di(void)
7764 {
7765 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7766 	{
7767 		uint word2 = OPER_I_16();
7768 		sint offset = (word2>>6)&31;
7769 		uint width = word2;
7770 		uint mask_base;
7771 		uint data_long;
7772 		uint mask_long;
7773 		uint data_byte = 0;
7774 		uint mask_byte = 0;
7775 		uint ea = EA_AY_DI_8();
7776 
7777 		if(BIT_B(word2))
7778 			offset = MAKE_INT_32(REG_D[offset&7]);
7779 		if(BIT_5(word2))
7780 			width = REG_D[width&7];
7781 
7782 		/* Offset is signed so we have to use ugly math =( */
7783 		ea += offset / 8;
7784 		offset %= 8;
7785 		if(offset < 0)
7786 		{
7787 			offset += 8;
7788 			ea--;
7789 		}
7790 		width = ((width-1) & 31) + 1;
7791 
7792 
7793 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7794 		mask_long = mask_base >> offset;
7795 
7796 		data_long = m68ki_read_32(ea);
7797 		FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
7798 		FLAG_Z = data_long & mask_long;
7799 		FLAG_V = VFLAG_CLEAR;
7800 		FLAG_C = CFLAG_CLEAR;
7801 
7802 		if((width + offset) > 32)
7803 		{
7804 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7805 			data_byte = m68ki_read_8(ea+4);
7806 			FLAG_Z |= (data_byte & mask_byte);
7807 		}
7808 		return;
7809 	}
7810 	m68ki_exception_illegal();
7811 }
7812 
7813 
m68k_op_bftst_32_ix(void)7814 static void m68k_op_bftst_32_ix(void)
7815 {
7816 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7817 	{
7818 		uint word2 = OPER_I_16();
7819 		sint offset = (word2>>6)&31;
7820 		uint width = word2;
7821 		uint mask_base;
7822 		uint data_long;
7823 		uint mask_long;
7824 		uint data_byte = 0;
7825 		uint mask_byte = 0;
7826 		uint ea = EA_AY_IX_8();
7827 
7828 		if(BIT_B(word2))
7829 			offset = MAKE_INT_32(REG_D[offset&7]);
7830 		if(BIT_5(word2))
7831 			width = REG_D[width&7];
7832 
7833 		/* Offset is signed so we have to use ugly math =( */
7834 		ea += offset / 8;
7835 		offset %= 8;
7836 		if(offset < 0)
7837 		{
7838 			offset += 8;
7839 			ea--;
7840 		}
7841 		width = ((width-1) & 31) + 1;
7842 
7843 
7844 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7845 		mask_long = mask_base >> offset;
7846 
7847 		data_long = m68ki_read_32(ea);
7848 		FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
7849 		FLAG_Z = data_long & mask_long;
7850 		FLAG_V = VFLAG_CLEAR;
7851 		FLAG_C = CFLAG_CLEAR;
7852 
7853 		if((width + offset) > 32)
7854 		{
7855 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7856 			data_byte = m68ki_read_8(ea+4);
7857 			FLAG_Z |= (data_byte & mask_byte);
7858 		}
7859 		return;
7860 	}
7861 	m68ki_exception_illegal();
7862 }
7863 
7864 
m68k_op_bftst_32_aw(void)7865 static void m68k_op_bftst_32_aw(void)
7866 {
7867 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7868 	{
7869 		uint word2 = OPER_I_16();
7870 		sint offset = (word2>>6)&31;
7871 		uint width = word2;
7872 		uint mask_base;
7873 		uint data_long;
7874 		uint mask_long;
7875 		uint data_byte = 0;
7876 		uint mask_byte = 0;
7877 		uint ea = EA_AW_8();
7878 
7879 		if(BIT_B(word2))
7880 			offset = MAKE_INT_32(REG_D[offset&7]);
7881 		if(BIT_5(word2))
7882 			width = REG_D[width&7];
7883 
7884 		/* Offset is signed so we have to use ugly math =( */
7885 		ea += offset / 8;
7886 		offset %= 8;
7887 		if(offset < 0)
7888 		{
7889 			offset += 8;
7890 			ea--;
7891 		}
7892 		width = ((width-1) & 31) + 1;
7893 
7894 
7895 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7896 		mask_long = mask_base >> offset;
7897 
7898 		data_long = m68ki_read_32(ea);
7899 		FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
7900 		FLAG_Z = data_long & mask_long;
7901 		FLAG_V = VFLAG_CLEAR;
7902 		FLAG_C = CFLAG_CLEAR;
7903 
7904 		if((width + offset) > 32)
7905 		{
7906 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7907 			data_byte = m68ki_read_8(ea+4);
7908 			FLAG_Z |= (data_byte & mask_byte);
7909 		}
7910 		return;
7911 	}
7912 	m68ki_exception_illegal();
7913 }
7914 
7915 
m68k_op_bftst_32_al(void)7916 static void m68k_op_bftst_32_al(void)
7917 {
7918 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7919 	{
7920 		uint word2 = OPER_I_16();
7921 		sint offset = (word2>>6)&31;
7922 		uint width = word2;
7923 		uint mask_base;
7924 		uint data_long;
7925 		uint mask_long;
7926 		uint data_byte = 0;
7927 		uint mask_byte = 0;
7928 		uint ea = EA_AL_8();
7929 
7930 		if(BIT_B(word2))
7931 			offset = MAKE_INT_32(REG_D[offset&7]);
7932 		if(BIT_5(word2))
7933 			width = REG_D[width&7];
7934 
7935 		/* Offset is signed so we have to use ugly math =( */
7936 		ea += offset / 8;
7937 		offset %= 8;
7938 		if(offset < 0)
7939 		{
7940 			offset += 8;
7941 			ea--;
7942 		}
7943 		width = ((width-1) & 31) + 1;
7944 
7945 
7946 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7947 		mask_long = mask_base >> offset;
7948 
7949 		data_long = m68ki_read_32(ea);
7950 		FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
7951 		FLAG_Z = data_long & mask_long;
7952 		FLAG_V = VFLAG_CLEAR;
7953 		FLAG_C = CFLAG_CLEAR;
7954 
7955 		if((width + offset) > 32)
7956 		{
7957 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
7958 			data_byte = m68ki_read_8(ea+4);
7959 			FLAG_Z |= (data_byte & mask_byte);
7960 		}
7961 		return;
7962 	}
7963 	m68ki_exception_illegal();
7964 }
7965 
7966 
m68k_op_bftst_32_pcdi(void)7967 static void m68k_op_bftst_32_pcdi(void)
7968 {
7969 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7970 	{
7971 		uint word2 = OPER_I_16();
7972 		sint offset = (word2>>6)&31;
7973 		uint width = word2;
7974 		uint mask_base;
7975 		uint data_long;
7976 		uint mask_long;
7977 		uint data_byte = 0;
7978 		uint mask_byte = 0;
7979 		uint ea = EA_PCDI_8();
7980 
7981 		if(BIT_B(word2))
7982 			offset = MAKE_INT_32(REG_D[offset&7]);
7983 		if(BIT_5(word2))
7984 			width = REG_D[width&7];
7985 
7986 		/* Offset is signed so we have to use ugly math =( */
7987 		ea += offset / 8;
7988 		offset %= 8;
7989 		if(offset < 0)
7990 		{
7991 			offset += 8;
7992 			ea--;
7993 		}
7994 		width = ((width-1) & 31) + 1;
7995 
7996 
7997 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7998 		mask_long = mask_base >> offset;
7999 
8000 		data_long = m68ki_read_32(ea);
8001 		FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
8002 		FLAG_Z = data_long & mask_long;
8003 		FLAG_V = VFLAG_CLEAR;
8004 		FLAG_C = CFLAG_CLEAR;
8005 
8006 		if((width + offset) > 32)
8007 		{
8008 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
8009 			data_byte = m68ki_read_8(ea+4);
8010 			FLAG_Z |= (data_byte & mask_byte);
8011 		}
8012 		return;
8013 	}
8014 	m68ki_exception_illegal();
8015 }
8016 
8017 
m68k_op_bftst_32_pcix(void)8018 static void m68k_op_bftst_32_pcix(void)
8019 {
8020 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8021 	{
8022 		uint word2 = OPER_I_16();
8023 		sint offset = (word2>>6)&31;
8024 		uint width = word2;
8025 		uint mask_base;
8026 		uint data_long;
8027 		uint mask_long;
8028 		uint data_byte = 0;
8029 		uint mask_byte = 0;
8030 		uint ea = EA_PCIX_8();
8031 
8032 		if(BIT_B(word2))
8033 			offset = MAKE_INT_32(REG_D[offset&7]);
8034 		if(BIT_5(word2))
8035 			width = REG_D[width&7];
8036 
8037 		/* Offset is signed so we have to use ugly math =( */
8038 		ea += offset / 8;
8039 		offset %= 8;
8040 		if(offset < 0)
8041 		{
8042 			offset += 8;
8043 			ea--;
8044 		}
8045 		width = ((width-1) & 31) + 1;
8046 
8047 
8048 		mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
8049 		mask_long = mask_base >> offset;
8050 
8051 		data_long = m68ki_read_32(ea);
8052 		FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
8053 		FLAG_Z = data_long & mask_long;
8054 		FLAG_V = VFLAG_CLEAR;
8055 		FLAG_C = CFLAG_CLEAR;
8056 
8057 		if((width + offset) > 32)
8058 		{
8059 			mask_byte = MASK_OUT_ABOVE_8(mask_base);
8060 			data_byte = m68ki_read_8(ea+4);
8061 			FLAG_Z |= (data_byte & mask_byte);
8062 		}
8063 		return;
8064 	}
8065 	m68ki_exception_illegal();
8066 }
8067 
8068 
m68k_op_bkpt(void)8069 static void m68k_op_bkpt(void)
8070 {
8071 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
8072 	{
8073 		m68ki_bkpt_ack(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE) ? REG_IR & 7 : 0);	/* auto-disable (see m68kcpu.h) */
8074 	}
8075 	m68ki_exception_illegal();
8076 }
8077 
8078 
m68k_op_bra_8(void)8079 static void m68k_op_bra_8(void)
8080 {
8081 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
8082 	m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
8083 	if(REG_PC == REG_PPC)
8084 		USE_ALL_CYCLES();
8085 }
8086 
8087 
m68k_op_bra_16(void)8088 static void m68k_op_bra_16(void)
8089 {
8090 	uint offset = OPER_I_16();
8091 	REG_PC -= 2;
8092 	m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8093 	m68ki_branch_16(offset);
8094 	if(REG_PC == REG_PPC)
8095 		USE_ALL_CYCLES();
8096 }
8097 
8098 
m68k_op_bra_32(void)8099 static void m68k_op_bra_32(void)
8100 {
8101 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8102 	{
8103 		uint offset = OPER_I_32();
8104 		REG_PC -= 4;
8105 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8106 		m68ki_branch_32(offset);
8107 		if(REG_PC == REG_PPC)
8108 			USE_ALL_CYCLES();
8109 		return;
8110 	}
8111 	else
8112 	{
8113 		m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
8114 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
8115 		if(REG_PC == REG_PPC)
8116 			USE_ALL_CYCLES();
8117 	}
8118 }
8119 
8120 
m68k_op_bset_32_r_d(void)8121 static void m68k_op_bset_32_r_d(void)
8122 {
8123 	uint* r_dst = &DY;
8124 	uint mask = 1 << (DX & 0x1f);
8125 
8126 	FLAG_Z = *r_dst & mask;
8127 	*r_dst |= mask;
8128 }
8129 
8130 
m68k_op_bset_8_r_ai(void)8131 static void m68k_op_bset_8_r_ai(void)
8132 {
8133 	uint ea = EA_AY_AI_8();
8134 	uint src = m68ki_read_8(ea);
8135 	uint mask = 1 << (DX & 7);
8136 
8137 	FLAG_Z = src & mask;
8138 	m68ki_write_8(ea, src | mask);
8139 }
8140 
8141 
m68k_op_bset_8_r_pi(void)8142 static void m68k_op_bset_8_r_pi(void)
8143 {
8144 	uint ea = EA_AY_PI_8();
8145 	uint src = m68ki_read_8(ea);
8146 	uint mask = 1 << (DX & 7);
8147 
8148 	FLAG_Z = src & mask;
8149 	m68ki_write_8(ea, src | mask);
8150 }
8151 
8152 
m68k_op_bset_8_r_pi7(void)8153 static void m68k_op_bset_8_r_pi7(void)
8154 {
8155 	uint ea = EA_A7_PI_8();
8156 	uint src = m68ki_read_8(ea);
8157 	uint mask = 1 << (DX & 7);
8158 
8159 	FLAG_Z = src & mask;
8160 	m68ki_write_8(ea, src | mask);
8161 }
8162 
8163 
m68k_op_bset_8_r_pd(void)8164 static void m68k_op_bset_8_r_pd(void)
8165 {
8166 	uint ea = EA_AY_PD_8();
8167 	uint src = m68ki_read_8(ea);
8168 	uint mask = 1 << (DX & 7);
8169 
8170 	FLAG_Z = src & mask;
8171 	m68ki_write_8(ea, src | mask);
8172 }
8173 
8174 
m68k_op_bset_8_r_pd7(void)8175 static void m68k_op_bset_8_r_pd7(void)
8176 {
8177 	uint ea = EA_A7_PD_8();
8178 	uint src = m68ki_read_8(ea);
8179 	uint mask = 1 << (DX & 7);
8180 
8181 	FLAG_Z = src & mask;
8182 	m68ki_write_8(ea, src | mask);
8183 }
8184 
8185 
m68k_op_bset_8_r_di(void)8186 static void m68k_op_bset_8_r_di(void)
8187 {
8188 	uint ea = EA_AY_DI_8();
8189 	uint src = m68ki_read_8(ea);
8190 	uint mask = 1 << (DX & 7);
8191 
8192 	FLAG_Z = src & mask;
8193 	m68ki_write_8(ea, src | mask);
8194 }
8195 
8196 
m68k_op_bset_8_r_ix(void)8197 static void m68k_op_bset_8_r_ix(void)
8198 {
8199 	uint ea = EA_AY_IX_8();
8200 	uint src = m68ki_read_8(ea);
8201 	uint mask = 1 << (DX & 7);
8202 
8203 	FLAG_Z = src & mask;
8204 	m68ki_write_8(ea, src | mask);
8205 }
8206 
8207 
m68k_op_bset_8_r_aw(void)8208 static void m68k_op_bset_8_r_aw(void)
8209 {
8210 	uint ea = EA_AW_8();
8211 	uint src = m68ki_read_8(ea);
8212 	uint mask = 1 << (DX & 7);
8213 
8214 	FLAG_Z = src & mask;
8215 	m68ki_write_8(ea, src | mask);
8216 }
8217 
8218 
m68k_op_bset_8_r_al(void)8219 static void m68k_op_bset_8_r_al(void)
8220 {
8221 	uint ea = EA_AL_8();
8222 	uint src = m68ki_read_8(ea);
8223 	uint mask = 1 << (DX & 7);
8224 
8225 	FLAG_Z = src & mask;
8226 	m68ki_write_8(ea, src | mask);
8227 }
8228 
8229 
m68k_op_bset_32_s_d(void)8230 static void m68k_op_bset_32_s_d(void)
8231 {
8232 	uint* r_dst = &DY;
8233 	uint mask = ((uint)1 << (OPER_I_8() & 0x1f));
8234 
8235 	FLAG_Z = *r_dst & mask;
8236 	*r_dst |= mask;
8237 }
8238 
8239 
m68k_op_bset_8_s_ai(void)8240 static void m68k_op_bset_8_s_ai(void)
8241 {
8242 	uint mask = 1 << (OPER_I_8() & 7);
8243 	uint ea = EA_AY_AI_8();
8244 	uint src = m68ki_read_8(ea);
8245 
8246 	FLAG_Z = src & mask;
8247 	m68ki_write_8(ea, src | mask);
8248 }
8249 
8250 
m68k_op_bset_8_s_pi(void)8251 static void m68k_op_bset_8_s_pi(void)
8252 {
8253 	uint mask = 1 << (OPER_I_8() & 7);
8254 	uint ea = EA_AY_PI_8();
8255 	uint src = m68ki_read_8(ea);
8256 
8257 	FLAG_Z = src & mask;
8258 	m68ki_write_8(ea, src | mask);
8259 }
8260 
8261 
m68k_op_bset_8_s_pi7(void)8262 static void m68k_op_bset_8_s_pi7(void)
8263 {
8264 	uint mask = 1 << (OPER_I_8() & 7);
8265 	uint ea = EA_A7_PI_8();
8266 	uint src = m68ki_read_8(ea);
8267 
8268 	FLAG_Z = src & mask;
8269 	m68ki_write_8(ea, src | mask);
8270 }
8271 
8272 
m68k_op_bset_8_s_pd(void)8273 static void m68k_op_bset_8_s_pd(void)
8274 {
8275 	uint mask = 1 << (OPER_I_8() & 7);
8276 	uint ea = EA_AY_PD_8();
8277 	uint src = m68ki_read_8(ea);
8278 
8279 	FLAG_Z = src & mask;
8280 	m68ki_write_8(ea, src | mask);
8281 }
8282 
8283 
m68k_op_bset_8_s_pd7(void)8284 static void m68k_op_bset_8_s_pd7(void)
8285 {
8286 	uint mask = 1 << (OPER_I_8() & 7);
8287 	uint ea = EA_A7_PD_8();
8288 	uint src = m68ki_read_8(ea);
8289 
8290 	FLAG_Z = src & mask;
8291 	m68ki_write_8(ea, src | mask);
8292 }
8293 
8294 
m68k_op_bset_8_s_di(void)8295 static void m68k_op_bset_8_s_di(void)
8296 {
8297 	uint mask = 1 << (OPER_I_8() & 7);
8298 	uint ea = EA_AY_DI_8();
8299 	uint src = m68ki_read_8(ea);
8300 
8301 	FLAG_Z = src & mask;
8302 	m68ki_write_8(ea, src | mask);
8303 }
8304 
8305 
m68k_op_bset_8_s_ix(void)8306 static void m68k_op_bset_8_s_ix(void)
8307 {
8308 	uint mask = 1 << (OPER_I_8() & 7);
8309 	uint ea = EA_AY_IX_8();
8310 	uint src = m68ki_read_8(ea);
8311 
8312 	FLAG_Z = src & mask;
8313 	m68ki_write_8(ea, src | mask);
8314 }
8315 
8316 
m68k_op_bset_8_s_aw(void)8317 static void m68k_op_bset_8_s_aw(void)
8318 {
8319 	uint mask = 1 << (OPER_I_8() & 7);
8320 	uint ea = EA_AW_8();
8321 	uint src = m68ki_read_8(ea);
8322 
8323 	FLAG_Z = src & mask;
8324 	m68ki_write_8(ea, src | mask);
8325 }
8326 
8327 
m68k_op_bset_8_s_al(void)8328 static void m68k_op_bset_8_s_al(void)
8329 {
8330 	uint mask = 1 << (OPER_I_8() & 7);
8331 	uint ea = EA_AL_8();
8332 	uint src = m68ki_read_8(ea);
8333 
8334 	FLAG_Z = src & mask;
8335 	m68ki_write_8(ea, src | mask);
8336 }
8337 
8338 
m68k_op_bsr_8(void)8339 static void m68k_op_bsr_8(void)
8340 {
8341 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
8342 	m68ki_push_32(REG_PC);
8343 	m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
8344 }
8345 
8346 
m68k_op_bsr_16(void)8347 static void m68k_op_bsr_16(void)
8348 {
8349 	uint offset = OPER_I_16();
8350 	m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8351 	m68ki_push_32(REG_PC);
8352 	REG_PC -= 2;
8353 	m68ki_branch_16(offset);
8354 }
8355 
8356 
m68k_op_bsr_32(void)8357 static void m68k_op_bsr_32(void)
8358 {
8359 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8360 	{
8361 		uint offset = OPER_I_32();
8362 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8363 		m68ki_push_32(REG_PC);
8364 		REG_PC -= 4;
8365 		m68ki_branch_32(offset);
8366 		return;
8367 	}
8368 	else
8369 	{
8370 		m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
8371 		m68ki_push_32(REG_PC);
8372 		m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
8373 	}
8374 }
8375 
8376 
m68k_op_btst_32_r_d(void)8377 static void m68k_op_btst_32_r_d(void)
8378 {
8379 	FLAG_Z = DY & (1 << (DX & 0x1f));
8380 }
8381 
8382 
m68k_op_btst_8_r_ai(void)8383 static void m68k_op_btst_8_r_ai(void)
8384 {
8385 	FLAG_Z = OPER_AY_AI_8() & (1 << (DX & 7));
8386 }
8387 
8388 
m68k_op_btst_8_r_pi(void)8389 static void m68k_op_btst_8_r_pi(void)
8390 {
8391 	FLAG_Z = OPER_AY_PI_8() & (1 << (DX & 7));
8392 }
8393 
8394 
m68k_op_btst_8_r_pi7(void)8395 static void m68k_op_btst_8_r_pi7(void)
8396 {
8397 	FLAG_Z = OPER_A7_PI_8() & (1 << (DX & 7));
8398 }
8399 
8400 
m68k_op_btst_8_r_pd(void)8401 static void m68k_op_btst_8_r_pd(void)
8402 {
8403 	FLAG_Z = OPER_AY_PD_8() & (1 << (DX & 7));
8404 }
8405 
8406 
m68k_op_btst_8_r_pd7(void)8407 static void m68k_op_btst_8_r_pd7(void)
8408 {
8409 	FLAG_Z = OPER_A7_PD_8() & (1 << (DX & 7));
8410 }
8411 
8412 
m68k_op_btst_8_r_di(void)8413 static void m68k_op_btst_8_r_di(void)
8414 {
8415 	FLAG_Z = OPER_AY_DI_8() & (1 << (DX & 7));
8416 }
8417 
8418 
m68k_op_btst_8_r_ix(void)8419 static void m68k_op_btst_8_r_ix(void)
8420 {
8421 	FLAG_Z = OPER_AY_IX_8() & (1 << (DX & 7));
8422 }
8423 
8424 
m68k_op_btst_8_r_aw(void)8425 static void m68k_op_btst_8_r_aw(void)
8426 {
8427 	FLAG_Z = OPER_AW_8() & (1 << (DX & 7));
8428 }
8429 
8430 
m68k_op_btst_8_r_al(void)8431 static void m68k_op_btst_8_r_al(void)
8432 {
8433 	FLAG_Z = OPER_AL_8() & (1 << (DX & 7));
8434 }
8435 
8436 
m68k_op_btst_8_r_pcdi(void)8437 static void m68k_op_btst_8_r_pcdi(void)
8438 {
8439 	FLAG_Z = OPER_PCDI_8() & (1 << (DX & 7));
8440 }
8441 
8442 
m68k_op_btst_8_r_pcix(void)8443 static void m68k_op_btst_8_r_pcix(void)
8444 {
8445 	FLAG_Z = OPER_PCIX_8() & (1 << (DX & 7));
8446 }
8447 
8448 
m68k_op_btst_8_r_i(void)8449 static void m68k_op_btst_8_r_i(void)
8450 {
8451 	FLAG_Z = OPER_I_8() & (1 << (DX & 7));
8452 }
8453 
8454 
m68k_op_btst_32_s_d(void)8455 static void m68k_op_btst_32_s_d(void)
8456 {
8457 	FLAG_Z = DY & (1 << (OPER_I_8() & 0x1f));
8458 }
8459 
8460 
m68k_op_btst_8_s_ai(void)8461 static void m68k_op_btst_8_s_ai(void)
8462 {
8463 	uint bit = OPER_I_8() & 7;
8464 
8465 	FLAG_Z = OPER_AY_AI_8() & (1 << bit);
8466 }
8467 
8468 
m68k_op_btst_8_s_pi(void)8469 static void m68k_op_btst_8_s_pi(void)
8470 {
8471 	uint bit = OPER_I_8() & 7;
8472 
8473 	FLAG_Z = OPER_AY_PI_8() & (1 << bit);
8474 }
8475 
8476 
m68k_op_btst_8_s_pi7(void)8477 static void m68k_op_btst_8_s_pi7(void)
8478 {
8479 	uint bit = OPER_I_8() & 7;
8480 
8481 	FLAG_Z = OPER_A7_PI_8() & (1 << bit);
8482 }
8483 
8484 
m68k_op_btst_8_s_pd(void)8485 static void m68k_op_btst_8_s_pd(void)
8486 {
8487 	uint bit = OPER_I_8() & 7;
8488 
8489 	FLAG_Z = OPER_AY_PD_8() & (1 << bit);
8490 }
8491 
8492 
m68k_op_btst_8_s_pd7(void)8493 static void m68k_op_btst_8_s_pd7(void)
8494 {
8495 	uint bit = OPER_I_8() & 7;
8496 
8497 	FLAG_Z = OPER_A7_PD_8() & (1 << bit);
8498 }
8499 
8500 
m68k_op_btst_8_s_di(void)8501 static void m68k_op_btst_8_s_di(void)
8502 {
8503 	uint bit = OPER_I_8() & 7;
8504 
8505 	FLAG_Z = OPER_AY_DI_8() & (1 << bit);
8506 }
8507 
8508 
m68k_op_btst_8_s_ix(void)8509 static void m68k_op_btst_8_s_ix(void)
8510 {
8511 	uint bit = OPER_I_8() & 7;
8512 
8513 	FLAG_Z = OPER_AY_IX_8() & (1 << bit);
8514 }
8515 
8516 
m68k_op_btst_8_s_aw(void)8517 static void m68k_op_btst_8_s_aw(void)
8518 {
8519 	uint bit = OPER_I_8() & 7;
8520 
8521 	FLAG_Z = OPER_AW_8() & (1 << bit);
8522 }
8523 
8524 
m68k_op_btst_8_s_al(void)8525 static void m68k_op_btst_8_s_al(void)
8526 {
8527 	uint bit = OPER_I_8() & 7;
8528 
8529 	FLAG_Z = OPER_AL_8() & (1 << bit);
8530 }
8531 
8532 
m68k_op_btst_8_s_pcdi(void)8533 static void m68k_op_btst_8_s_pcdi(void)
8534 {
8535 	uint bit = OPER_I_8() & 7;
8536 
8537 	FLAG_Z = OPER_PCDI_8() & (1 << bit);
8538 }
8539 
8540 
m68k_op_btst_8_s_pcix(void)8541 static void m68k_op_btst_8_s_pcix(void)
8542 {
8543 	uint bit = OPER_I_8() & 7;
8544 
8545 	FLAG_Z = OPER_PCIX_8() & (1 << bit);
8546 }
8547 
8548 
m68k_op_callm_32_ai(void)8549 static void m68k_op_callm_32_ai(void)
8550 {
8551 	/* note: watch out for pcrelative modes */
8552 	if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
8553 	{
8554 		uint ea = EA_AY_AI_32();
8555 
8556 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8557 		REG_PC += 2;
8558 (void)ea;	/* just to avoid an 'unused variable' warning */
8559 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
8560 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
8561 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
8562 		return;
8563 	}
8564 	m68ki_exception_illegal();
8565 }
8566 
8567 
m68k_op_callm_32_di(void)8568 static void m68k_op_callm_32_di(void)
8569 {
8570 	/* note: watch out for pcrelative modes */
8571 	if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
8572 	{
8573 		uint ea = EA_AY_DI_32();
8574 
8575 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8576 		REG_PC += 2;
8577 (void)ea;	/* just to avoid an 'unused variable' warning */
8578 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
8579 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
8580 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
8581 		return;
8582 	}
8583 	m68ki_exception_illegal();
8584 }
8585 
8586 
m68k_op_callm_32_ix(void)8587 static void m68k_op_callm_32_ix(void)
8588 {
8589 	/* note: watch out for pcrelative modes */
8590 	if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
8591 	{
8592 		uint ea = EA_AY_IX_32();
8593 
8594 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8595 		REG_PC += 2;
8596 (void)ea;	/* just to avoid an 'unused variable' warning */
8597 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
8598 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
8599 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
8600 		return;
8601 	}
8602 	m68ki_exception_illegal();
8603 }
8604 
8605 
m68k_op_callm_32_aw(void)8606 static void m68k_op_callm_32_aw(void)
8607 {
8608 	/* note: watch out for pcrelative modes */
8609 	if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
8610 	{
8611 		uint ea = EA_AW_32();
8612 
8613 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8614 		REG_PC += 2;
8615 (void)ea;	/* just to avoid an 'unused variable' warning */
8616 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
8617 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
8618 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
8619 		return;
8620 	}
8621 	m68ki_exception_illegal();
8622 }
8623 
8624 
m68k_op_callm_32_al(void)8625 static void m68k_op_callm_32_al(void)
8626 {
8627 	/* note: watch out for pcrelative modes */
8628 	if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
8629 	{
8630 		uint ea = EA_AL_32();
8631 
8632 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8633 		REG_PC += 2;
8634 (void)ea;	/* just to avoid an 'unused variable' warning */
8635 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
8636 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
8637 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
8638 		return;
8639 	}
8640 	m68ki_exception_illegal();
8641 }
8642 
8643 
m68k_op_callm_32_pcdi(void)8644 static void m68k_op_callm_32_pcdi(void)
8645 {
8646 	/* note: watch out for pcrelative modes */
8647 	if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
8648 	{
8649 		uint ea = EA_PCDI_32();
8650 
8651 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8652 		REG_PC += 2;
8653 (void)ea;	/* just to avoid an 'unused variable' warning */
8654 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
8655 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
8656 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
8657 		return;
8658 	}
8659 	m68ki_exception_illegal();
8660 }
8661 
8662 
m68k_op_callm_32_pcix(void)8663 static void m68k_op_callm_32_pcix(void)
8664 {
8665 	/* note: watch out for pcrelative modes */
8666 	if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
8667 	{
8668 		uint ea = EA_PCIX_32();
8669 
8670 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8671 		REG_PC += 2;
8672 (void)ea;	/* just to avoid an 'unused variable' warning */
8673 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
8674 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
8675 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
8676 		return;
8677 	}
8678 	m68ki_exception_illegal();
8679 }
8680 
8681 
m68k_op_cas_8_ai(void)8682 static void m68k_op_cas_8_ai(void)
8683 {
8684 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8685 	{
8686 		uint word2 = OPER_I_16();
8687 		uint ea = EA_AY_AI_8();
8688 		uint dest = m68ki_read_8(ea);
8689 		uint* compare = &REG_D[word2 & 7];
8690 		uint res = dest - MASK_OUT_ABOVE_8(*compare);
8691 
8692 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8693 		FLAG_N = NFLAG_8(res);
8694 		FLAG_Z = MASK_OUT_ABOVE_8(res);
8695 		FLAG_V = VFLAG_SUB_8(*compare, dest, res);
8696 		FLAG_C = CFLAG_8(res);
8697 
8698 		if(COND_NE())
8699 			*compare = MASK_OUT_BELOW_8(*compare) | dest;
8700 		else
8701 		{
8702 			USE_CYCLES(3);
8703 			m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
8704 		}
8705 		return;
8706 	}
8707 	m68ki_exception_illegal();
8708 }
8709 
8710 
m68k_op_cas_8_pi(void)8711 static void m68k_op_cas_8_pi(void)
8712 {
8713 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8714 	{
8715 		uint word2 = OPER_I_16();
8716 		uint ea = EA_AY_PI_8();
8717 		uint dest = m68ki_read_8(ea);
8718 		uint* compare = &REG_D[word2 & 7];
8719 		uint res = dest - MASK_OUT_ABOVE_8(*compare);
8720 
8721 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8722 		FLAG_N = NFLAG_8(res);
8723 		FLAG_Z = MASK_OUT_ABOVE_8(res);
8724 		FLAG_V = VFLAG_SUB_8(*compare, dest, res);
8725 		FLAG_C = CFLAG_8(res);
8726 
8727 		if(COND_NE())
8728 			*compare = MASK_OUT_BELOW_8(*compare) | dest;
8729 		else
8730 		{
8731 			USE_CYCLES(3);
8732 			m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
8733 		}
8734 		return;
8735 	}
8736 	m68ki_exception_illegal();
8737 }
8738 
8739 
m68k_op_cas_8_pi7(void)8740 static void m68k_op_cas_8_pi7(void)
8741 {
8742 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8743 	{
8744 		uint word2 = OPER_I_16();
8745 		uint ea = EA_A7_PI_8();
8746 		uint dest = m68ki_read_8(ea);
8747 		uint* compare = &REG_D[word2 & 7];
8748 		uint res = dest - MASK_OUT_ABOVE_8(*compare);
8749 
8750 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8751 		FLAG_N = NFLAG_8(res);
8752 		FLAG_Z = MASK_OUT_ABOVE_8(res);
8753 		FLAG_V = VFLAG_SUB_8(*compare, dest, res);
8754 		FLAG_C = CFLAG_8(res);
8755 
8756 		if(COND_NE())
8757 			*compare = MASK_OUT_BELOW_8(*compare) | dest;
8758 		else
8759 		{
8760 			USE_CYCLES(3);
8761 			m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
8762 		}
8763 		return;
8764 	}
8765 	m68ki_exception_illegal();
8766 }
8767 
8768 
m68k_op_cas_8_pd(void)8769 static void m68k_op_cas_8_pd(void)
8770 {
8771 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8772 	{
8773 		uint word2 = OPER_I_16();
8774 		uint ea = EA_AY_PD_8();
8775 		uint dest = m68ki_read_8(ea);
8776 		uint* compare = &REG_D[word2 & 7];
8777 		uint res = dest - MASK_OUT_ABOVE_8(*compare);
8778 
8779 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8780 		FLAG_N = NFLAG_8(res);
8781 		FLAG_Z = MASK_OUT_ABOVE_8(res);
8782 		FLAG_V = VFLAG_SUB_8(*compare, dest, res);
8783 		FLAG_C = CFLAG_8(res);
8784 
8785 		if(COND_NE())
8786 			*compare = MASK_OUT_BELOW_8(*compare) | dest;
8787 		else
8788 		{
8789 			USE_CYCLES(3);
8790 			m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
8791 		}
8792 		return;
8793 	}
8794 	m68ki_exception_illegal();
8795 }
8796 
8797 
m68k_op_cas_8_pd7(void)8798 static void m68k_op_cas_8_pd7(void)
8799 {
8800 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8801 	{
8802 		uint word2 = OPER_I_16();
8803 		uint ea = EA_A7_PD_8();
8804 		uint dest = m68ki_read_8(ea);
8805 		uint* compare = &REG_D[word2 & 7];
8806 		uint res = dest - MASK_OUT_ABOVE_8(*compare);
8807 
8808 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8809 		FLAG_N = NFLAG_8(res);
8810 		FLAG_Z = MASK_OUT_ABOVE_8(res);
8811 		FLAG_V = VFLAG_SUB_8(*compare, dest, res);
8812 		FLAG_C = CFLAG_8(res);
8813 
8814 		if(COND_NE())
8815 			*compare = MASK_OUT_BELOW_8(*compare) | dest;
8816 		else
8817 		{
8818 			USE_CYCLES(3);
8819 			m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
8820 		}
8821 		return;
8822 	}
8823 	m68ki_exception_illegal();
8824 }
8825 
8826 
m68k_op_cas_8_di(void)8827 static void m68k_op_cas_8_di(void)
8828 {
8829 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8830 	{
8831 		uint word2 = OPER_I_16();
8832 		uint ea = EA_AY_DI_8();
8833 		uint dest = m68ki_read_8(ea);
8834 		uint* compare = &REG_D[word2 & 7];
8835 		uint res = dest - MASK_OUT_ABOVE_8(*compare);
8836 
8837 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8838 		FLAG_N = NFLAG_8(res);
8839 		FLAG_Z = MASK_OUT_ABOVE_8(res);
8840 		FLAG_V = VFLAG_SUB_8(*compare, dest, res);
8841 		FLAG_C = CFLAG_8(res);
8842 
8843 		if(COND_NE())
8844 			*compare = MASK_OUT_BELOW_8(*compare) | dest;
8845 		else
8846 		{
8847 			USE_CYCLES(3);
8848 			m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
8849 		}
8850 		return;
8851 	}
8852 	m68ki_exception_illegal();
8853 }
8854 
8855 
m68k_op_cas_8_ix(void)8856 static void m68k_op_cas_8_ix(void)
8857 {
8858 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8859 	{
8860 		uint word2 = OPER_I_16();
8861 		uint ea = EA_AY_IX_8();
8862 		uint dest = m68ki_read_8(ea);
8863 		uint* compare = &REG_D[word2 & 7];
8864 		uint res = dest - MASK_OUT_ABOVE_8(*compare);
8865 
8866 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8867 		FLAG_N = NFLAG_8(res);
8868 		FLAG_Z = MASK_OUT_ABOVE_8(res);
8869 		FLAG_V = VFLAG_SUB_8(*compare, dest, res);
8870 		FLAG_C = CFLAG_8(res);
8871 
8872 		if(COND_NE())
8873 			*compare = MASK_OUT_BELOW_8(*compare) | dest;
8874 		else
8875 		{
8876 			USE_CYCLES(3);
8877 			m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
8878 		}
8879 		return;
8880 	}
8881 	m68ki_exception_illegal();
8882 }
8883 
8884 
m68k_op_cas_8_aw(void)8885 static void m68k_op_cas_8_aw(void)
8886 {
8887 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8888 	{
8889 		uint word2 = OPER_I_16();
8890 		uint ea = EA_AW_8();
8891 		uint dest = m68ki_read_8(ea);
8892 		uint* compare = &REG_D[word2 & 7];
8893 		uint res = dest - MASK_OUT_ABOVE_8(*compare);
8894 
8895 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8896 		FLAG_N = NFLAG_8(res);
8897 		FLAG_Z = MASK_OUT_ABOVE_8(res);
8898 		FLAG_V = VFLAG_SUB_8(*compare, dest, res);
8899 		FLAG_C = CFLAG_8(res);
8900 
8901 		if(COND_NE())
8902 			*compare = MASK_OUT_BELOW_8(*compare) | dest;
8903 		else
8904 		{
8905 			USE_CYCLES(3);
8906 			m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
8907 		}
8908 		return;
8909 	}
8910 	m68ki_exception_illegal();
8911 }
8912 
8913 
m68k_op_cas_8_al(void)8914 static void m68k_op_cas_8_al(void)
8915 {
8916 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8917 	{
8918 		uint word2 = OPER_I_16();
8919 		uint ea = EA_AL_8();
8920 		uint dest = m68ki_read_8(ea);
8921 		uint* compare = &REG_D[word2 & 7];
8922 		uint res = dest - MASK_OUT_ABOVE_8(*compare);
8923 
8924 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8925 		FLAG_N = NFLAG_8(res);
8926 		FLAG_Z = MASK_OUT_ABOVE_8(res);
8927 		FLAG_V = VFLAG_SUB_8(*compare, dest, res);
8928 		FLAG_C = CFLAG_8(res);
8929 
8930 		if(COND_NE())
8931 			*compare = MASK_OUT_BELOW_8(*compare) | dest;
8932 		else
8933 		{
8934 			USE_CYCLES(3);
8935 			m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
8936 		}
8937 		return;
8938 	}
8939 	m68ki_exception_illegal();
8940 }
8941 
8942 
m68k_op_cas_16_ai(void)8943 static void m68k_op_cas_16_ai(void)
8944 {
8945 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8946 	{
8947 		uint word2 = OPER_I_16();
8948 		uint ea = EA_AY_AI_16();
8949 		uint dest = m68ki_read_16(ea);
8950 		uint* compare = &REG_D[word2 & 7];
8951 		uint res = dest - MASK_OUT_ABOVE_16(*compare);
8952 
8953 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8954 		FLAG_N = NFLAG_16(res);
8955 		FLAG_Z = MASK_OUT_ABOVE_16(res);
8956 		FLAG_V = VFLAG_SUB_16(*compare, dest, res);
8957 		FLAG_C = CFLAG_16(res);
8958 
8959 		if(COND_NE())
8960 			*compare = MASK_OUT_BELOW_16(*compare) | dest;
8961 		else
8962 		{
8963 			USE_CYCLES(3);
8964 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
8965 		}
8966 		return;
8967 	}
8968 	m68ki_exception_illegal();
8969 }
8970 
8971 
m68k_op_cas_16_pi(void)8972 static void m68k_op_cas_16_pi(void)
8973 {
8974 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8975 	{
8976 		uint word2 = OPER_I_16();
8977 		uint ea = EA_AY_PI_16();
8978 		uint dest = m68ki_read_16(ea);
8979 		uint* compare = &REG_D[word2 & 7];
8980 		uint res = dest - MASK_OUT_ABOVE_16(*compare);
8981 
8982 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
8983 		FLAG_N = NFLAG_16(res);
8984 		FLAG_Z = MASK_OUT_ABOVE_16(res);
8985 		FLAG_V = VFLAG_SUB_16(*compare, dest, res);
8986 		FLAG_C = CFLAG_16(res);
8987 
8988 		if(COND_NE())
8989 			*compare = MASK_OUT_BELOW_16(*compare) | dest;
8990 		else
8991 		{
8992 			USE_CYCLES(3);
8993 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
8994 		}
8995 		return;
8996 	}
8997 	m68ki_exception_illegal();
8998 }
8999 
9000 
m68k_op_cas_16_pd(void)9001 static void m68k_op_cas_16_pd(void)
9002 {
9003 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9004 	{
9005 		uint word2 = OPER_I_16();
9006 		uint ea = EA_AY_PD_16();
9007 		uint dest = m68ki_read_16(ea);
9008 		uint* compare = &REG_D[word2 & 7];
9009 		uint res = dest - MASK_OUT_ABOVE_16(*compare);
9010 
9011 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9012 		FLAG_N = NFLAG_16(res);
9013 		FLAG_Z = MASK_OUT_ABOVE_16(res);
9014 		FLAG_V = VFLAG_SUB_16(*compare, dest, res);
9015 		FLAG_C = CFLAG_16(res);
9016 
9017 		if(COND_NE())
9018 			*compare = MASK_OUT_BELOW_16(*compare) | dest;
9019 		else
9020 		{
9021 			USE_CYCLES(3);
9022 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
9023 		}
9024 		return;
9025 	}
9026 	m68ki_exception_illegal();
9027 }
9028 
9029 
m68k_op_cas_16_di(void)9030 static void m68k_op_cas_16_di(void)
9031 {
9032 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9033 	{
9034 		uint word2 = OPER_I_16();
9035 		uint ea = EA_AY_DI_16();
9036 		uint dest = m68ki_read_16(ea);
9037 		uint* compare = &REG_D[word2 & 7];
9038 		uint res = dest - MASK_OUT_ABOVE_16(*compare);
9039 
9040 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9041 		FLAG_N = NFLAG_16(res);
9042 		FLAG_Z = MASK_OUT_ABOVE_16(res);
9043 		FLAG_V = VFLAG_SUB_16(*compare, dest, res);
9044 		FLAG_C = CFLAG_16(res);
9045 
9046 		if(COND_NE())
9047 			*compare = MASK_OUT_BELOW_16(*compare) | dest;
9048 		else
9049 		{
9050 			USE_CYCLES(3);
9051 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
9052 		}
9053 		return;
9054 	}
9055 	m68ki_exception_illegal();
9056 }
9057 
9058 
m68k_op_cas_16_ix(void)9059 static void m68k_op_cas_16_ix(void)
9060 {
9061 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9062 	{
9063 		uint word2 = OPER_I_16();
9064 		uint ea = EA_AY_IX_16();
9065 		uint dest = m68ki_read_16(ea);
9066 		uint* compare = &REG_D[word2 & 7];
9067 		uint res = dest - MASK_OUT_ABOVE_16(*compare);
9068 
9069 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9070 		FLAG_N = NFLAG_16(res);
9071 		FLAG_Z = MASK_OUT_ABOVE_16(res);
9072 		FLAG_V = VFLAG_SUB_16(*compare, dest, res);
9073 		FLAG_C = CFLAG_16(res);
9074 
9075 		if(COND_NE())
9076 			*compare = MASK_OUT_BELOW_16(*compare) | dest;
9077 		else
9078 		{
9079 			USE_CYCLES(3);
9080 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
9081 		}
9082 		return;
9083 	}
9084 	m68ki_exception_illegal();
9085 }
9086 
9087 
m68k_op_cas_16_aw(void)9088 static void m68k_op_cas_16_aw(void)
9089 {
9090 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9091 	{
9092 		uint word2 = OPER_I_16();
9093 		uint ea = EA_AW_16();
9094 		uint dest = m68ki_read_16(ea);
9095 		uint* compare = &REG_D[word2 & 7];
9096 		uint res = dest - MASK_OUT_ABOVE_16(*compare);
9097 
9098 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9099 		FLAG_N = NFLAG_16(res);
9100 		FLAG_Z = MASK_OUT_ABOVE_16(res);
9101 		FLAG_V = VFLAG_SUB_16(*compare, dest, res);
9102 		FLAG_C = CFLAG_16(res);
9103 
9104 		if(COND_NE())
9105 			*compare = MASK_OUT_BELOW_16(*compare) | dest;
9106 		else
9107 		{
9108 			USE_CYCLES(3);
9109 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
9110 		}
9111 		return;
9112 	}
9113 	m68ki_exception_illegal();
9114 }
9115 
9116 
m68k_op_cas_16_al(void)9117 static void m68k_op_cas_16_al(void)
9118 {
9119 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9120 	{
9121 		uint word2 = OPER_I_16();
9122 		uint ea = EA_AL_16();
9123 		uint dest = m68ki_read_16(ea);
9124 		uint* compare = &REG_D[word2 & 7];
9125 		uint res = dest - MASK_OUT_ABOVE_16(*compare);
9126 
9127 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9128 		FLAG_N = NFLAG_16(res);
9129 		FLAG_Z = MASK_OUT_ABOVE_16(res);
9130 		FLAG_V = VFLAG_SUB_16(*compare, dest, res);
9131 		FLAG_C = CFLAG_16(res);
9132 
9133 		if(COND_NE())
9134 			*compare = MASK_OUT_BELOW_16(*compare) | dest;
9135 		else
9136 		{
9137 			USE_CYCLES(3);
9138 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
9139 		}
9140 		return;
9141 	}
9142 	m68ki_exception_illegal();
9143 }
9144 
9145 
m68k_op_cas_32_ai(void)9146 static void m68k_op_cas_32_ai(void)
9147 {
9148 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9149 	{
9150 		uint word2 = OPER_I_16();
9151 		uint ea = EA_AY_AI_32();
9152 		uint dest = m68ki_read_32(ea);
9153 		uint* compare = &REG_D[word2 & 7];
9154 		uint res = dest - *compare;
9155 
9156 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9157 		FLAG_N = NFLAG_32(res);
9158 		FLAG_Z = MASK_OUT_ABOVE_32(res);
9159 		FLAG_V = VFLAG_SUB_32(*compare, dest, res);
9160 		FLAG_C = CFLAG_SUB_32(*compare, dest, res);
9161 
9162 		if(COND_NE())
9163 			*compare = dest;
9164 		else
9165 		{
9166 			USE_CYCLES(3);
9167 			m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
9168 		}
9169 		return;
9170 	}
9171 	m68ki_exception_illegal();
9172 }
9173 
9174 
m68k_op_cas_32_pi(void)9175 static void m68k_op_cas_32_pi(void)
9176 {
9177 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9178 	{
9179 		uint word2 = OPER_I_16();
9180 		uint ea = EA_AY_PI_32();
9181 		uint dest = m68ki_read_32(ea);
9182 		uint* compare = &REG_D[word2 & 7];
9183 		uint res = dest - *compare;
9184 
9185 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9186 		FLAG_N = NFLAG_32(res);
9187 		FLAG_Z = MASK_OUT_ABOVE_32(res);
9188 		FLAG_V = VFLAG_SUB_32(*compare, dest, res);
9189 		FLAG_C = CFLAG_SUB_32(*compare, dest, res);
9190 
9191 		if(COND_NE())
9192 			*compare = dest;
9193 		else
9194 		{
9195 			USE_CYCLES(3);
9196 			m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
9197 		}
9198 		return;
9199 	}
9200 	m68ki_exception_illegal();
9201 }
9202 
9203 
m68k_op_cas_32_pd(void)9204 static void m68k_op_cas_32_pd(void)
9205 {
9206 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9207 	{
9208 		uint word2 = OPER_I_16();
9209 		uint ea = EA_AY_PD_32();
9210 		uint dest = m68ki_read_32(ea);
9211 		uint* compare = &REG_D[word2 & 7];
9212 		uint res = dest - *compare;
9213 
9214 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9215 		FLAG_N = NFLAG_32(res);
9216 		FLAG_Z = MASK_OUT_ABOVE_32(res);
9217 		FLAG_V = VFLAG_SUB_32(*compare, dest, res);
9218 		FLAG_C = CFLAG_SUB_32(*compare, dest, res);
9219 
9220 		if(COND_NE())
9221 			*compare = dest;
9222 		else
9223 		{
9224 			USE_CYCLES(3);
9225 			m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
9226 		}
9227 		return;
9228 	}
9229 	m68ki_exception_illegal();
9230 }
9231 
9232 
m68k_op_cas_32_di(void)9233 static void m68k_op_cas_32_di(void)
9234 {
9235 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9236 	{
9237 		uint word2 = OPER_I_16();
9238 		uint ea = EA_AY_DI_32();
9239 		uint dest = m68ki_read_32(ea);
9240 		uint* compare = &REG_D[word2 & 7];
9241 		uint res = dest - *compare;
9242 
9243 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9244 		FLAG_N = NFLAG_32(res);
9245 		FLAG_Z = MASK_OUT_ABOVE_32(res);
9246 		FLAG_V = VFLAG_SUB_32(*compare, dest, res);
9247 		FLAG_C = CFLAG_SUB_32(*compare, dest, res);
9248 
9249 		if(COND_NE())
9250 			*compare = dest;
9251 		else
9252 		{
9253 			USE_CYCLES(3);
9254 			m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
9255 		}
9256 		return;
9257 	}
9258 	m68ki_exception_illegal();
9259 }
9260 
9261 
m68k_op_cas_32_ix(void)9262 static void m68k_op_cas_32_ix(void)
9263 {
9264 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9265 	{
9266 		uint word2 = OPER_I_16();
9267 		uint ea = EA_AY_IX_32();
9268 		uint dest = m68ki_read_32(ea);
9269 		uint* compare = &REG_D[word2 & 7];
9270 		uint res = dest - *compare;
9271 
9272 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9273 		FLAG_N = NFLAG_32(res);
9274 		FLAG_Z = MASK_OUT_ABOVE_32(res);
9275 		FLAG_V = VFLAG_SUB_32(*compare, dest, res);
9276 		FLAG_C = CFLAG_SUB_32(*compare, dest, res);
9277 
9278 		if(COND_NE())
9279 			*compare = dest;
9280 		else
9281 		{
9282 			USE_CYCLES(3);
9283 			m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
9284 		}
9285 		return;
9286 	}
9287 	m68ki_exception_illegal();
9288 }
9289 
9290 
m68k_op_cas_32_aw(void)9291 static void m68k_op_cas_32_aw(void)
9292 {
9293 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9294 	{
9295 		uint word2 = OPER_I_16();
9296 		uint ea = EA_AW_32();
9297 		uint dest = m68ki_read_32(ea);
9298 		uint* compare = &REG_D[word2 & 7];
9299 		uint res = dest - *compare;
9300 
9301 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9302 		FLAG_N = NFLAG_32(res);
9303 		FLAG_Z = MASK_OUT_ABOVE_32(res);
9304 		FLAG_V = VFLAG_SUB_32(*compare, dest, res);
9305 		FLAG_C = CFLAG_SUB_32(*compare, dest, res);
9306 
9307 		if(COND_NE())
9308 			*compare = dest;
9309 		else
9310 		{
9311 			USE_CYCLES(3);
9312 			m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
9313 		}
9314 		return;
9315 	}
9316 	m68ki_exception_illegal();
9317 }
9318 
9319 
m68k_op_cas_32_al(void)9320 static void m68k_op_cas_32_al(void)
9321 {
9322 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9323 	{
9324 		uint word2 = OPER_I_16();
9325 		uint ea = EA_AL_32();
9326 		uint dest = m68ki_read_32(ea);
9327 		uint* compare = &REG_D[word2 & 7];
9328 		uint res = dest - *compare;
9329 
9330 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9331 		FLAG_N = NFLAG_32(res);
9332 		FLAG_Z = MASK_OUT_ABOVE_32(res);
9333 		FLAG_V = VFLAG_SUB_32(*compare, dest, res);
9334 		FLAG_C = CFLAG_SUB_32(*compare, dest, res);
9335 
9336 		if(COND_NE())
9337 			*compare = dest;
9338 		else
9339 		{
9340 			USE_CYCLES(3);
9341 			m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
9342 		}
9343 		return;
9344 	}
9345 	m68ki_exception_illegal();
9346 }
9347 
9348 
m68k_op_cas2_16(void)9349 static void m68k_op_cas2_16(void)
9350 {
9351 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9352 	{
9353 		uint word2 = OPER_I_32();
9354 		uint* compare1 = &REG_D[(word2 >> 16) & 7];
9355 		uint ea1 = REG_DA[(word2 >> 28) & 15];
9356 		uint dest1 = m68ki_read_16(ea1);
9357 		uint res1 = dest1 - MASK_OUT_ABOVE_16(*compare1);
9358 		uint* compare2 = &REG_D[word2 & 7];
9359 		uint ea2 = REG_DA[(word2 >> 12) & 15];
9360 		uint dest2 = m68ki_read_16(ea2);
9361 		uint res2;
9362 
9363 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9364 		FLAG_N = NFLAG_16(res1);
9365 		FLAG_Z = MASK_OUT_ABOVE_16(res1);
9366 		FLAG_V = VFLAG_SUB_16(*compare1, dest1, res1);
9367 		FLAG_C = CFLAG_16(res1);
9368 
9369 		if(COND_EQ())
9370 		{
9371 			res2 = dest2 - MASK_OUT_ABOVE_16(*compare2);
9372 
9373 			FLAG_N = NFLAG_16(res2);
9374 			FLAG_Z = MASK_OUT_ABOVE_16(res2);
9375 			FLAG_V = VFLAG_SUB_16(*compare2, dest2, res2);
9376 			FLAG_C = CFLAG_16(res2);
9377 
9378 			if(COND_EQ())
9379 			{
9380 				USE_CYCLES(3);
9381 				m68ki_write_16(ea1, REG_D[(word2 >> 22) & 7]);
9382 				m68ki_write_16(ea2, REG_D[(word2 >> 6) & 7]);
9383 				return;
9384 			}
9385 		}
9386 		*compare1 = BIT_1F(word2) ? MAKE_INT_16(dest1) : MASK_OUT_BELOW_16(*compare1) | dest1;
9387 		*compare2 = BIT_F(word2) ? MAKE_INT_16(dest2) : MASK_OUT_BELOW_16(*compare2) | dest2;
9388 		return;
9389 	}
9390 	m68ki_exception_illegal();
9391 }
9392 
9393 
m68k_op_cas2_32(void)9394 static void m68k_op_cas2_32(void)
9395 {
9396 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9397 	{
9398 		uint word2 = OPER_I_32();
9399 		uint* compare1 = &REG_D[(word2 >> 16) & 7];
9400 		uint ea1 = REG_DA[(word2 >> 28) & 15];
9401 		uint dest1 = m68ki_read_32(ea1);
9402 		uint res1 = dest1 - *compare1;
9403 		uint* compare2 = &REG_D[word2 & 7];
9404 		uint ea2 = REG_DA[(word2 >> 12) & 15];
9405 		uint dest2 = m68ki_read_32(ea2);
9406 		uint res2;
9407 
9408 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
9409 		FLAG_N = NFLAG_32(res1);
9410 		FLAG_Z = MASK_OUT_ABOVE_32(res1);
9411 		FLAG_V = VFLAG_SUB_32(*compare1, dest1, res1);
9412 		FLAG_C = CFLAG_SUB_32(*compare1, dest1, res1);
9413 
9414 		if(COND_EQ())
9415 		{
9416 			res2 = dest2 - *compare2;
9417 
9418 			FLAG_N = NFLAG_32(res2);
9419 			FLAG_Z = MASK_OUT_ABOVE_32(res2);
9420 			FLAG_V = VFLAG_SUB_32(*compare2, dest2, res2);
9421 			FLAG_C = CFLAG_SUB_32(*compare2, dest2, res2);
9422 
9423 			if(COND_EQ())
9424 			{
9425 				USE_CYCLES(3);
9426 				m68ki_write_32(ea1, REG_D[(word2 >> 22) & 7]);
9427 				m68ki_write_32(ea2, REG_D[(word2 >> 6) & 7]);
9428 				return;
9429 			}
9430 		}
9431 		*compare1 = dest1;
9432 		*compare2 = dest2;
9433 		return;
9434 	}
9435 	m68ki_exception_illegal();
9436 }
9437 
9438 
m68k_op_chk_16_d(void)9439 static void m68k_op_chk_16_d(void)
9440 {
9441 	sint src = MAKE_INT_16(DX);
9442 	sint bound = MAKE_INT_16(DY);
9443 
9444 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9445 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9446 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9447 
9448 	if(src >= 0 && src <= bound)
9449 	{
9450 		return;
9451 	}
9452 	FLAG_N = (src < 0)<<7;
9453 	m68ki_exception_trap(EXCEPTION_CHK);
9454 }
9455 
9456 
m68k_op_chk_16_ai(void)9457 static void m68k_op_chk_16_ai(void)
9458 {
9459 	sint src = MAKE_INT_16(DX);
9460 	sint bound = MAKE_INT_16(OPER_AY_AI_16());
9461 
9462 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9463 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9464 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9465 
9466 	if(src >= 0 && src <= bound)
9467 	{
9468 		return;
9469 	}
9470 	FLAG_N = (src < 0)<<7;
9471 	m68ki_exception_trap(EXCEPTION_CHK);
9472 }
9473 
9474 
m68k_op_chk_16_pi(void)9475 static void m68k_op_chk_16_pi(void)
9476 {
9477 	sint src = MAKE_INT_16(DX);
9478 	sint bound = MAKE_INT_16(OPER_AY_PI_16());
9479 
9480 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9481 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9482 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9483 
9484 	if(src >= 0 && src <= bound)
9485 	{
9486 		return;
9487 	}
9488 	FLAG_N = (src < 0)<<7;
9489 	m68ki_exception_trap(EXCEPTION_CHK);
9490 }
9491 
9492 
m68k_op_chk_16_pd(void)9493 static void m68k_op_chk_16_pd(void)
9494 {
9495 	sint src = MAKE_INT_16(DX);
9496 	sint bound = MAKE_INT_16(OPER_AY_PD_16());
9497 
9498 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9499 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9500 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9501 
9502 	if(src >= 0 && src <= bound)
9503 	{
9504 		return;
9505 	}
9506 	FLAG_N = (src < 0)<<7;
9507 	m68ki_exception_trap(EXCEPTION_CHK);
9508 }
9509 
9510 
m68k_op_chk_16_di(void)9511 static void m68k_op_chk_16_di(void)
9512 {
9513 	sint src = MAKE_INT_16(DX);
9514 	sint bound = MAKE_INT_16(OPER_AY_DI_16());
9515 
9516 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9517 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9518 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9519 
9520 	if(src >= 0 && src <= bound)
9521 	{
9522 		return;
9523 	}
9524 	FLAG_N = (src < 0)<<7;
9525 	m68ki_exception_trap(EXCEPTION_CHK);
9526 }
9527 
9528 
m68k_op_chk_16_ix(void)9529 static void m68k_op_chk_16_ix(void)
9530 {
9531 	sint src = MAKE_INT_16(DX);
9532 	sint bound = MAKE_INT_16(OPER_AY_IX_16());
9533 
9534 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9535 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9536 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9537 
9538 	if(src >= 0 && src <= bound)
9539 	{
9540 		return;
9541 	}
9542 	FLAG_N = (src < 0)<<7;
9543 	m68ki_exception_trap(EXCEPTION_CHK);
9544 }
9545 
9546 
m68k_op_chk_16_aw(void)9547 static void m68k_op_chk_16_aw(void)
9548 {
9549 	sint src = MAKE_INT_16(DX);
9550 	sint bound = MAKE_INT_16(OPER_AW_16());
9551 
9552 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9553 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9554 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9555 
9556 	if(src >= 0 && src <= bound)
9557 	{
9558 		return;
9559 	}
9560 	FLAG_N = (src < 0)<<7;
9561 	m68ki_exception_trap(EXCEPTION_CHK);
9562 }
9563 
9564 
m68k_op_chk_16_al(void)9565 static void m68k_op_chk_16_al(void)
9566 {
9567 	sint src = MAKE_INT_16(DX);
9568 	sint bound = MAKE_INT_16(OPER_AL_16());
9569 
9570 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9571 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9572 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9573 
9574 	if(src >= 0 && src <= bound)
9575 	{
9576 		return;
9577 	}
9578 	FLAG_N = (src < 0)<<7;
9579 	m68ki_exception_trap(EXCEPTION_CHK);
9580 }
9581 
9582 
m68k_op_chk_16_pcdi(void)9583 static void m68k_op_chk_16_pcdi(void)
9584 {
9585 	sint src = MAKE_INT_16(DX);
9586 	sint bound = MAKE_INT_16(OPER_PCDI_16());
9587 
9588 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9589 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9590 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9591 
9592 	if(src >= 0 && src <= bound)
9593 	{
9594 		return;
9595 	}
9596 	FLAG_N = (src < 0)<<7;
9597 	m68ki_exception_trap(EXCEPTION_CHK);
9598 }
9599 
9600 
m68k_op_chk_16_pcix(void)9601 static void m68k_op_chk_16_pcix(void)
9602 {
9603 	sint src = MAKE_INT_16(DX);
9604 	sint bound = MAKE_INT_16(OPER_PCIX_16());
9605 
9606 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9607 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9608 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9609 
9610 	if(src >= 0 && src <= bound)
9611 	{
9612 		return;
9613 	}
9614 	FLAG_N = (src < 0)<<7;
9615 	m68ki_exception_trap(EXCEPTION_CHK);
9616 }
9617 
9618 
m68k_op_chk_16_i(void)9619 static void m68k_op_chk_16_i(void)
9620 {
9621 	sint src = MAKE_INT_16(DX);
9622 	sint bound = MAKE_INT_16(OPER_I_16());
9623 
9624 	FLAG_Z = ZFLAG_16(src); /* Undocumented */
9625 	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9626 	FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9627 
9628 	if(src >= 0 && src <= bound)
9629 	{
9630 		return;
9631 	}
9632 	FLAG_N = (src < 0)<<7;
9633 	m68ki_exception_trap(EXCEPTION_CHK);
9634 }
9635 
9636 
m68k_op_chk_32_d(void)9637 static void m68k_op_chk_32_d(void)
9638 {
9639 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9640 	{
9641 		sint src = MAKE_INT_32(DX);
9642 		sint bound = MAKE_INT_32(DY);
9643 
9644 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9645 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9646 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9647 
9648 		if(src >= 0 && src <= bound)
9649 		{
9650 			return;
9651 		}
9652 		FLAG_N = (src < 0)<<7;
9653 		m68ki_exception_trap(EXCEPTION_CHK);
9654 		return;
9655 	}
9656 	m68ki_exception_illegal();
9657 }
9658 
9659 
m68k_op_chk_32_ai(void)9660 static void m68k_op_chk_32_ai(void)
9661 {
9662 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9663 	{
9664 		sint src = MAKE_INT_32(DX);
9665 		sint bound = MAKE_INT_32(OPER_AY_AI_32());
9666 
9667 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9668 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9669 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9670 
9671 		if(src >= 0 && src <= bound)
9672 		{
9673 			return;
9674 		}
9675 		FLAG_N = (src < 0)<<7;
9676 		m68ki_exception_trap(EXCEPTION_CHK);
9677 		return;
9678 	}
9679 	m68ki_exception_illegal();
9680 }
9681 
9682 
m68k_op_chk_32_pi(void)9683 static void m68k_op_chk_32_pi(void)
9684 {
9685 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9686 	{
9687 		sint src = MAKE_INT_32(DX);
9688 		sint bound = MAKE_INT_32(OPER_AY_PI_32());
9689 
9690 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9691 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9692 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9693 
9694 		if(src >= 0 && src <= bound)
9695 		{
9696 			return;
9697 		}
9698 		FLAG_N = (src < 0)<<7;
9699 		m68ki_exception_trap(EXCEPTION_CHK);
9700 		return;
9701 	}
9702 	m68ki_exception_illegal();
9703 }
9704 
9705 
m68k_op_chk_32_pd(void)9706 static void m68k_op_chk_32_pd(void)
9707 {
9708 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9709 	{
9710 		sint src = MAKE_INT_32(DX);
9711 		sint bound = MAKE_INT_32(OPER_AY_PD_32());
9712 
9713 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9714 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9715 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9716 
9717 		if(src >= 0 && src <= bound)
9718 		{
9719 			return;
9720 		}
9721 		FLAG_N = (src < 0)<<7;
9722 		m68ki_exception_trap(EXCEPTION_CHK);
9723 		return;
9724 	}
9725 	m68ki_exception_illegal();
9726 }
9727 
9728 
m68k_op_chk_32_di(void)9729 static void m68k_op_chk_32_di(void)
9730 {
9731 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9732 	{
9733 		sint src = MAKE_INT_32(DX);
9734 		sint bound = MAKE_INT_32(OPER_AY_DI_32());
9735 
9736 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9737 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9738 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9739 
9740 		if(src >= 0 && src <= bound)
9741 		{
9742 			return;
9743 		}
9744 		FLAG_N = (src < 0)<<7;
9745 		m68ki_exception_trap(EXCEPTION_CHK);
9746 		return;
9747 	}
9748 	m68ki_exception_illegal();
9749 }
9750 
9751 
m68k_op_chk_32_ix(void)9752 static void m68k_op_chk_32_ix(void)
9753 {
9754 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9755 	{
9756 		sint src = MAKE_INT_32(DX);
9757 		sint bound = MAKE_INT_32(OPER_AY_IX_32());
9758 
9759 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9760 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9761 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9762 
9763 		if(src >= 0 && src <= bound)
9764 		{
9765 			return;
9766 		}
9767 		FLAG_N = (src < 0)<<7;
9768 		m68ki_exception_trap(EXCEPTION_CHK);
9769 		return;
9770 	}
9771 	m68ki_exception_illegal();
9772 }
9773 
9774 
m68k_op_chk_32_aw(void)9775 static void m68k_op_chk_32_aw(void)
9776 {
9777 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9778 	{
9779 		sint src = MAKE_INT_32(DX);
9780 		sint bound = MAKE_INT_32(OPER_AW_32());
9781 
9782 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9783 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9784 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9785 
9786 		if(src >= 0 && src <= bound)
9787 		{
9788 			return;
9789 		}
9790 		FLAG_N = (src < 0)<<7;
9791 		m68ki_exception_trap(EXCEPTION_CHK);
9792 		return;
9793 	}
9794 	m68ki_exception_illegal();
9795 }
9796 
9797 
m68k_op_chk_32_al(void)9798 static void m68k_op_chk_32_al(void)
9799 {
9800 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9801 	{
9802 		sint src = MAKE_INT_32(DX);
9803 		sint bound = MAKE_INT_32(OPER_AL_32());
9804 
9805 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9806 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9807 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9808 
9809 		if(src >= 0 && src <= bound)
9810 		{
9811 			return;
9812 		}
9813 		FLAG_N = (src < 0)<<7;
9814 		m68ki_exception_trap(EXCEPTION_CHK);
9815 		return;
9816 	}
9817 	m68ki_exception_illegal();
9818 }
9819 
9820 
m68k_op_chk_32_pcdi(void)9821 static void m68k_op_chk_32_pcdi(void)
9822 {
9823 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9824 	{
9825 		sint src = MAKE_INT_32(DX);
9826 		sint bound = MAKE_INT_32(OPER_PCDI_32());
9827 
9828 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9829 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9830 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9831 
9832 		if(src >= 0 && src <= bound)
9833 		{
9834 			return;
9835 		}
9836 		FLAG_N = (src < 0)<<7;
9837 		m68ki_exception_trap(EXCEPTION_CHK);
9838 		return;
9839 	}
9840 	m68ki_exception_illegal();
9841 }
9842 
9843 
m68k_op_chk_32_pcix(void)9844 static void m68k_op_chk_32_pcix(void)
9845 {
9846 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9847 	{
9848 		sint src = MAKE_INT_32(DX);
9849 		sint bound = MAKE_INT_32(OPER_PCIX_32());
9850 
9851 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9852 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9853 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9854 
9855 		if(src >= 0 && src <= bound)
9856 		{
9857 			return;
9858 		}
9859 		FLAG_N = (src < 0)<<7;
9860 		m68ki_exception_trap(EXCEPTION_CHK);
9861 		return;
9862 	}
9863 	m68ki_exception_illegal();
9864 }
9865 
9866 
m68k_op_chk_32_i(void)9867 static void m68k_op_chk_32_i(void)
9868 {
9869 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9870 	{
9871 		sint src = MAKE_INT_32(DX);
9872 		sint bound = MAKE_INT_32(OPER_I_32());
9873 
9874 		FLAG_Z = ZFLAG_32(src); /* Undocumented */
9875 		FLAG_V = VFLAG_CLEAR;   /* Undocumented */
9876 		FLAG_C = CFLAG_CLEAR;   /* Undocumented */
9877 
9878 		if(src >= 0 && src <= bound)
9879 		{
9880 			return;
9881 		}
9882 		FLAG_N = (src < 0)<<7;
9883 		m68ki_exception_trap(EXCEPTION_CHK);
9884 		return;
9885 	}
9886 	m68ki_exception_illegal();
9887 }
9888 
9889 
m68k_op_chk2cmp2_8_pcdi(void)9890 static void m68k_op_chk2cmp2_8_pcdi(void)
9891 {
9892 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9893 	{
9894 		uint word2 = OPER_I_16();
9895 		uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
9896 		uint ea = EA_PCDI_8();
9897 		uint lower_bound = m68ki_read_pcrel_8(ea);
9898 		uint upper_bound = m68ki_read_pcrel_8(ea + 1);
9899 
9900 		if(!BIT_F(word2))
9901 			FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
9902 		else
9903 			FLAG_C = compare - lower_bound;
9904 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
9905 		if(COND_CS())
9906 		{
9907 			if(BIT_B(word2))
9908 				m68ki_exception_trap(EXCEPTION_CHK);
9909 			return;
9910 		}
9911 
9912 		FLAG_C = upper_bound - compare;
9913 		if(COND_CS() && BIT_B(word2))
9914 				m68ki_exception_trap(EXCEPTION_CHK);
9915 		return;
9916 	}
9917 	m68ki_exception_illegal();
9918 }
9919 
9920 
m68k_op_chk2cmp2_8_pcix(void)9921 static void m68k_op_chk2cmp2_8_pcix(void)
9922 {
9923 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9924 	{
9925 		uint word2 = OPER_I_16();
9926 		uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
9927 		uint ea = EA_PCIX_8();
9928 		uint lower_bound = m68ki_read_pcrel_8(ea);
9929 		uint upper_bound = m68ki_read_pcrel_8(ea + 1);
9930 
9931 		if(!BIT_F(word2))
9932 			FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
9933 		else
9934 			FLAG_C = compare - lower_bound;
9935 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
9936 		if(COND_CS())
9937 		{
9938 			if(BIT_B(word2))
9939 				m68ki_exception_trap(EXCEPTION_CHK);
9940 			return;
9941 		}
9942 
9943 		FLAG_C = upper_bound - compare;
9944 		if(COND_CS() && BIT_B(word2))
9945 				m68ki_exception_trap(EXCEPTION_CHK);
9946 		return;
9947 	}
9948 	m68ki_exception_illegal();
9949 }
9950 
9951 
m68k_op_chk2cmp2_8_ai(void)9952 static void m68k_op_chk2cmp2_8_ai(void)
9953 {
9954 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9955 	{
9956 		uint word2 = OPER_I_16();
9957 		uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
9958 		uint ea = EA_AY_AI_8();
9959 		uint lower_bound = m68ki_read_8(ea);
9960 		uint upper_bound = m68ki_read_8(ea + 1);
9961 
9962 		if(!BIT_F(word2))
9963 			FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
9964 		else
9965 			FLAG_C = compare - lower_bound;
9966 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
9967 		if(COND_CS())
9968 		{
9969 			if(BIT_B(word2))
9970 				m68ki_exception_trap(EXCEPTION_CHK);
9971 			return;
9972 		}
9973 
9974 		FLAG_C = upper_bound - compare;
9975 		if(COND_CS() && BIT_B(word2))
9976 				m68ki_exception_trap(EXCEPTION_CHK);
9977 		return;
9978 	}
9979 	m68ki_exception_illegal();
9980 }
9981 
9982 
m68k_op_chk2cmp2_8_di(void)9983 static void m68k_op_chk2cmp2_8_di(void)
9984 {
9985 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
9986 	{
9987 		uint word2 = OPER_I_16();
9988 		uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
9989 		uint ea = EA_AY_DI_8();
9990 		uint lower_bound = m68ki_read_8(ea);
9991 		uint upper_bound = m68ki_read_8(ea + 1);
9992 
9993 		if(!BIT_F(word2))
9994 			FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
9995 		else
9996 			FLAG_C = compare - lower_bound;
9997 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
9998 		if(COND_CS())
9999 		{
10000 			if(BIT_B(word2))
10001 				m68ki_exception_trap(EXCEPTION_CHK);
10002 			return;
10003 		}
10004 
10005 		FLAG_C = upper_bound - compare;
10006 		if(COND_CS() && BIT_B(word2))
10007 				m68ki_exception_trap(EXCEPTION_CHK);
10008 		return;
10009 	}
10010 	m68ki_exception_illegal();
10011 }
10012 
10013 
m68k_op_chk2cmp2_8_ix(void)10014 static void m68k_op_chk2cmp2_8_ix(void)
10015 {
10016 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10017 	{
10018 		uint word2 = OPER_I_16();
10019 		uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
10020 		uint ea = EA_AY_IX_8();
10021 		uint lower_bound = m68ki_read_8(ea);
10022 		uint upper_bound = m68ki_read_8(ea + 1);
10023 
10024 		if(!BIT_F(word2))
10025 			FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
10026 		else
10027 			FLAG_C = compare - lower_bound;
10028 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10029 		if(COND_CS())
10030 		{
10031 			if(BIT_B(word2))
10032 				m68ki_exception_trap(EXCEPTION_CHK);
10033 			return;
10034 		}
10035 
10036 		FLAG_C = upper_bound - compare;
10037 		if(COND_CS() && BIT_B(word2))
10038 				m68ki_exception_trap(EXCEPTION_CHK);
10039 		return;
10040 	}
10041 	m68ki_exception_illegal();
10042 }
10043 
10044 
m68k_op_chk2cmp2_8_aw(void)10045 static void m68k_op_chk2cmp2_8_aw(void)
10046 {
10047 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10048 	{
10049 		uint word2 = OPER_I_16();
10050 		uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
10051 		uint ea = EA_AW_8();
10052 		uint lower_bound = m68ki_read_8(ea);
10053 		uint upper_bound = m68ki_read_8(ea + 1);
10054 
10055 		if(!BIT_F(word2))
10056 			FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
10057 		else
10058 			FLAG_C = compare - lower_bound;
10059 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10060 		if(COND_CS())
10061 		{
10062 			if(BIT_B(word2))
10063 				m68ki_exception_trap(EXCEPTION_CHK);
10064 			return;
10065 		}
10066 
10067 		FLAG_C = upper_bound - compare;
10068 		if(COND_CS() && BIT_B(word2))
10069 				m68ki_exception_trap(EXCEPTION_CHK);
10070 		return;
10071 	}
10072 	m68ki_exception_illegal();
10073 }
10074 
10075 
m68k_op_chk2cmp2_8_al(void)10076 static void m68k_op_chk2cmp2_8_al(void)
10077 {
10078 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10079 	{
10080 		uint word2 = OPER_I_16();
10081 		uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
10082 		uint ea = EA_AL_8();
10083 		uint lower_bound = m68ki_read_8(ea);
10084 		uint upper_bound = m68ki_read_8(ea + 1);
10085 
10086 		if(!BIT_F(word2))
10087 			FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
10088 		else
10089 			FLAG_C = compare - lower_bound;
10090 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10091 		if(COND_CS())
10092 		{
10093 			if(BIT_B(word2))
10094 				m68ki_exception_trap(EXCEPTION_CHK);
10095 			return;
10096 		}
10097 
10098 		FLAG_C = upper_bound - compare;
10099 		if(COND_CS() && BIT_B(word2))
10100 				m68ki_exception_trap(EXCEPTION_CHK);
10101 		return;
10102 	}
10103 	m68ki_exception_illegal();
10104 }
10105 
10106 
m68k_op_chk2cmp2_16_pcdi(void)10107 static void m68k_op_chk2cmp2_16_pcdi(void)
10108 {
10109 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10110 	{
10111 		uint word2 = OPER_I_16();
10112 		uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
10113 		uint ea = EA_PCDI_16();
10114 		uint lower_bound = m68ki_read_pcrel_16(ea);
10115 		uint upper_bound = m68ki_read_pcrel_16(ea + 2);
10116 
10117 		if(!BIT_F(word2))
10118 			FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10119 		else
10120 			FLAG_C = compare - lower_bound;
10121 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10122 		FLAG_C = CFLAG_16(FLAG_C);
10123 		if(COND_CS())
10124 		{
10125 			if(BIT_B(word2))
10126 				m68ki_exception_trap(EXCEPTION_CHK);
10127 			return;
10128 		}
10129 
10130 		if(!BIT_F(word2))
10131 			FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10132 		else
10133 			FLAG_C = upper_bound - compare;
10134 		FLAG_C = CFLAG_16(FLAG_C);
10135 		if(COND_CS() && BIT_B(word2))
10136 				m68ki_exception_trap(EXCEPTION_CHK);
10137 		return;
10138 	}
10139 	m68ki_exception_illegal();
10140 }
10141 
10142 
m68k_op_chk2cmp2_16_pcix(void)10143 static void m68k_op_chk2cmp2_16_pcix(void)
10144 {
10145 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10146 	{
10147 		uint word2 = OPER_I_16();
10148 		uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
10149 		uint ea = EA_PCIX_16();
10150 		uint lower_bound = m68ki_read_pcrel_16(ea);
10151 		uint upper_bound = m68ki_read_pcrel_16(ea + 2);
10152 
10153 		if(!BIT_F(word2))
10154 			FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10155 		else
10156 			FLAG_C = compare - lower_bound;
10157 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10158 		FLAG_C = CFLAG_16(FLAG_C);
10159 		if(COND_CS())
10160 		{
10161 			if(BIT_B(word2))
10162 				m68ki_exception_trap(EXCEPTION_CHK);
10163 			return;
10164 		}
10165 
10166 		if(!BIT_F(word2))
10167 			FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10168 		else
10169 			FLAG_C = upper_bound - compare;
10170 		FLAG_C = CFLAG_16(FLAG_C);
10171 		if(COND_CS() && BIT_B(word2))
10172 				m68ki_exception_trap(EXCEPTION_CHK);
10173 		return;
10174 	}
10175 	m68ki_exception_illegal();
10176 }
10177 
10178 
m68k_op_chk2cmp2_16_ai(void)10179 static void m68k_op_chk2cmp2_16_ai(void)
10180 {
10181 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10182 	{
10183 		uint word2 = OPER_I_16();
10184 		uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
10185 		uint ea = EA_AY_AI_16();
10186 		uint lower_bound = m68ki_read_16(ea);
10187 		uint upper_bound = m68ki_read_16(ea + 2);
10188 
10189 		if(!BIT_F(word2))
10190 			FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10191 		else
10192 			FLAG_C = compare - lower_bound;
10193 
10194 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10195 		FLAG_C = CFLAG_16(FLAG_C);
10196 		if(COND_CS())
10197 		{
10198 			if(BIT_B(word2))
10199 				m68ki_exception_trap(EXCEPTION_CHK);
10200 			return;
10201 		}
10202 		if(!BIT_F(word2))
10203 			FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10204 		else
10205 			FLAG_C = upper_bound - compare;
10206 
10207 		FLAG_C = CFLAG_16(FLAG_C);
10208 		if(COND_CS() && BIT_B(word2))
10209 				m68ki_exception_trap(EXCEPTION_CHK);
10210 		return;
10211 	}
10212 	m68ki_exception_illegal();
10213 }
10214 
10215 
m68k_op_chk2cmp2_16_di(void)10216 static void m68k_op_chk2cmp2_16_di(void)
10217 {
10218 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10219 	{
10220 		uint word2 = OPER_I_16();
10221 		uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
10222 		uint ea = EA_AY_DI_16();
10223 		uint lower_bound = m68ki_read_16(ea);
10224 		uint upper_bound = m68ki_read_16(ea + 2);
10225 
10226 		if(!BIT_F(word2))
10227 			FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10228 		else
10229 			FLAG_C = compare - lower_bound;
10230 
10231 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10232 		FLAG_C = CFLAG_16(FLAG_C);
10233 		if(COND_CS())
10234 		{
10235 			if(BIT_B(word2))
10236 				m68ki_exception_trap(EXCEPTION_CHK);
10237 			return;
10238 		}
10239 		if(!BIT_F(word2))
10240 			FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10241 		else
10242 			FLAG_C = upper_bound - compare;
10243 
10244 		FLAG_C = CFLAG_16(FLAG_C);
10245 		if(COND_CS() && BIT_B(word2))
10246 				m68ki_exception_trap(EXCEPTION_CHK);
10247 		return;
10248 	}
10249 	m68ki_exception_illegal();
10250 }
10251 
10252 
m68k_op_chk2cmp2_16_ix(void)10253 static void m68k_op_chk2cmp2_16_ix(void)
10254 {
10255 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10256 	{
10257 		uint word2 = OPER_I_16();
10258 		uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
10259 		uint ea = EA_AY_IX_16();
10260 		uint lower_bound = m68ki_read_16(ea);
10261 		uint upper_bound = m68ki_read_16(ea + 2);
10262 
10263 		if(!BIT_F(word2))
10264 			FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10265 		else
10266 			FLAG_C = compare - lower_bound;
10267 
10268 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10269 		FLAG_C = CFLAG_16(FLAG_C);
10270 		if(COND_CS())
10271 		{
10272 			if(BIT_B(word2))
10273 				m68ki_exception_trap(EXCEPTION_CHK);
10274 			return;
10275 		}
10276 		if(!BIT_F(word2))
10277 			FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10278 		else
10279 			FLAG_C = upper_bound - compare;
10280 
10281 		FLAG_C = CFLAG_16(FLAG_C);
10282 		if(COND_CS() && BIT_B(word2))
10283 				m68ki_exception_trap(EXCEPTION_CHK);
10284 		return;
10285 	}
10286 	m68ki_exception_illegal();
10287 }
10288 
10289 
m68k_op_chk2cmp2_16_aw(void)10290 static void m68k_op_chk2cmp2_16_aw(void)
10291 {
10292 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10293 	{
10294 		uint word2 = OPER_I_16();
10295 		uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
10296 		uint ea = EA_AW_16();
10297 		uint lower_bound = m68ki_read_16(ea);
10298 		uint upper_bound = m68ki_read_16(ea + 2);
10299 
10300 		if(!BIT_F(word2))
10301 			FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10302 		else
10303 			FLAG_C = compare - lower_bound;
10304 
10305 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10306 		FLAG_C = CFLAG_16(FLAG_C);
10307 		if(COND_CS())
10308 		{
10309 			if(BIT_B(word2))
10310 				m68ki_exception_trap(EXCEPTION_CHK);
10311 			return;
10312 		}
10313 		if(!BIT_F(word2))
10314 			FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10315 		else
10316 			FLAG_C = upper_bound - compare;
10317 
10318 		FLAG_C = CFLAG_16(FLAG_C);
10319 		if(COND_CS() && BIT_B(word2))
10320 				m68ki_exception_trap(EXCEPTION_CHK);
10321 		return;
10322 	}
10323 	m68ki_exception_illegal();
10324 }
10325 
10326 
m68k_op_chk2cmp2_16_al(void)10327 static void m68k_op_chk2cmp2_16_al(void)
10328 {
10329 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10330 	{
10331 		uint word2 = OPER_I_16();
10332 		uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
10333 		uint ea = EA_AL_16();
10334 		uint lower_bound = m68ki_read_16(ea);
10335 		uint upper_bound = m68ki_read_16(ea + 2);
10336 
10337 		if(!BIT_F(word2))
10338 			FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10339 		else
10340 			FLAG_C = compare - lower_bound;
10341 
10342 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10343 		FLAG_C = CFLAG_16(FLAG_C);
10344 		if(COND_CS())
10345 		{
10346 			if(BIT_B(word2))
10347 				m68ki_exception_trap(EXCEPTION_CHK);
10348 			return;
10349 		}
10350 		if(!BIT_F(word2))
10351 			FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10352 		else
10353 			FLAG_C = upper_bound - compare;
10354 
10355 		FLAG_C = CFLAG_16(FLAG_C);
10356 		if(COND_CS() && BIT_B(word2))
10357 				m68ki_exception_trap(EXCEPTION_CHK);
10358 		return;
10359 	}
10360 	m68ki_exception_illegal();
10361 }
10362 
10363 
m68k_op_chk2cmp2_32_pcdi(void)10364 static void m68k_op_chk2cmp2_32_pcdi(void)
10365 {
10366 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10367 	{
10368 		uint word2 = OPER_I_16();
10369 		uint compare = REG_DA[(word2 >> 12) & 15];
10370 		uint ea = EA_PCDI_32();
10371 		uint lower_bound = m68ki_read_pcrel_32(ea);
10372 		uint upper_bound = m68ki_read_pcrel_32(ea + 4);
10373 
10374 		FLAG_C = compare - lower_bound;
10375 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10376 		FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
10377 		if(COND_CS())
10378 		{
10379 			if(BIT_B(word2))
10380 				m68ki_exception_trap(EXCEPTION_CHK);
10381 			return;
10382 		}
10383 
10384 		FLAG_C = upper_bound - compare;
10385 		FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
10386 		if(COND_CS() && BIT_B(word2))
10387 				m68ki_exception_trap(EXCEPTION_CHK);
10388 		return;
10389 	}
10390 	m68ki_exception_illegal();
10391 }
10392 
10393 
m68k_op_chk2cmp2_32_pcix(void)10394 static void m68k_op_chk2cmp2_32_pcix(void)
10395 {
10396 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10397 	{
10398 		uint word2 = OPER_I_16();
10399 		uint compare = REG_DA[(word2 >> 12) & 15];
10400 		uint ea = EA_PCIX_32();
10401 		uint lower_bound = m68ki_read_pcrel_32(ea);
10402 		uint upper_bound = m68ki_read_pcrel_32(ea + 4);
10403 
10404 		FLAG_C = compare - lower_bound;
10405 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10406 		FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
10407 		if(COND_CS())
10408 		{
10409 			if(BIT_B(word2))
10410 				m68ki_exception_trap(EXCEPTION_CHK);
10411 			return;
10412 		}
10413 
10414 		FLAG_C = upper_bound - compare;
10415 		FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
10416 		if(COND_CS() && BIT_B(word2))
10417 				m68ki_exception_trap(EXCEPTION_CHK);
10418 		return;
10419 	}
10420 	m68ki_exception_illegal();
10421 }
10422 
10423 
m68k_op_chk2cmp2_32_ai(void)10424 static void m68k_op_chk2cmp2_32_ai(void)
10425 {
10426 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10427 	{
10428 		uint word2 = OPER_I_16();
10429 		uint compare = REG_DA[(word2 >> 12) & 15];
10430 		uint ea = EA_AY_AI_32();
10431 		uint lower_bound = m68ki_read_32(ea);
10432 		uint upper_bound = m68ki_read_32(ea + 4);
10433 
10434 		FLAG_C = compare - lower_bound;
10435 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10436 		FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
10437 		if(COND_CS())
10438 		{
10439 			if(BIT_B(word2))
10440 				m68ki_exception_trap(EXCEPTION_CHK);
10441 			return;
10442 		}
10443 
10444 		FLAG_C = upper_bound - compare;
10445 		FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
10446 		if(COND_CS() && BIT_B(word2))
10447 				m68ki_exception_trap(EXCEPTION_CHK);
10448 		return;
10449 	}
10450 	m68ki_exception_illegal();
10451 }
10452 
10453 
m68k_op_chk2cmp2_32_di(void)10454 static void m68k_op_chk2cmp2_32_di(void)
10455 {
10456 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10457 	{
10458 		uint word2 = OPER_I_16();
10459 		uint compare = REG_DA[(word2 >> 12) & 15];
10460 		uint ea = EA_AY_DI_32();
10461 		uint lower_bound = m68ki_read_32(ea);
10462 		uint upper_bound = m68ki_read_32(ea + 4);
10463 
10464 		FLAG_C = compare - lower_bound;
10465 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10466 		FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
10467 		if(COND_CS())
10468 		{
10469 			if(BIT_B(word2))
10470 				m68ki_exception_trap(EXCEPTION_CHK);
10471 			return;
10472 		}
10473 
10474 		FLAG_C = upper_bound - compare;
10475 		FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
10476 		if(COND_CS() && BIT_B(word2))
10477 				m68ki_exception_trap(EXCEPTION_CHK);
10478 		return;
10479 	}
10480 	m68ki_exception_illegal();
10481 }
10482 
10483 
m68k_op_chk2cmp2_32_ix(void)10484 static void m68k_op_chk2cmp2_32_ix(void)
10485 {
10486 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10487 	{
10488 		uint word2 = OPER_I_16();
10489 		uint compare = REG_DA[(word2 >> 12) & 15];
10490 		uint ea = EA_AY_IX_32();
10491 		uint lower_bound = m68ki_read_32(ea);
10492 		uint upper_bound = m68ki_read_32(ea + 4);
10493 
10494 		FLAG_C = compare - lower_bound;
10495 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10496 		FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
10497 		if(COND_CS())
10498 		{
10499 			if(BIT_B(word2))
10500 				m68ki_exception_trap(EXCEPTION_CHK);
10501 			return;
10502 		}
10503 
10504 		FLAG_C = upper_bound - compare;
10505 		FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
10506 		if(COND_CS() && BIT_B(word2))
10507 				m68ki_exception_trap(EXCEPTION_CHK);
10508 		return;
10509 	}
10510 	m68ki_exception_illegal();
10511 }
10512 
10513 
m68k_op_chk2cmp2_32_aw(void)10514 static void m68k_op_chk2cmp2_32_aw(void)
10515 {
10516 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10517 	{
10518 		uint word2 = OPER_I_16();
10519 		uint compare = REG_DA[(word2 >> 12) & 15];
10520 		uint ea = EA_AW_32();
10521 		uint lower_bound = m68ki_read_32(ea);
10522 		uint upper_bound = m68ki_read_32(ea + 4);
10523 
10524 		FLAG_C = compare - lower_bound;
10525 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10526 		FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
10527 		if(COND_CS())
10528 		{
10529 			if(BIT_B(word2))
10530 				m68ki_exception_trap(EXCEPTION_CHK);
10531 			return;
10532 		}
10533 
10534 		FLAG_C = upper_bound - compare;
10535 		FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
10536 		if(COND_CS() && BIT_B(word2))
10537 				m68ki_exception_trap(EXCEPTION_CHK);
10538 		return;
10539 	}
10540 	m68ki_exception_illegal();
10541 }
10542 
10543 
m68k_op_chk2cmp2_32_al(void)10544 static void m68k_op_chk2cmp2_32_al(void)
10545 {
10546 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
10547 	{
10548 		uint word2 = OPER_I_16();
10549 		uint compare = REG_DA[(word2 >> 12) & 15];
10550 		uint ea = EA_AL_32();
10551 		uint lower_bound = m68ki_read_32(ea);
10552 		uint upper_bound = m68ki_read_32(ea + 4);
10553 
10554 		FLAG_C = compare - lower_bound;
10555 		FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
10556 		FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
10557 		if(COND_CS())
10558 		{
10559 			if(BIT_B(word2))
10560 				m68ki_exception_trap(EXCEPTION_CHK);
10561 			return;
10562 		}
10563 
10564 		FLAG_C = upper_bound - compare;
10565 		FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
10566 		if(COND_CS() && BIT_B(word2))
10567 				m68ki_exception_trap(EXCEPTION_CHK);
10568 		return;
10569 	}
10570 	m68ki_exception_illegal();
10571 }
10572 
10573 
m68k_op_clr_8_d(void)10574 static void m68k_op_clr_8_d(void)
10575 {
10576 	DY &= 0xffffff00;
10577 
10578 	FLAG_N = NFLAG_CLEAR;
10579 	FLAG_V = VFLAG_CLEAR;
10580 	FLAG_C = CFLAG_CLEAR;
10581 	FLAG_Z = ZFLAG_SET;
10582 }
10583 
10584 
m68k_op_clr_8_ai(void)10585 static void m68k_op_clr_8_ai(void)
10586 {
10587 	m68ki_write_8(EA_AY_AI_8(), 0);
10588 
10589 	FLAG_N = NFLAG_CLEAR;
10590 	FLAG_V = VFLAG_CLEAR;
10591 	FLAG_C = CFLAG_CLEAR;
10592 	FLAG_Z = ZFLAG_SET;
10593 }
10594 
10595 
m68k_op_clr_8_pi(void)10596 static void m68k_op_clr_8_pi(void)
10597 {
10598 	m68ki_write_8(EA_AY_PI_8(), 0);
10599 
10600 	FLAG_N = NFLAG_CLEAR;
10601 	FLAG_V = VFLAG_CLEAR;
10602 	FLAG_C = CFLAG_CLEAR;
10603 	FLAG_Z = ZFLAG_SET;
10604 }
10605 
10606 
m68k_op_clr_8_pi7(void)10607 static void m68k_op_clr_8_pi7(void)
10608 {
10609 	m68ki_write_8(EA_A7_PI_8(), 0);
10610 
10611 	FLAG_N = NFLAG_CLEAR;
10612 	FLAG_V = VFLAG_CLEAR;
10613 	FLAG_C = CFLAG_CLEAR;
10614 	FLAG_Z = ZFLAG_SET;
10615 }
10616 
10617 
m68k_op_clr_8_pd(void)10618 static void m68k_op_clr_8_pd(void)
10619 {
10620 	m68ki_write_8(EA_AY_PD_8(), 0);
10621 
10622 	FLAG_N = NFLAG_CLEAR;
10623 	FLAG_V = VFLAG_CLEAR;
10624 	FLAG_C = CFLAG_CLEAR;
10625 	FLAG_Z = ZFLAG_SET;
10626 }
10627 
10628 
m68k_op_clr_8_pd7(void)10629 static void m68k_op_clr_8_pd7(void)
10630 {
10631 	m68ki_write_8(EA_A7_PD_8(), 0);
10632 
10633 	FLAG_N = NFLAG_CLEAR;
10634 	FLAG_V = VFLAG_CLEAR;
10635 	FLAG_C = CFLAG_CLEAR;
10636 	FLAG_Z = ZFLAG_SET;
10637 }
10638 
10639 
m68k_op_clr_8_di(void)10640 static void m68k_op_clr_8_di(void)
10641 {
10642 	m68ki_write_8(EA_AY_DI_8(), 0);
10643 
10644 	FLAG_N = NFLAG_CLEAR;
10645 	FLAG_V = VFLAG_CLEAR;
10646 	FLAG_C = CFLAG_CLEAR;
10647 	FLAG_Z = ZFLAG_SET;
10648 }
10649 
10650 
m68k_op_clr_8_ix(void)10651 static void m68k_op_clr_8_ix(void)
10652 {
10653 	m68ki_write_8(EA_AY_IX_8(), 0);
10654 
10655 	FLAG_N = NFLAG_CLEAR;
10656 	FLAG_V = VFLAG_CLEAR;
10657 	FLAG_C = CFLAG_CLEAR;
10658 	FLAG_Z = ZFLAG_SET;
10659 }
10660 
10661 
m68k_op_clr_8_aw(void)10662 static void m68k_op_clr_8_aw(void)
10663 {
10664 	m68ki_write_8(EA_AW_8(), 0);
10665 
10666 	FLAG_N = NFLAG_CLEAR;
10667 	FLAG_V = VFLAG_CLEAR;
10668 	FLAG_C = CFLAG_CLEAR;
10669 	FLAG_Z = ZFLAG_SET;
10670 }
10671 
10672 
m68k_op_clr_8_al(void)10673 static void m68k_op_clr_8_al(void)
10674 {
10675 	m68ki_write_8(EA_AL_8(), 0);
10676 
10677 	FLAG_N = NFLAG_CLEAR;
10678 	FLAG_V = VFLAG_CLEAR;
10679 	FLAG_C = CFLAG_CLEAR;
10680 	FLAG_Z = ZFLAG_SET;
10681 }
10682 
10683 
m68k_op_clr_16_d(void)10684 static void m68k_op_clr_16_d(void)
10685 {
10686 	DY &= 0xffff0000;
10687 
10688 	FLAG_N = NFLAG_CLEAR;
10689 	FLAG_V = VFLAG_CLEAR;
10690 	FLAG_C = CFLAG_CLEAR;
10691 	FLAG_Z = ZFLAG_SET;
10692 }
10693 
10694 
m68k_op_clr_16_ai(void)10695 static void m68k_op_clr_16_ai(void)
10696 {
10697 	m68ki_write_16(EA_AY_AI_16(), 0);
10698 
10699 	FLAG_N = NFLAG_CLEAR;
10700 	FLAG_V = VFLAG_CLEAR;
10701 	FLAG_C = CFLAG_CLEAR;
10702 	FLAG_Z = ZFLAG_SET;
10703 }
10704 
10705 
m68k_op_clr_16_pi(void)10706 static void m68k_op_clr_16_pi(void)
10707 {
10708 	m68ki_write_16(EA_AY_PI_16(), 0);
10709 
10710 	FLAG_N = NFLAG_CLEAR;
10711 	FLAG_V = VFLAG_CLEAR;
10712 	FLAG_C = CFLAG_CLEAR;
10713 	FLAG_Z = ZFLAG_SET;
10714 }
10715 
10716 
m68k_op_clr_16_pd(void)10717 static void m68k_op_clr_16_pd(void)
10718 {
10719 	m68ki_write_16(EA_AY_PD_16(), 0);
10720 
10721 	FLAG_N = NFLAG_CLEAR;
10722 	FLAG_V = VFLAG_CLEAR;
10723 	FLAG_C = CFLAG_CLEAR;
10724 	FLAG_Z = ZFLAG_SET;
10725 }
10726 
10727 
m68k_op_clr_16_di(void)10728 static void m68k_op_clr_16_di(void)
10729 {
10730 	m68ki_write_16(EA_AY_DI_16(), 0);
10731 
10732 	FLAG_N = NFLAG_CLEAR;
10733 	FLAG_V = VFLAG_CLEAR;
10734 	FLAG_C = CFLAG_CLEAR;
10735 	FLAG_Z = ZFLAG_SET;
10736 }
10737 
10738 
m68k_op_clr_16_ix(void)10739 static void m68k_op_clr_16_ix(void)
10740 {
10741 	m68ki_write_16(EA_AY_IX_16(), 0);
10742 
10743 	FLAG_N = NFLAG_CLEAR;
10744 	FLAG_V = VFLAG_CLEAR;
10745 	FLAG_C = CFLAG_CLEAR;
10746 	FLAG_Z = ZFLAG_SET;
10747 }
10748 
10749 
m68k_op_clr_16_aw(void)10750 static void m68k_op_clr_16_aw(void)
10751 {
10752 	m68ki_write_16(EA_AW_16(), 0);
10753 
10754 	FLAG_N = NFLAG_CLEAR;
10755 	FLAG_V = VFLAG_CLEAR;
10756 	FLAG_C = CFLAG_CLEAR;
10757 	FLAG_Z = ZFLAG_SET;
10758 }
10759 
10760 
m68k_op_clr_16_al(void)10761 static void m68k_op_clr_16_al(void)
10762 {
10763 	m68ki_write_16(EA_AL_16(), 0);
10764 
10765 	FLAG_N = NFLAG_CLEAR;
10766 	FLAG_V = VFLAG_CLEAR;
10767 	FLAG_C = CFLAG_CLEAR;
10768 	FLAG_Z = ZFLAG_SET;
10769 }
10770 
10771 
m68k_op_clr_32_d(void)10772 static void m68k_op_clr_32_d(void)
10773 {
10774 	DY = 0;
10775 
10776 	FLAG_N = NFLAG_CLEAR;
10777 	FLAG_V = VFLAG_CLEAR;
10778 	FLAG_C = CFLAG_CLEAR;
10779 	FLAG_Z = ZFLAG_SET;
10780 }
10781 
10782 
m68k_op_clr_32_ai(void)10783 static void m68k_op_clr_32_ai(void)
10784 {
10785 	m68ki_write_32(EA_AY_AI_32(), 0);
10786 
10787 	FLAG_N = NFLAG_CLEAR;
10788 	FLAG_V = VFLAG_CLEAR;
10789 	FLAG_C = CFLAG_CLEAR;
10790 	FLAG_Z = ZFLAG_SET;
10791 }
10792 
10793 
m68k_op_clr_32_pi(void)10794 static void m68k_op_clr_32_pi(void)
10795 {
10796 	m68ki_write_32(EA_AY_PI_32(), 0);
10797 
10798 	FLAG_N = NFLAG_CLEAR;
10799 	FLAG_V = VFLAG_CLEAR;
10800 	FLAG_C = CFLAG_CLEAR;
10801 	FLAG_Z = ZFLAG_SET;
10802 }
10803 
10804 
m68k_op_clr_32_pd(void)10805 static void m68k_op_clr_32_pd(void)
10806 {
10807 	m68ki_write_32(EA_AY_PD_32(), 0);
10808 
10809 	FLAG_N = NFLAG_CLEAR;
10810 	FLAG_V = VFLAG_CLEAR;
10811 	FLAG_C = CFLAG_CLEAR;
10812 	FLAG_Z = ZFLAG_SET;
10813 }
10814 
10815 
m68k_op_clr_32_di(void)10816 static void m68k_op_clr_32_di(void)
10817 {
10818 	m68ki_write_32(EA_AY_DI_32(), 0);
10819 
10820 	FLAG_N = NFLAG_CLEAR;
10821 	FLAG_V = VFLAG_CLEAR;
10822 	FLAG_C = CFLAG_CLEAR;
10823 	FLAG_Z = ZFLAG_SET;
10824 }
10825 
10826 
m68k_op_clr_32_ix(void)10827 static void m68k_op_clr_32_ix(void)
10828 {
10829 	m68ki_write_32(EA_AY_IX_32(), 0);
10830 
10831 	FLAG_N = NFLAG_CLEAR;
10832 	FLAG_V = VFLAG_CLEAR;
10833 	FLAG_C = CFLAG_CLEAR;
10834 	FLAG_Z = ZFLAG_SET;
10835 }
10836 
10837 
m68k_op_clr_32_aw(void)10838 static void m68k_op_clr_32_aw(void)
10839 {
10840 	m68ki_write_32(EA_AW_32(), 0);
10841 
10842 	FLAG_N = NFLAG_CLEAR;
10843 	FLAG_V = VFLAG_CLEAR;
10844 	FLAG_C = CFLAG_CLEAR;
10845 	FLAG_Z = ZFLAG_SET;
10846 }
10847 
10848 
m68k_op_clr_32_al(void)10849 static void m68k_op_clr_32_al(void)
10850 {
10851 	m68ki_write_32(EA_AL_32(), 0);
10852 
10853 	FLAG_N = NFLAG_CLEAR;
10854 	FLAG_V = VFLAG_CLEAR;
10855 	FLAG_C = CFLAG_CLEAR;
10856 	FLAG_Z = ZFLAG_SET;
10857 }
10858 
10859 
m68k_op_cmp_8_d(void)10860 static void m68k_op_cmp_8_d(void)
10861 {
10862 	uint src = MASK_OUT_ABOVE_8(DY);
10863 	uint dst = MASK_OUT_ABOVE_8(DX);
10864 	uint res = dst - src;
10865 
10866 	FLAG_N = NFLAG_8(res);
10867 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10868 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10869 	FLAG_C = CFLAG_8(res);
10870 }
10871 
10872 
m68k_op_cmp_8_ai(void)10873 static void m68k_op_cmp_8_ai(void)
10874 {
10875 	uint src = OPER_AY_AI_8();
10876 	uint dst = MASK_OUT_ABOVE_8(DX);
10877 	uint res = dst - src;
10878 
10879 	FLAG_N = NFLAG_8(res);
10880 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10881 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10882 	FLAG_C = CFLAG_8(res);
10883 }
10884 
10885 
m68k_op_cmp_8_pi(void)10886 static void m68k_op_cmp_8_pi(void)
10887 {
10888 	uint src = OPER_AY_PI_8();
10889 	uint dst = MASK_OUT_ABOVE_8(DX);
10890 	uint res = dst - src;
10891 
10892 	FLAG_N = NFLAG_8(res);
10893 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10894 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10895 	FLAG_C = CFLAG_8(res);
10896 }
10897 
10898 
m68k_op_cmp_8_pi7(void)10899 static void m68k_op_cmp_8_pi7(void)
10900 {
10901 	uint src = OPER_A7_PI_8();
10902 	uint dst = MASK_OUT_ABOVE_8(DX);
10903 	uint res = dst - src;
10904 
10905 	FLAG_N = NFLAG_8(res);
10906 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10907 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10908 	FLAG_C = CFLAG_8(res);
10909 }
10910 
10911 
m68k_op_cmp_8_pd(void)10912 static void m68k_op_cmp_8_pd(void)
10913 {
10914 	uint src = OPER_AY_PD_8();
10915 	uint dst = MASK_OUT_ABOVE_8(DX);
10916 	uint res = dst - src;
10917 
10918 	FLAG_N = NFLAG_8(res);
10919 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10920 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10921 	FLAG_C = CFLAG_8(res);
10922 }
10923 
10924 
m68k_op_cmp_8_pd7(void)10925 static void m68k_op_cmp_8_pd7(void)
10926 {
10927 	uint src = OPER_A7_PD_8();
10928 	uint dst = MASK_OUT_ABOVE_8(DX);
10929 	uint res = dst - src;
10930 
10931 	FLAG_N = NFLAG_8(res);
10932 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10933 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10934 	FLAG_C = CFLAG_8(res);
10935 }
10936 
10937 
m68k_op_cmp_8_di(void)10938 static void m68k_op_cmp_8_di(void)
10939 {
10940 	uint src = OPER_AY_DI_8();
10941 	uint dst = MASK_OUT_ABOVE_8(DX);
10942 	uint res = dst - src;
10943 
10944 	FLAG_N = NFLAG_8(res);
10945 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10946 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10947 	FLAG_C = CFLAG_8(res);
10948 }
10949 
10950 
m68k_op_cmp_8_ix(void)10951 static void m68k_op_cmp_8_ix(void)
10952 {
10953 	uint src = OPER_AY_IX_8();
10954 	uint dst = MASK_OUT_ABOVE_8(DX);
10955 	uint res = dst - src;
10956 
10957 	FLAG_N = NFLAG_8(res);
10958 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10959 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10960 	FLAG_C = CFLAG_8(res);
10961 }
10962 
10963 
m68k_op_cmp_8_aw(void)10964 static void m68k_op_cmp_8_aw(void)
10965 {
10966 	uint src = OPER_AW_8();
10967 	uint dst = MASK_OUT_ABOVE_8(DX);
10968 	uint res = dst - src;
10969 
10970 	FLAG_N = NFLAG_8(res);
10971 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10972 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10973 	FLAG_C = CFLAG_8(res);
10974 }
10975 
10976 
m68k_op_cmp_8_al(void)10977 static void m68k_op_cmp_8_al(void)
10978 {
10979 	uint src = OPER_AL_8();
10980 	uint dst = MASK_OUT_ABOVE_8(DX);
10981 	uint res = dst - src;
10982 
10983 	FLAG_N = NFLAG_8(res);
10984 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10985 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10986 	FLAG_C = CFLAG_8(res);
10987 }
10988 
10989 
m68k_op_cmp_8_pcdi(void)10990 static void m68k_op_cmp_8_pcdi(void)
10991 {
10992 	uint src = OPER_PCDI_8();
10993 	uint dst = MASK_OUT_ABOVE_8(DX);
10994 	uint res = dst - src;
10995 
10996 	FLAG_N = NFLAG_8(res);
10997 	FLAG_Z = MASK_OUT_ABOVE_8(res);
10998 	FLAG_V = VFLAG_SUB_8(src, dst, res);
10999 	FLAG_C = CFLAG_8(res);
11000 }
11001 
11002 
m68k_op_cmp_8_pcix(void)11003 static void m68k_op_cmp_8_pcix(void)
11004 {
11005 	uint src = OPER_PCIX_8();
11006 	uint dst = MASK_OUT_ABOVE_8(DX);
11007 	uint res = dst - src;
11008 
11009 	FLAG_N = NFLAG_8(res);
11010 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11011 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11012 	FLAG_C = CFLAG_8(res);
11013 }
11014 
11015 
m68k_op_cmp_8_i(void)11016 static void m68k_op_cmp_8_i(void)
11017 {
11018 	uint src = OPER_I_8();
11019 	uint dst = MASK_OUT_ABOVE_8(DX);
11020 	uint res = dst - src;
11021 
11022 	FLAG_N = NFLAG_8(res);
11023 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11024 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11025 	FLAG_C = CFLAG_8(res);
11026 }
11027 
11028 
m68k_op_cmp_16_d(void)11029 static void m68k_op_cmp_16_d(void)
11030 {
11031 	uint src = MASK_OUT_ABOVE_16(DY);
11032 	uint dst = MASK_OUT_ABOVE_16(DX);
11033 	uint res = dst - src;
11034 
11035 	FLAG_N = NFLAG_16(res);
11036 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11037 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11038 	FLAG_C = CFLAG_16(res);
11039 }
11040 
11041 
m68k_op_cmp_16_a(void)11042 static void m68k_op_cmp_16_a(void)
11043 {
11044 	uint src = MASK_OUT_ABOVE_16(AY);
11045 	uint dst = MASK_OUT_ABOVE_16(DX);
11046 	uint res = dst - src;
11047 
11048 	FLAG_N = NFLAG_16(res);
11049 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11050 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11051 	FLAG_C = CFLAG_16(res);
11052 }
11053 
11054 
m68k_op_cmp_16_ai(void)11055 static void m68k_op_cmp_16_ai(void)
11056 {
11057 	uint src = OPER_AY_AI_16();
11058 	uint dst = MASK_OUT_ABOVE_16(DX);
11059 	uint res = dst - src;
11060 
11061 	FLAG_N = NFLAG_16(res);
11062 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11063 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11064 	FLAG_C = CFLAG_16(res);
11065 }
11066 
11067 
m68k_op_cmp_16_pi(void)11068 static void m68k_op_cmp_16_pi(void)
11069 {
11070 	uint src = OPER_AY_PI_16();
11071 	uint dst = MASK_OUT_ABOVE_16(DX);
11072 	uint res = dst - src;
11073 
11074 	FLAG_N = NFLAG_16(res);
11075 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11076 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11077 	FLAG_C = CFLAG_16(res);
11078 }
11079 
11080 
m68k_op_cmp_16_pd(void)11081 static void m68k_op_cmp_16_pd(void)
11082 {
11083 	uint src = OPER_AY_PD_16();
11084 	uint dst = MASK_OUT_ABOVE_16(DX);
11085 	uint res = dst - src;
11086 
11087 	FLAG_N = NFLAG_16(res);
11088 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11089 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11090 	FLAG_C = CFLAG_16(res);
11091 }
11092 
11093 
m68k_op_cmp_16_di(void)11094 static void m68k_op_cmp_16_di(void)
11095 {
11096 	uint src = OPER_AY_DI_16();
11097 	uint dst = MASK_OUT_ABOVE_16(DX);
11098 	uint res = dst - src;
11099 
11100 	FLAG_N = NFLAG_16(res);
11101 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11102 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11103 	FLAG_C = CFLAG_16(res);
11104 }
11105 
11106 
m68k_op_cmp_16_ix(void)11107 static void m68k_op_cmp_16_ix(void)
11108 {
11109 	uint src = OPER_AY_IX_16();
11110 	uint dst = MASK_OUT_ABOVE_16(DX);
11111 	uint res = dst - src;
11112 
11113 	FLAG_N = NFLAG_16(res);
11114 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11115 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11116 	FLAG_C = CFLAG_16(res);
11117 }
11118 
11119 
m68k_op_cmp_16_aw(void)11120 static void m68k_op_cmp_16_aw(void)
11121 {
11122 	uint src = OPER_AW_16();
11123 	uint dst = MASK_OUT_ABOVE_16(DX);
11124 	uint res = dst - src;
11125 
11126 	FLAG_N = NFLAG_16(res);
11127 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11128 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11129 	FLAG_C = CFLAG_16(res);
11130 }
11131 
11132 
m68k_op_cmp_16_al(void)11133 static void m68k_op_cmp_16_al(void)
11134 {
11135 	uint src = OPER_AL_16();
11136 	uint dst = MASK_OUT_ABOVE_16(DX);
11137 	uint res = dst - src;
11138 
11139 	FLAG_N = NFLAG_16(res);
11140 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11141 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11142 	FLAG_C = CFLAG_16(res);
11143 }
11144 
11145 
m68k_op_cmp_16_pcdi(void)11146 static void m68k_op_cmp_16_pcdi(void)
11147 {
11148 	uint src = OPER_PCDI_16();
11149 	uint dst = MASK_OUT_ABOVE_16(DX);
11150 	uint res = dst - src;
11151 
11152 	FLAG_N = NFLAG_16(res);
11153 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11154 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11155 	FLAG_C = CFLAG_16(res);
11156 }
11157 
11158 
m68k_op_cmp_16_pcix(void)11159 static void m68k_op_cmp_16_pcix(void)
11160 {
11161 	uint src = OPER_PCIX_16();
11162 	uint dst = MASK_OUT_ABOVE_16(DX);
11163 	uint res = dst - src;
11164 
11165 	FLAG_N = NFLAG_16(res);
11166 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11167 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11168 	FLAG_C = CFLAG_16(res);
11169 }
11170 
11171 
m68k_op_cmp_16_i(void)11172 static void m68k_op_cmp_16_i(void)
11173 {
11174 	uint src = OPER_I_16();
11175 	uint dst = MASK_OUT_ABOVE_16(DX);
11176 	uint res = dst - src;
11177 
11178 	FLAG_N = NFLAG_16(res);
11179 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11180 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11181 	FLAG_C = CFLAG_16(res);
11182 }
11183 
11184 
m68k_op_cmp_32_d(void)11185 static void m68k_op_cmp_32_d(void)
11186 {
11187 	uint src = DY;
11188 	uint dst = DX;
11189 	uint res = dst - src;
11190 
11191 	FLAG_N = NFLAG_32(res);
11192 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11193 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11194 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11195 }
11196 
11197 
m68k_op_cmp_32_a(void)11198 static void m68k_op_cmp_32_a(void)
11199 {
11200 	uint src = AY;
11201 	uint dst = DX;
11202 	uint res = dst - src;
11203 
11204 	FLAG_N = NFLAG_32(res);
11205 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11206 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11207 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11208 }
11209 
11210 
m68k_op_cmp_32_ai(void)11211 static void m68k_op_cmp_32_ai(void)
11212 {
11213 	uint src = OPER_AY_AI_32();
11214 	uint dst = DX;
11215 	uint res = dst - src;
11216 
11217 	FLAG_N = NFLAG_32(res);
11218 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11219 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11220 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11221 }
11222 
11223 
m68k_op_cmp_32_pi(void)11224 static void m68k_op_cmp_32_pi(void)
11225 {
11226 	uint src = OPER_AY_PI_32();
11227 	uint dst = DX;
11228 	uint res = dst - src;
11229 
11230 	FLAG_N = NFLAG_32(res);
11231 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11232 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11233 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11234 }
11235 
11236 
m68k_op_cmp_32_pd(void)11237 static void m68k_op_cmp_32_pd(void)
11238 {
11239 	uint src = OPER_AY_PD_32();
11240 	uint dst = DX;
11241 	uint res = dst - src;
11242 
11243 	FLAG_N = NFLAG_32(res);
11244 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11245 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11246 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11247 }
11248 
11249 
m68k_op_cmp_32_di(void)11250 static void m68k_op_cmp_32_di(void)
11251 {
11252 	uint src = OPER_AY_DI_32();
11253 	uint dst = DX;
11254 	uint res = dst - src;
11255 
11256 	FLAG_N = NFLAG_32(res);
11257 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11258 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11259 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11260 }
11261 
11262 
m68k_op_cmp_32_ix(void)11263 static void m68k_op_cmp_32_ix(void)
11264 {
11265 	uint src = OPER_AY_IX_32();
11266 	uint dst = DX;
11267 	uint res = dst - src;
11268 
11269 	FLAG_N = NFLAG_32(res);
11270 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11271 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11272 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11273 }
11274 
11275 
m68k_op_cmp_32_aw(void)11276 static void m68k_op_cmp_32_aw(void)
11277 {
11278 	uint src = OPER_AW_32();
11279 	uint dst = DX;
11280 	uint res = dst - src;
11281 
11282 	FLAG_N = NFLAG_32(res);
11283 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11284 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11285 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11286 }
11287 
11288 
m68k_op_cmp_32_al(void)11289 static void m68k_op_cmp_32_al(void)
11290 {
11291 	uint src = OPER_AL_32();
11292 	uint dst = DX;
11293 	uint res = dst - src;
11294 
11295 	FLAG_N = NFLAG_32(res);
11296 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11297 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11298 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11299 }
11300 
11301 
m68k_op_cmp_32_pcdi(void)11302 static void m68k_op_cmp_32_pcdi(void)
11303 {
11304 	uint src = OPER_PCDI_32();
11305 	uint dst = DX;
11306 	uint res = dst - src;
11307 
11308 	FLAG_N = NFLAG_32(res);
11309 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11310 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11311 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11312 }
11313 
11314 
m68k_op_cmp_32_pcix(void)11315 static void m68k_op_cmp_32_pcix(void)
11316 {
11317 	uint src = OPER_PCIX_32();
11318 	uint dst = DX;
11319 	uint res = dst - src;
11320 
11321 	FLAG_N = NFLAG_32(res);
11322 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11323 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11324 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11325 }
11326 
11327 
m68k_op_cmp_32_i(void)11328 static void m68k_op_cmp_32_i(void)
11329 {
11330 	uint src = OPER_I_32();
11331 	uint dst = DX;
11332 	uint res = dst - src;
11333 
11334 	FLAG_N = NFLAG_32(res);
11335 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11336 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11337 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11338 }
11339 
11340 
m68k_op_cmpa_16_d(void)11341 static void m68k_op_cmpa_16_d(void)
11342 {
11343 	uint src = MAKE_INT_16(DY);
11344 	uint dst = AX;
11345 	uint res = dst - src;
11346 
11347 	FLAG_N = NFLAG_32(res);
11348 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11349 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11350 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11351 }
11352 
11353 
m68k_op_cmpa_16_a(void)11354 static void m68k_op_cmpa_16_a(void)
11355 {
11356 	uint src = MAKE_INT_16(AY);
11357 	uint dst = AX;
11358 	uint res = dst - src;
11359 
11360 	FLAG_N = NFLAG_32(res);
11361 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11362 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11363 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11364 }
11365 
11366 
m68k_op_cmpa_16_ai(void)11367 static void m68k_op_cmpa_16_ai(void)
11368 {
11369 	uint src = MAKE_INT_16(OPER_AY_AI_16());
11370 	uint dst = AX;
11371 	uint res = dst - src;
11372 
11373 	FLAG_N = NFLAG_32(res);
11374 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11375 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11376 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11377 }
11378 
11379 
m68k_op_cmpa_16_pi(void)11380 static void m68k_op_cmpa_16_pi(void)
11381 {
11382 	uint src = MAKE_INT_16(OPER_AY_PI_16());
11383 	uint dst = AX;
11384 	uint res = dst - src;
11385 
11386 	FLAG_N = NFLAG_32(res);
11387 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11388 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11389 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11390 }
11391 
11392 
m68k_op_cmpa_16_pd(void)11393 static void m68k_op_cmpa_16_pd(void)
11394 {
11395 	uint src = MAKE_INT_16(OPER_AY_PD_16());
11396 	uint dst = AX;
11397 	uint res = dst - src;
11398 
11399 	FLAG_N = NFLAG_32(res);
11400 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11401 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11402 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11403 }
11404 
11405 
m68k_op_cmpa_16_di(void)11406 static void m68k_op_cmpa_16_di(void)
11407 {
11408 	uint src = MAKE_INT_16(OPER_AY_DI_16());
11409 	uint dst = AX;
11410 	uint res = dst - src;
11411 
11412 	FLAG_N = NFLAG_32(res);
11413 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11414 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11415 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11416 }
11417 
11418 
m68k_op_cmpa_16_ix(void)11419 static void m68k_op_cmpa_16_ix(void)
11420 {
11421 	uint src = MAKE_INT_16(OPER_AY_IX_16());
11422 	uint dst = AX;
11423 	uint res = dst - src;
11424 
11425 	FLAG_N = NFLAG_32(res);
11426 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11427 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11428 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11429 }
11430 
11431 
m68k_op_cmpa_16_aw(void)11432 static void m68k_op_cmpa_16_aw(void)
11433 {
11434 	uint src = MAKE_INT_16(OPER_AW_16());
11435 	uint dst = AX;
11436 	uint res = dst - src;
11437 
11438 	FLAG_N = NFLAG_32(res);
11439 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11440 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11441 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11442 }
11443 
11444 
m68k_op_cmpa_16_al(void)11445 static void m68k_op_cmpa_16_al(void)
11446 {
11447 	uint src = MAKE_INT_16(OPER_AL_16());
11448 	uint dst = AX;
11449 	uint res = dst - src;
11450 
11451 	FLAG_N = NFLAG_32(res);
11452 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11453 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11454 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11455 }
11456 
11457 
m68k_op_cmpa_16_pcdi(void)11458 static void m68k_op_cmpa_16_pcdi(void)
11459 {
11460 	uint src = MAKE_INT_16(OPER_PCDI_16());
11461 	uint dst = AX;
11462 	uint res = dst - src;
11463 
11464 	FLAG_N = NFLAG_32(res);
11465 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11466 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11467 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11468 }
11469 
11470 
m68k_op_cmpa_16_pcix(void)11471 static void m68k_op_cmpa_16_pcix(void)
11472 {
11473 	uint src = MAKE_INT_16(OPER_PCIX_16());
11474 	uint dst = AX;
11475 	uint res = dst - src;
11476 
11477 	FLAG_N = NFLAG_32(res);
11478 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11479 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11480 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11481 }
11482 
11483 
m68k_op_cmpa_16_i(void)11484 static void m68k_op_cmpa_16_i(void)
11485 {
11486 	uint src = MAKE_INT_16(OPER_I_16());
11487 	uint dst = AX;
11488 	uint res = dst - src;
11489 
11490 	FLAG_N = NFLAG_32(res);
11491 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11492 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11493 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11494 }
11495 
11496 
m68k_op_cmpa_32_d(void)11497 static void m68k_op_cmpa_32_d(void)
11498 {
11499 	uint src = DY;
11500 	uint dst = AX;
11501 	uint res = dst - src;
11502 
11503 	FLAG_N = NFLAG_32(res);
11504 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11505 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11506 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11507 }
11508 
11509 
m68k_op_cmpa_32_a(void)11510 static void m68k_op_cmpa_32_a(void)
11511 {
11512 	uint src = AY;
11513 	uint dst = AX;
11514 	uint res = dst - src;
11515 
11516 	FLAG_N = NFLAG_32(res);
11517 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11518 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11519 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11520 }
11521 
11522 
m68k_op_cmpa_32_ai(void)11523 static void m68k_op_cmpa_32_ai(void)
11524 {
11525 	uint src = OPER_AY_AI_32();
11526 	uint dst = AX;
11527 	uint res = dst - src;
11528 
11529 	FLAG_N = NFLAG_32(res);
11530 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11531 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11532 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11533 }
11534 
11535 
m68k_op_cmpa_32_pi(void)11536 static void m68k_op_cmpa_32_pi(void)
11537 {
11538 	uint src = OPER_AY_PI_32();
11539 	uint dst = AX;
11540 	uint res = dst - src;
11541 
11542 	FLAG_N = NFLAG_32(res);
11543 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11544 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11545 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11546 }
11547 
11548 
m68k_op_cmpa_32_pd(void)11549 static void m68k_op_cmpa_32_pd(void)
11550 {
11551 	uint src = OPER_AY_PD_32();
11552 	uint dst = AX;
11553 	uint res = dst - src;
11554 
11555 	FLAG_N = NFLAG_32(res);
11556 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11557 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11558 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11559 }
11560 
11561 
m68k_op_cmpa_32_di(void)11562 static void m68k_op_cmpa_32_di(void)
11563 {
11564 	uint src = OPER_AY_DI_32();
11565 	uint dst = AX;
11566 	uint res = dst - src;
11567 
11568 	FLAG_N = NFLAG_32(res);
11569 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11570 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11571 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11572 }
11573 
11574 
m68k_op_cmpa_32_ix(void)11575 static void m68k_op_cmpa_32_ix(void)
11576 {
11577 	uint src = OPER_AY_IX_32();
11578 	uint dst = AX;
11579 	uint res = dst - src;
11580 
11581 	FLAG_N = NFLAG_32(res);
11582 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11583 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11584 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11585 }
11586 
11587 
m68k_op_cmpa_32_aw(void)11588 static void m68k_op_cmpa_32_aw(void)
11589 {
11590 	uint src = OPER_AW_32();
11591 	uint dst = AX;
11592 	uint res = dst - src;
11593 
11594 	FLAG_N = NFLAG_32(res);
11595 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11596 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11597 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11598 }
11599 
11600 
m68k_op_cmpa_32_al(void)11601 static void m68k_op_cmpa_32_al(void)
11602 {
11603 	uint src = OPER_AL_32();
11604 	uint dst = AX;
11605 	uint res = dst - src;
11606 
11607 	FLAG_N = NFLAG_32(res);
11608 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11609 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11610 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11611 }
11612 
11613 
m68k_op_cmpa_32_pcdi(void)11614 static void m68k_op_cmpa_32_pcdi(void)
11615 {
11616 	uint src = OPER_PCDI_32();
11617 	uint dst = AX;
11618 	uint res = dst - src;
11619 
11620 	FLAG_N = NFLAG_32(res);
11621 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11622 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11623 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11624 }
11625 
11626 
m68k_op_cmpa_32_pcix(void)11627 static void m68k_op_cmpa_32_pcix(void)
11628 {
11629 	uint src = OPER_PCIX_32();
11630 	uint dst = AX;
11631 	uint res = dst - src;
11632 
11633 	FLAG_N = NFLAG_32(res);
11634 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11635 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11636 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11637 }
11638 
11639 
m68k_op_cmpa_32_i(void)11640 static void m68k_op_cmpa_32_i(void)
11641 {
11642 	uint src = OPER_I_32();
11643 	uint dst = AX;
11644 	uint res = dst - src;
11645 
11646 	FLAG_N = NFLAG_32(res);
11647 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11648 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11649 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11650 }
11651 
11652 
m68k_op_cmpi_8_d(void)11653 static void m68k_op_cmpi_8_d(void)
11654 {
11655 	uint src = OPER_I_8();
11656 	uint dst = MASK_OUT_ABOVE_8(DY);
11657 	uint res = dst - src;
11658 
11659 	FLAG_N = NFLAG_8(res);
11660 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11661 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11662 	FLAG_C = CFLAG_8(res);
11663 }
11664 
11665 
m68k_op_cmpi_8_ai(void)11666 static void m68k_op_cmpi_8_ai(void)
11667 {
11668 	uint src = OPER_I_8();
11669 	uint dst = OPER_AY_AI_8();
11670 	uint res = dst - src;
11671 
11672 	FLAG_N = NFLAG_8(res);
11673 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11674 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11675 	FLAG_C = CFLAG_8(res);
11676 }
11677 
11678 
m68k_op_cmpi_8_pi(void)11679 static void m68k_op_cmpi_8_pi(void)
11680 {
11681 	uint src = OPER_I_8();
11682 	uint dst = OPER_AY_PI_8();
11683 	uint res = dst - src;
11684 
11685 	FLAG_N = NFLAG_8(res);
11686 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11687 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11688 	FLAG_C = CFLAG_8(res);
11689 }
11690 
11691 
m68k_op_cmpi_8_pi7(void)11692 static void m68k_op_cmpi_8_pi7(void)
11693 {
11694 	uint src = OPER_I_8();
11695 	uint dst = OPER_A7_PI_8();
11696 	uint res = dst - src;
11697 
11698 	FLAG_N = NFLAG_8(res);
11699 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11700 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11701 	FLAG_C = CFLAG_8(res);
11702 }
11703 
11704 
m68k_op_cmpi_8_pd(void)11705 static void m68k_op_cmpi_8_pd(void)
11706 {
11707 	uint src = OPER_I_8();
11708 	uint dst = OPER_AY_PD_8();
11709 	uint res = dst - src;
11710 
11711 	FLAG_N = NFLAG_8(res);
11712 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11713 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11714 	FLAG_C = CFLAG_8(res);
11715 }
11716 
11717 
m68k_op_cmpi_8_pd7(void)11718 static void m68k_op_cmpi_8_pd7(void)
11719 {
11720 	uint src = OPER_I_8();
11721 	uint dst = OPER_A7_PD_8();
11722 	uint res = dst - src;
11723 
11724 	FLAG_N = NFLAG_8(res);
11725 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11726 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11727 	FLAG_C = CFLAG_8(res);
11728 }
11729 
11730 
m68k_op_cmpi_8_di(void)11731 static void m68k_op_cmpi_8_di(void)
11732 {
11733 	uint src = OPER_I_8();
11734 	uint dst = OPER_AY_DI_8();
11735 	uint res = dst - src;
11736 
11737 	FLAG_N = NFLAG_8(res);
11738 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11739 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11740 	FLAG_C = CFLAG_8(res);
11741 }
11742 
11743 
m68k_op_cmpi_8_ix(void)11744 static void m68k_op_cmpi_8_ix(void)
11745 {
11746 	uint src = OPER_I_8();
11747 	uint dst = OPER_AY_IX_8();
11748 	uint res = dst - src;
11749 
11750 	FLAG_N = NFLAG_8(res);
11751 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11752 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11753 	FLAG_C = CFLAG_8(res);
11754 }
11755 
11756 
m68k_op_cmpi_8_aw(void)11757 static void m68k_op_cmpi_8_aw(void)
11758 {
11759 	uint src = OPER_I_8();
11760 	uint dst = OPER_AW_8();
11761 	uint res = dst - src;
11762 
11763 	FLAG_N = NFLAG_8(res);
11764 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11765 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11766 	FLAG_C = CFLAG_8(res);
11767 }
11768 
11769 
m68k_op_cmpi_8_al(void)11770 static void m68k_op_cmpi_8_al(void)
11771 {
11772 	uint src = OPER_I_8();
11773 	uint dst = OPER_AL_8();
11774 	uint res = dst - src;
11775 
11776 	FLAG_N = NFLAG_8(res);
11777 	FLAG_Z = MASK_OUT_ABOVE_8(res);
11778 	FLAG_V = VFLAG_SUB_8(src, dst, res);
11779 	FLAG_C = CFLAG_8(res);
11780 }
11781 
11782 
m68k_op_cmpi_8_pcdi(void)11783 static void m68k_op_cmpi_8_pcdi(void)
11784 {
11785 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
11786 	{
11787 		uint src = OPER_I_8();
11788 		uint dst = OPER_PCDI_8();
11789 		uint res = dst - src;
11790 
11791 		FLAG_N = NFLAG_8(res);
11792 		FLAG_Z = MASK_OUT_ABOVE_8(res);
11793 		FLAG_V = VFLAG_SUB_8(src, dst, res);
11794 		FLAG_C = CFLAG_8(res);
11795 		return;
11796 	}
11797 	m68ki_exception_illegal();
11798 }
11799 
11800 
m68k_op_cmpi_8_pcix(void)11801 static void m68k_op_cmpi_8_pcix(void)
11802 {
11803 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
11804 	{
11805 		uint src = OPER_I_8();
11806 		uint dst = OPER_PCIX_8();
11807 		uint res = dst - src;
11808 
11809 		FLAG_N = NFLAG_8(res);
11810 		FLAG_Z = MASK_OUT_ABOVE_8(res);
11811 		FLAG_V = VFLAG_SUB_8(src, dst, res);
11812 		FLAG_C = CFLAG_8(res);
11813 		return;
11814 	}
11815 	m68ki_exception_illegal();
11816 }
11817 
11818 
m68k_op_cmpi_16_d(void)11819 static void m68k_op_cmpi_16_d(void)
11820 {
11821 	uint src = OPER_I_16();
11822 	uint dst = MASK_OUT_ABOVE_16(DY);
11823 	uint res = dst - src;
11824 
11825 	FLAG_N = NFLAG_16(res);
11826 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11827 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11828 	FLAG_C = CFLAG_16(res);
11829 }
11830 
11831 
m68k_op_cmpi_16_ai(void)11832 static void m68k_op_cmpi_16_ai(void)
11833 {
11834 	uint src = OPER_I_16();
11835 	uint dst = OPER_AY_AI_16();
11836 	uint res = dst - src;
11837 
11838 	FLAG_N = NFLAG_16(res);
11839 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11840 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11841 	FLAG_C = CFLAG_16(res);
11842 }
11843 
11844 
m68k_op_cmpi_16_pi(void)11845 static void m68k_op_cmpi_16_pi(void)
11846 {
11847 	uint src = OPER_I_16();
11848 	uint dst = OPER_AY_PI_16();
11849 	uint res = dst - src;
11850 
11851 	FLAG_N = NFLAG_16(res);
11852 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11853 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11854 	FLAG_C = CFLAG_16(res);
11855 }
11856 
11857 
m68k_op_cmpi_16_pd(void)11858 static void m68k_op_cmpi_16_pd(void)
11859 {
11860 	uint src = OPER_I_16();
11861 	uint dst = OPER_AY_PD_16();
11862 	uint res = dst - src;
11863 
11864 	FLAG_N = NFLAG_16(res);
11865 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11866 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11867 	FLAG_C = CFLAG_16(res);
11868 }
11869 
11870 
m68k_op_cmpi_16_di(void)11871 static void m68k_op_cmpi_16_di(void)
11872 {
11873 	uint src = OPER_I_16();
11874 	uint dst = OPER_AY_DI_16();
11875 	uint res = dst - src;
11876 
11877 	FLAG_N = NFLAG_16(res);
11878 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11879 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11880 	FLAG_C = CFLAG_16(res);
11881 }
11882 
11883 
m68k_op_cmpi_16_ix(void)11884 static void m68k_op_cmpi_16_ix(void)
11885 {
11886 	uint src = OPER_I_16();
11887 	uint dst = OPER_AY_IX_16();
11888 	uint res = dst - src;
11889 
11890 	FLAG_N = NFLAG_16(res);
11891 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11892 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11893 	FLAG_C = CFLAG_16(res);
11894 }
11895 
11896 
m68k_op_cmpi_16_aw(void)11897 static void m68k_op_cmpi_16_aw(void)
11898 {
11899 	uint src = OPER_I_16();
11900 	uint dst = OPER_AW_16();
11901 	uint res = dst - src;
11902 
11903 	FLAG_N = NFLAG_16(res);
11904 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11905 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11906 	FLAG_C = CFLAG_16(res);
11907 }
11908 
11909 
m68k_op_cmpi_16_al(void)11910 static void m68k_op_cmpi_16_al(void)
11911 {
11912 	uint src = OPER_I_16();
11913 	uint dst = OPER_AL_16();
11914 	uint res = dst - src;
11915 
11916 	FLAG_N = NFLAG_16(res);
11917 	FLAG_Z = MASK_OUT_ABOVE_16(res);
11918 	FLAG_V = VFLAG_SUB_16(src, dst, res);
11919 	FLAG_C = CFLAG_16(res);
11920 }
11921 
11922 
m68k_op_cmpi_16_pcdi(void)11923 static void m68k_op_cmpi_16_pcdi(void)
11924 {
11925 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
11926 	{
11927 		uint src = OPER_I_16();
11928 		uint dst = OPER_PCDI_16();
11929 		uint res = dst - src;
11930 
11931 		FLAG_N = NFLAG_16(res);
11932 		FLAG_Z = MASK_OUT_ABOVE_16(res);
11933 		FLAG_V = VFLAG_SUB_16(src, dst, res);
11934 		FLAG_C = CFLAG_16(res);
11935 		return;
11936 	}
11937 	m68ki_exception_illegal();
11938 }
11939 
11940 
m68k_op_cmpi_16_pcix(void)11941 static void m68k_op_cmpi_16_pcix(void)
11942 {
11943 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
11944 	{
11945 		uint src = OPER_I_16();
11946 		uint dst = OPER_PCIX_16();
11947 		uint res = dst - src;
11948 
11949 		FLAG_N = NFLAG_16(res);
11950 		FLAG_Z = MASK_OUT_ABOVE_16(res);
11951 		FLAG_V = VFLAG_SUB_16(src, dst, res);
11952 		FLAG_C = CFLAG_16(res);
11953 		return;
11954 	}
11955 	m68ki_exception_illegal();
11956 }
11957 
11958 
m68k_op_cmpi_32_d(void)11959 static void m68k_op_cmpi_32_d(void)
11960 {
11961 	uint src = OPER_I_32();
11962 	uint dst = DY;
11963 	uint res = dst - src;
11964 
11965 	m68ki_cmpild_callback(src, REG_IR & 7);		   /* auto-disable (see m68kcpu.h) */
11966 
11967 	FLAG_N = NFLAG_32(res);
11968 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11969 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11970 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11971 }
11972 
11973 
m68k_op_cmpi_32_ai(void)11974 static void m68k_op_cmpi_32_ai(void)
11975 {
11976 	uint src = OPER_I_32();
11977 	uint dst = OPER_AY_AI_32();
11978 	uint res = dst - src;
11979 
11980 	FLAG_N = NFLAG_32(res);
11981 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11982 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11983 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11984 }
11985 
11986 
m68k_op_cmpi_32_pi(void)11987 static void m68k_op_cmpi_32_pi(void)
11988 {
11989 	uint src = OPER_I_32();
11990 	uint dst = OPER_AY_PI_32();
11991 	uint res = dst - src;
11992 
11993 	FLAG_N = NFLAG_32(res);
11994 	FLAG_Z = MASK_OUT_ABOVE_32(res);
11995 	FLAG_V = VFLAG_SUB_32(src, dst, res);
11996 	FLAG_C = CFLAG_SUB_32(src, dst, res);
11997 }
11998 
11999 
m68k_op_cmpi_32_pd(void)12000 static void m68k_op_cmpi_32_pd(void)
12001 {
12002 	uint src = OPER_I_32();
12003 	uint dst = OPER_AY_PD_32();
12004 	uint res = dst - src;
12005 
12006 	FLAG_N = NFLAG_32(res);
12007 	FLAG_Z = MASK_OUT_ABOVE_32(res);
12008 	FLAG_V = VFLAG_SUB_32(src, dst, res);
12009 	FLAG_C = CFLAG_SUB_32(src, dst, res);
12010 }
12011 
12012 
m68k_op_cmpi_32_di(void)12013 static void m68k_op_cmpi_32_di(void)
12014 {
12015 	uint src = OPER_I_32();
12016 	uint dst = OPER_AY_DI_32();
12017 	uint res = dst - src;
12018 
12019 	FLAG_N = NFLAG_32(res);
12020 	FLAG_Z = MASK_OUT_ABOVE_32(res);
12021 	FLAG_V = VFLAG_SUB_32(src, dst, res);
12022 	FLAG_C = CFLAG_SUB_32(src, dst, res);
12023 }
12024 
12025 
m68k_op_cmpi_32_ix(void)12026 static void m68k_op_cmpi_32_ix(void)
12027 {
12028 	uint src = OPER_I_32();
12029 	uint dst = OPER_AY_IX_32();
12030 	uint res = dst - src;
12031 
12032 	FLAG_N = NFLAG_32(res);
12033 	FLAG_Z = MASK_OUT_ABOVE_32(res);
12034 	FLAG_V = VFLAG_SUB_32(src, dst, res);
12035 	FLAG_C = CFLAG_SUB_32(src, dst, res);
12036 }
12037 
12038 
m68k_op_cmpi_32_aw(void)12039 static void m68k_op_cmpi_32_aw(void)
12040 {
12041 	uint src = OPER_I_32();
12042 	uint dst = OPER_AW_32();
12043 	uint res = dst - src;
12044 
12045 	FLAG_N = NFLAG_32(res);
12046 	FLAG_Z = MASK_OUT_ABOVE_32(res);
12047 	FLAG_V = VFLAG_SUB_32(src, dst, res);
12048 	FLAG_C = CFLAG_SUB_32(src, dst, res);
12049 }
12050 
12051 
m68k_op_cmpi_32_al(void)12052 static void m68k_op_cmpi_32_al(void)
12053 {
12054 	uint src = OPER_I_32();
12055 	uint dst = OPER_AL_32();
12056 	uint res = dst - src;
12057 
12058 	FLAG_N = NFLAG_32(res);
12059 	FLAG_Z = MASK_OUT_ABOVE_32(res);
12060 	FLAG_V = VFLAG_SUB_32(src, dst, res);
12061 	FLAG_C = CFLAG_SUB_32(src, dst, res);
12062 }
12063 
12064 
m68k_op_cmpi_32_pcdi(void)12065 static void m68k_op_cmpi_32_pcdi(void)
12066 {
12067 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
12068 	{
12069 		uint src = OPER_I_32();
12070 		uint dst = OPER_PCDI_32();
12071 		uint res = dst - src;
12072 
12073 		FLAG_N = NFLAG_32(res);
12074 		FLAG_Z = MASK_OUT_ABOVE_32(res);
12075 		FLAG_V = VFLAG_SUB_32(src, dst, res);
12076 		FLAG_C = CFLAG_SUB_32(src, dst, res);
12077 		return;
12078 	}
12079 	m68ki_exception_illegal();
12080 }
12081 
12082 
m68k_op_cmpi_32_pcix(void)12083 static void m68k_op_cmpi_32_pcix(void)
12084 {
12085 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
12086 	{
12087 		uint src = OPER_I_32();
12088 		uint dst = OPER_PCIX_32();
12089 		uint res = dst - src;
12090 
12091 		FLAG_N = NFLAG_32(res);
12092 		FLAG_Z = MASK_OUT_ABOVE_32(res);
12093 		FLAG_V = VFLAG_SUB_32(src, dst, res);
12094 		FLAG_C = CFLAG_SUB_32(src, dst, res);
12095 		return;
12096 	}
12097 	m68ki_exception_illegal();
12098 }
12099 
12100 
m68k_op_cmpm_8_ax7(void)12101 static void m68k_op_cmpm_8_ax7(void)
12102 {
12103 	uint src = OPER_AY_PI_8();
12104 	uint dst = OPER_A7_PI_8();
12105 	uint res = dst - src;
12106 
12107 	FLAG_N = NFLAG_8(res);
12108 	FLAG_Z = MASK_OUT_ABOVE_8(res);
12109 	FLAG_V = VFLAG_SUB_8(src, dst, res);
12110 	FLAG_C = CFLAG_8(res);
12111 }
12112 
12113 
m68k_op_cmpm_8_ay7(void)12114 static void m68k_op_cmpm_8_ay7(void)
12115 {
12116 	uint src = OPER_A7_PI_8();
12117 	uint dst = OPER_AX_PI_8();
12118 	uint res = dst - src;
12119 
12120 	FLAG_N = NFLAG_8(res);
12121 	FLAG_Z = MASK_OUT_ABOVE_8(res);
12122 	FLAG_V = VFLAG_SUB_8(src, dst, res);
12123 	FLAG_C = CFLAG_8(res);
12124 }
12125 
12126 
m68k_op_cmpm_8_axy7(void)12127 static void m68k_op_cmpm_8_axy7(void)
12128 {
12129 	uint src = OPER_A7_PI_8();
12130 	uint dst = OPER_A7_PI_8();
12131 	uint res = dst - src;
12132 
12133 	FLAG_N = NFLAG_8(res);
12134 	FLAG_Z = MASK_OUT_ABOVE_8(res);
12135 	FLAG_V = VFLAG_SUB_8(src, dst, res);
12136 	FLAG_C = CFLAG_8(res);
12137 }
12138 
12139 
m68k_op_cmpm_8(void)12140 static void m68k_op_cmpm_8(void)
12141 {
12142 	uint src = OPER_AY_PI_8();
12143 	uint dst = OPER_AX_PI_8();
12144 	uint res = dst - src;
12145 
12146 	FLAG_N = NFLAG_8(res);
12147 	FLAG_Z = MASK_OUT_ABOVE_8(res);
12148 	FLAG_V = VFLAG_SUB_8(src, dst, res);
12149 	FLAG_C = CFLAG_8(res);
12150 }
12151 
12152 
m68k_op_cmpm_16(void)12153 static void m68k_op_cmpm_16(void)
12154 {
12155 	uint src = OPER_AY_PI_16();
12156 	uint dst = OPER_AX_PI_16();
12157 	uint res = dst - src;
12158 
12159 	FLAG_N = NFLAG_16(res);
12160 	FLAG_Z = MASK_OUT_ABOVE_16(res);
12161 	FLAG_V = VFLAG_SUB_16(src, dst, res);
12162 	FLAG_C = CFLAG_16(res);
12163 }
12164 
12165 
m68k_op_cmpm_32(void)12166 static void m68k_op_cmpm_32(void)
12167 {
12168 	uint src = OPER_AY_PI_32();
12169 	uint dst = OPER_AX_PI_32();
12170 	uint res = dst - src;
12171 
12172 	FLAG_N = NFLAG_32(res);
12173 	FLAG_Z = MASK_OUT_ABOVE_32(res);
12174 	FLAG_V = VFLAG_SUB_32(src, dst, res);
12175 	FLAG_C = CFLAG_SUB_32(src, dst, res);
12176 }
12177 
12178 
m68k_op_cpbcc_32(void)12179 static void m68k_op_cpbcc_32(void)
12180 {
12181 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
12182 	{
12183 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
12184 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
12185 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
12186 		return;
12187 	}
12188 	m68ki_exception_1111();
12189 }
12190 
12191 
m68k_op_cpdbcc_32(void)12192 static void m68k_op_cpdbcc_32(void)
12193 {
12194 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
12195 	{
12196 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
12197 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
12198 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
12199 		return;
12200 	}
12201 	m68ki_exception_1111();
12202 }
12203 
12204 
m68k_op_cpgen_32(void)12205 static void m68k_op_cpgen_32(void)
12206 {
12207 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
12208 	{
12209 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
12210 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
12211 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
12212 		return;
12213 	}
12214 	m68ki_exception_1111();
12215 }
12216 
12217 
m68k_op_cpscc_32(void)12218 static void m68k_op_cpscc_32(void)
12219 {
12220 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
12221 	{
12222 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
12223 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
12224 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
12225 		return;
12226 	}
12227 	m68ki_exception_1111();
12228 }
12229 
12230 
m68k_op_cptrapcc_32(void)12231 static void m68k_op_cptrapcc_32(void)
12232 {
12233 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
12234 	{
12235 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
12236 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
12237 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
12238 		return;
12239 	}
12240 	m68ki_exception_1111();
12241 }
12242 
12243 
m68k_op_dbt_16(void)12244 static void m68k_op_dbt_16(void)
12245 {
12246 	REG_PC += 2;
12247 }
12248 
12249 
m68k_op_dbf_16(void)12250 static void m68k_op_dbf_16(void)
12251 {
12252 	uint* r_dst = &DY;
12253 	uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12254 
12255 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12256 	if(res != 0xffff)
12257 	{
12258 		uint offset = OPER_I_16();
12259 		REG_PC -= 2;
12260 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12261 		m68ki_branch_16(offset);
12262 		USE_CYCLES(CYC_DBCC_F_NOEXP);
12263 		return;
12264 	}
12265 	REG_PC += 2;
12266 	USE_CYCLES(CYC_DBCC_F_EXP);
12267 }
12268 
12269 
m68k_op_dbhi_16(void)12270 static void m68k_op_dbhi_16(void)
12271 {
12272 	if(COND_NOT_HI())
12273 	{
12274 		uint* r_dst = &DY;
12275 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12276 
12277 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12278 		if(res != 0xffff)
12279 		{
12280 			uint offset = OPER_I_16();
12281 			REG_PC -= 2;
12282 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12283 			m68ki_branch_16(offset);
12284 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12285 			return;
12286 		}
12287 		REG_PC += 2;
12288 		USE_CYCLES(CYC_DBCC_F_EXP);
12289 		return;
12290 	}
12291 	REG_PC += 2;
12292 }
12293 
12294 
m68k_op_dbls_16(void)12295 static void m68k_op_dbls_16(void)
12296 {
12297 	if(COND_NOT_LS())
12298 	{
12299 		uint* r_dst = &DY;
12300 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12301 
12302 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12303 		if(res != 0xffff)
12304 		{
12305 			uint offset = OPER_I_16();
12306 			REG_PC -= 2;
12307 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12308 			m68ki_branch_16(offset);
12309 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12310 			return;
12311 		}
12312 		REG_PC += 2;
12313 		USE_CYCLES(CYC_DBCC_F_EXP);
12314 		return;
12315 	}
12316 	REG_PC += 2;
12317 }
12318 
12319 
m68k_op_dbcc_16(void)12320 static void m68k_op_dbcc_16(void)
12321 {
12322 	if(COND_NOT_CC())
12323 	{
12324 		uint* r_dst = &DY;
12325 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12326 
12327 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12328 		if(res != 0xffff)
12329 		{
12330 			uint offset = OPER_I_16();
12331 			REG_PC -= 2;
12332 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12333 			m68ki_branch_16(offset);
12334 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12335 			return;
12336 		}
12337 		REG_PC += 2;
12338 		USE_CYCLES(CYC_DBCC_F_EXP);
12339 		return;
12340 	}
12341 	REG_PC += 2;
12342 }
12343 
12344 
m68k_op_dbcs_16(void)12345 static void m68k_op_dbcs_16(void)
12346 {
12347 	if(COND_NOT_CS())
12348 	{
12349 		uint* r_dst = &DY;
12350 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12351 
12352 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12353 		if(res != 0xffff)
12354 		{
12355 			uint offset = OPER_I_16();
12356 			REG_PC -= 2;
12357 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12358 			m68ki_branch_16(offset);
12359 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12360 			return;
12361 		}
12362 		REG_PC += 2;
12363 		USE_CYCLES(CYC_DBCC_F_EXP);
12364 		return;
12365 	}
12366 	REG_PC += 2;
12367 }
12368 
12369 
m68k_op_dbne_16(void)12370 static void m68k_op_dbne_16(void)
12371 {
12372 	if(COND_NOT_NE())
12373 	{
12374 		uint* r_dst = &DY;
12375 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12376 
12377 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12378 		if(res != 0xffff)
12379 		{
12380 			uint offset = OPER_I_16();
12381 			REG_PC -= 2;
12382 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12383 			m68ki_branch_16(offset);
12384 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12385 			return;
12386 		}
12387 		REG_PC += 2;
12388 		USE_CYCLES(CYC_DBCC_F_EXP);
12389 		return;
12390 	}
12391 	REG_PC += 2;
12392 }
12393 
12394 
m68k_op_dbeq_16(void)12395 static void m68k_op_dbeq_16(void)
12396 {
12397 	if(COND_NOT_EQ())
12398 	{
12399 		uint* r_dst = &DY;
12400 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12401 
12402 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12403 		if(res != 0xffff)
12404 		{
12405 			uint offset = OPER_I_16();
12406 			REG_PC -= 2;
12407 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12408 			m68ki_branch_16(offset);
12409 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12410 			return;
12411 		}
12412 		REG_PC += 2;
12413 		USE_CYCLES(CYC_DBCC_F_EXP);
12414 		return;
12415 	}
12416 	REG_PC += 2;
12417 }
12418 
12419 
m68k_op_dbvc_16(void)12420 static void m68k_op_dbvc_16(void)
12421 {
12422 	if(COND_NOT_VC())
12423 	{
12424 		uint* r_dst = &DY;
12425 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12426 
12427 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12428 		if(res != 0xffff)
12429 		{
12430 			uint offset = OPER_I_16();
12431 			REG_PC -= 2;
12432 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12433 			m68ki_branch_16(offset);
12434 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12435 			return;
12436 		}
12437 		REG_PC += 2;
12438 		USE_CYCLES(CYC_DBCC_F_EXP);
12439 		return;
12440 	}
12441 	REG_PC += 2;
12442 }
12443 
12444 
m68k_op_dbvs_16(void)12445 static void m68k_op_dbvs_16(void)
12446 {
12447 	if(COND_NOT_VS())
12448 	{
12449 		uint* r_dst = &DY;
12450 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12451 
12452 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12453 		if(res != 0xffff)
12454 		{
12455 			uint offset = OPER_I_16();
12456 			REG_PC -= 2;
12457 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12458 			m68ki_branch_16(offset);
12459 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12460 			return;
12461 		}
12462 		REG_PC += 2;
12463 		USE_CYCLES(CYC_DBCC_F_EXP);
12464 		return;
12465 	}
12466 	REG_PC += 2;
12467 }
12468 
12469 
m68k_op_dbpl_16(void)12470 static void m68k_op_dbpl_16(void)
12471 {
12472 	if(COND_NOT_PL())
12473 	{
12474 		uint* r_dst = &DY;
12475 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12476 
12477 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12478 		if(res != 0xffff)
12479 		{
12480 			uint offset = OPER_I_16();
12481 			REG_PC -= 2;
12482 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12483 			m68ki_branch_16(offset);
12484 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12485 			return;
12486 		}
12487 		REG_PC += 2;
12488 		USE_CYCLES(CYC_DBCC_F_EXP);
12489 		return;
12490 	}
12491 	REG_PC += 2;
12492 }
12493 
12494 
m68k_op_dbmi_16(void)12495 static void m68k_op_dbmi_16(void)
12496 {
12497 	if(COND_NOT_MI())
12498 	{
12499 		uint* r_dst = &DY;
12500 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12501 
12502 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12503 		if(res != 0xffff)
12504 		{
12505 			uint offset = OPER_I_16();
12506 			REG_PC -= 2;
12507 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12508 			m68ki_branch_16(offset);
12509 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12510 			return;
12511 		}
12512 		REG_PC += 2;
12513 		USE_CYCLES(CYC_DBCC_F_EXP);
12514 		return;
12515 	}
12516 	REG_PC += 2;
12517 }
12518 
12519 
m68k_op_dbge_16(void)12520 static void m68k_op_dbge_16(void)
12521 {
12522 	if(COND_NOT_GE())
12523 	{
12524 		uint* r_dst = &DY;
12525 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12526 
12527 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12528 		if(res != 0xffff)
12529 		{
12530 			uint offset = OPER_I_16();
12531 			REG_PC -= 2;
12532 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12533 			m68ki_branch_16(offset);
12534 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12535 			return;
12536 		}
12537 		REG_PC += 2;
12538 		USE_CYCLES(CYC_DBCC_F_EXP);
12539 		return;
12540 	}
12541 	REG_PC += 2;
12542 }
12543 
12544 
m68k_op_dblt_16(void)12545 static void m68k_op_dblt_16(void)
12546 {
12547 	if(COND_NOT_LT())
12548 	{
12549 		uint* r_dst = &DY;
12550 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12551 
12552 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12553 		if(res != 0xffff)
12554 		{
12555 			uint offset = OPER_I_16();
12556 			REG_PC -= 2;
12557 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12558 			m68ki_branch_16(offset);
12559 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12560 			return;
12561 		}
12562 		REG_PC += 2;
12563 		USE_CYCLES(CYC_DBCC_F_EXP);
12564 		return;
12565 	}
12566 	REG_PC += 2;
12567 }
12568 
12569 
m68k_op_dbgt_16(void)12570 static void m68k_op_dbgt_16(void)
12571 {
12572 	if(COND_NOT_GT())
12573 	{
12574 		uint* r_dst = &DY;
12575 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12576 
12577 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12578 		if(res != 0xffff)
12579 		{
12580 			uint offset = OPER_I_16();
12581 			REG_PC -= 2;
12582 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12583 			m68ki_branch_16(offset);
12584 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12585 			return;
12586 		}
12587 		REG_PC += 2;
12588 		USE_CYCLES(CYC_DBCC_F_EXP);
12589 		return;
12590 	}
12591 	REG_PC += 2;
12592 }
12593 
12594 
m68k_op_dble_16(void)12595 static void m68k_op_dble_16(void)
12596 {
12597 	if(COND_NOT_LE())
12598 	{
12599 		uint* r_dst = &DY;
12600 		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
12601 
12602 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12603 		if(res != 0xffff)
12604 		{
12605 			uint offset = OPER_I_16();
12606 			REG_PC -= 2;
12607 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
12608 			m68ki_branch_16(offset);
12609 			USE_CYCLES(CYC_DBCC_F_NOEXP);
12610 			return;
12611 		}
12612 		REG_PC += 2;
12613 		USE_CYCLES(CYC_DBCC_F_EXP);
12614 		return;
12615 	}
12616 	REG_PC += 2;
12617 }
12618 
12619 
m68k_op_divs_16_d(void)12620 static void m68k_op_divs_16_d(void)
12621 {
12622 	uint* r_dst = &DX;
12623 	sint src = MAKE_INT_16(DY);
12624 	sint quotient;
12625 	sint remainder;
12626 
12627 	if(src != 0)
12628 	{
12629 		if((uint32)*r_dst == 0x80000000 && src == -1)
12630 		{
12631 			FLAG_Z = 0;
12632 			FLAG_N = NFLAG_CLEAR;
12633 			FLAG_V = VFLAG_CLEAR;
12634 			FLAG_C = CFLAG_CLEAR;
12635 			*r_dst = 0;
12636 			return;
12637 		}
12638 
12639 		quotient = MAKE_INT_32(*r_dst) / src;
12640 		remainder = MAKE_INT_32(*r_dst) % src;
12641 
12642 		if(quotient == MAKE_INT_16(quotient))
12643 		{
12644 			FLAG_Z = quotient;
12645 			FLAG_N = NFLAG_16(quotient);
12646 			FLAG_V = VFLAG_CLEAR;
12647 			FLAG_C = CFLAG_CLEAR;
12648 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12649 			return;
12650 		}
12651 		FLAG_V = VFLAG_SET;
12652 		return;
12653 	}
12654 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
12655 }
12656 
12657 
m68k_op_divs_16_ai(void)12658 static void m68k_op_divs_16_ai(void)
12659 {
12660 	uint* r_dst = &DX;
12661 	sint src = MAKE_INT_16(OPER_AY_AI_16());
12662 	sint quotient;
12663 	sint remainder;
12664 
12665 	if(src != 0)
12666 	{
12667 		if((uint32)*r_dst == 0x80000000 && src == -1)
12668 		{
12669 			FLAG_Z = 0;
12670 			FLAG_N = NFLAG_CLEAR;
12671 			FLAG_V = VFLAG_CLEAR;
12672 			FLAG_C = CFLAG_CLEAR;
12673 			*r_dst = 0;
12674 			return;
12675 		}
12676 
12677 		quotient = MAKE_INT_32(*r_dst) / src;
12678 		remainder = MAKE_INT_32(*r_dst) % src;
12679 
12680 		if(quotient == MAKE_INT_16(quotient))
12681 		{
12682 			FLAG_Z = quotient;
12683 			FLAG_N = NFLAG_16(quotient);
12684 			FLAG_V = VFLAG_CLEAR;
12685 			FLAG_C = CFLAG_CLEAR;
12686 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12687 			return;
12688 		}
12689 		FLAG_V = VFLAG_SET;
12690 		return;
12691 	}
12692 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
12693 }
12694 
12695 
m68k_op_divs_16_pi(void)12696 static void m68k_op_divs_16_pi(void)
12697 {
12698 	uint* r_dst = &DX;
12699 	sint src = MAKE_INT_16(OPER_AY_PI_16());
12700 	sint quotient;
12701 	sint remainder;
12702 
12703 	if(src != 0)
12704 	{
12705 		if((uint32)*r_dst == 0x80000000 && src == -1)
12706 		{
12707 			FLAG_Z = 0;
12708 			FLAG_N = NFLAG_CLEAR;
12709 			FLAG_V = VFLAG_CLEAR;
12710 			FLAG_C = CFLAG_CLEAR;
12711 			*r_dst = 0;
12712 			return;
12713 		}
12714 
12715 		quotient = MAKE_INT_32(*r_dst) / src;
12716 		remainder = MAKE_INT_32(*r_dst) % src;
12717 
12718 		if(quotient == MAKE_INT_16(quotient))
12719 		{
12720 			FLAG_Z = quotient;
12721 			FLAG_N = NFLAG_16(quotient);
12722 			FLAG_V = VFLAG_CLEAR;
12723 			FLAG_C = CFLAG_CLEAR;
12724 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12725 			return;
12726 		}
12727 		FLAG_V = VFLAG_SET;
12728 		return;
12729 	}
12730 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
12731 }
12732 
12733 
m68k_op_divs_16_pd(void)12734 static void m68k_op_divs_16_pd(void)
12735 {
12736 	uint* r_dst = &DX;
12737 	sint src = MAKE_INT_16(OPER_AY_PD_16());
12738 	sint quotient;
12739 	sint remainder;
12740 
12741 	if(src != 0)
12742 	{
12743 		if((uint32)*r_dst == 0x80000000 && src == -1)
12744 		{
12745 			FLAG_Z = 0;
12746 			FLAG_N = NFLAG_CLEAR;
12747 			FLAG_V = VFLAG_CLEAR;
12748 			FLAG_C = CFLAG_CLEAR;
12749 			*r_dst = 0;
12750 			return;
12751 		}
12752 
12753 		quotient = MAKE_INT_32(*r_dst) / src;
12754 		remainder = MAKE_INT_32(*r_dst) % src;
12755 
12756 		if(quotient == MAKE_INT_16(quotient))
12757 		{
12758 			FLAG_Z = quotient;
12759 			FLAG_N = NFLAG_16(quotient);
12760 			FLAG_V = VFLAG_CLEAR;
12761 			FLAG_C = CFLAG_CLEAR;
12762 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12763 			return;
12764 		}
12765 		FLAG_V = VFLAG_SET;
12766 		return;
12767 	}
12768 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
12769 }
12770 
12771 
m68k_op_divs_16_di(void)12772 static void m68k_op_divs_16_di(void)
12773 {
12774 	uint* r_dst = &DX;
12775 	sint src = MAKE_INT_16(OPER_AY_DI_16());
12776 	sint quotient;
12777 	sint remainder;
12778 
12779 	if(src != 0)
12780 	{
12781 		if((uint32)*r_dst == 0x80000000 && src == -1)
12782 		{
12783 			FLAG_Z = 0;
12784 			FLAG_N = NFLAG_CLEAR;
12785 			FLAG_V = VFLAG_CLEAR;
12786 			FLAG_C = CFLAG_CLEAR;
12787 			*r_dst = 0;
12788 			return;
12789 		}
12790 
12791 		quotient = MAKE_INT_32(*r_dst) / src;
12792 		remainder = MAKE_INT_32(*r_dst) % src;
12793 
12794 		if(quotient == MAKE_INT_16(quotient))
12795 		{
12796 			FLAG_Z = quotient;
12797 			FLAG_N = NFLAG_16(quotient);
12798 			FLAG_V = VFLAG_CLEAR;
12799 			FLAG_C = CFLAG_CLEAR;
12800 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12801 			return;
12802 		}
12803 		FLAG_V = VFLAG_SET;
12804 		return;
12805 	}
12806 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
12807 }
12808 
12809 
m68k_op_divs_16_ix(void)12810 static void m68k_op_divs_16_ix(void)
12811 {
12812 	uint* r_dst = &DX;
12813 	sint src = MAKE_INT_16(OPER_AY_IX_16());
12814 	sint quotient;
12815 	sint remainder;
12816 
12817 	if(src != 0)
12818 	{
12819 		if((uint32)*r_dst == 0x80000000 && src == -1)
12820 		{
12821 			FLAG_Z = 0;
12822 			FLAG_N = NFLAG_CLEAR;
12823 			FLAG_V = VFLAG_CLEAR;
12824 			FLAG_C = CFLAG_CLEAR;
12825 			*r_dst = 0;
12826 			return;
12827 		}
12828 
12829 		quotient = MAKE_INT_32(*r_dst) / src;
12830 		remainder = MAKE_INT_32(*r_dst) % src;
12831 
12832 		if(quotient == MAKE_INT_16(quotient))
12833 		{
12834 			FLAG_Z = quotient;
12835 			FLAG_N = NFLAG_16(quotient);
12836 			FLAG_V = VFLAG_CLEAR;
12837 			FLAG_C = CFLAG_CLEAR;
12838 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12839 			return;
12840 		}
12841 		FLAG_V = VFLAG_SET;
12842 		return;
12843 	}
12844 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
12845 }
12846 
12847 
m68k_op_divs_16_aw(void)12848 static void m68k_op_divs_16_aw(void)
12849 {
12850 	uint* r_dst = &DX;
12851 	sint src = MAKE_INT_16(OPER_AW_16());
12852 	sint quotient;
12853 	sint remainder;
12854 
12855 	if(src != 0)
12856 	{
12857 		if((uint32)*r_dst == 0x80000000 && src == -1)
12858 		{
12859 			FLAG_Z = 0;
12860 			FLAG_N = NFLAG_CLEAR;
12861 			FLAG_V = VFLAG_CLEAR;
12862 			FLAG_C = CFLAG_CLEAR;
12863 			*r_dst = 0;
12864 			return;
12865 		}
12866 
12867 		quotient = MAKE_INT_32(*r_dst) / src;
12868 		remainder = MAKE_INT_32(*r_dst) % src;
12869 
12870 		if(quotient == MAKE_INT_16(quotient))
12871 		{
12872 			FLAG_Z = quotient;
12873 			FLAG_N = NFLAG_16(quotient);
12874 			FLAG_V = VFLAG_CLEAR;
12875 			FLAG_C = CFLAG_CLEAR;
12876 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12877 			return;
12878 		}
12879 		FLAG_V = VFLAG_SET;
12880 		return;
12881 	}
12882 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
12883 }
12884 
12885 
m68k_op_divs_16_al(void)12886 static void m68k_op_divs_16_al(void)
12887 {
12888 	uint* r_dst = &DX;
12889 	sint src = MAKE_INT_16(OPER_AL_16());
12890 	sint quotient;
12891 	sint remainder;
12892 
12893 	if(src != 0)
12894 	{
12895 		if((uint32)*r_dst == 0x80000000 && src == -1)
12896 		{
12897 			FLAG_Z = 0;
12898 			FLAG_N = NFLAG_CLEAR;
12899 			FLAG_V = VFLAG_CLEAR;
12900 			FLAG_C = CFLAG_CLEAR;
12901 			*r_dst = 0;
12902 			return;
12903 		}
12904 
12905 		quotient = MAKE_INT_32(*r_dst) / src;
12906 		remainder = MAKE_INT_32(*r_dst) % src;
12907 
12908 		if(quotient == MAKE_INT_16(quotient))
12909 		{
12910 			FLAG_Z = quotient;
12911 			FLAG_N = NFLAG_16(quotient);
12912 			FLAG_V = VFLAG_CLEAR;
12913 			FLAG_C = CFLAG_CLEAR;
12914 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12915 			return;
12916 		}
12917 		FLAG_V = VFLAG_SET;
12918 		return;
12919 	}
12920 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
12921 }
12922 
12923 
m68k_op_divs_16_pcdi(void)12924 static void m68k_op_divs_16_pcdi(void)
12925 {
12926 	uint* r_dst = &DX;
12927 	sint src = MAKE_INT_16(OPER_PCDI_16());
12928 	sint quotient;
12929 	sint remainder;
12930 
12931 	if(src != 0)
12932 	{
12933 		if((uint32)*r_dst == 0x80000000 && src == -1)
12934 		{
12935 			FLAG_Z = 0;
12936 			FLAG_N = NFLAG_CLEAR;
12937 			FLAG_V = VFLAG_CLEAR;
12938 			FLAG_C = CFLAG_CLEAR;
12939 			*r_dst = 0;
12940 			return;
12941 		}
12942 
12943 		quotient = MAKE_INT_32(*r_dst) / src;
12944 		remainder = MAKE_INT_32(*r_dst) % src;
12945 
12946 		if(quotient == MAKE_INT_16(quotient))
12947 		{
12948 			FLAG_Z = quotient;
12949 			FLAG_N = NFLAG_16(quotient);
12950 			FLAG_V = VFLAG_CLEAR;
12951 			FLAG_C = CFLAG_CLEAR;
12952 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12953 			return;
12954 		}
12955 		FLAG_V = VFLAG_SET;
12956 		return;
12957 	}
12958 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
12959 }
12960 
12961 
m68k_op_divs_16_pcix(void)12962 static void m68k_op_divs_16_pcix(void)
12963 {
12964 	uint* r_dst = &DX;
12965 	sint src = MAKE_INT_16(OPER_PCIX_16());
12966 	sint quotient;
12967 	sint remainder;
12968 
12969 	if(src != 0)
12970 	{
12971 		if((uint32)*r_dst == 0x80000000 && src == -1)
12972 		{
12973 			FLAG_Z = 0;
12974 			FLAG_N = NFLAG_CLEAR;
12975 			FLAG_V = VFLAG_CLEAR;
12976 			FLAG_C = CFLAG_CLEAR;
12977 			*r_dst = 0;
12978 			return;
12979 		}
12980 
12981 		quotient = MAKE_INT_32(*r_dst) / src;
12982 		remainder = MAKE_INT_32(*r_dst) % src;
12983 
12984 		if(quotient == MAKE_INT_16(quotient))
12985 		{
12986 			FLAG_Z = quotient;
12987 			FLAG_N = NFLAG_16(quotient);
12988 			FLAG_V = VFLAG_CLEAR;
12989 			FLAG_C = CFLAG_CLEAR;
12990 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12991 			return;
12992 		}
12993 		FLAG_V = VFLAG_SET;
12994 		return;
12995 	}
12996 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
12997 }
12998 
12999 
m68k_op_divs_16_i(void)13000 static void m68k_op_divs_16_i(void)
13001 {
13002 	uint* r_dst = &DX;
13003 	sint src = MAKE_INT_16(OPER_I_16());
13004 	sint quotient;
13005 	sint remainder;
13006 
13007 	if(src != 0)
13008 	{
13009 		if((uint32)*r_dst == 0x80000000 && src == -1)
13010 		{
13011 			FLAG_Z = 0;
13012 			FLAG_N = NFLAG_CLEAR;
13013 			FLAG_V = VFLAG_CLEAR;
13014 			FLAG_C = CFLAG_CLEAR;
13015 			*r_dst = 0;
13016 			return;
13017 		}
13018 
13019 		quotient = MAKE_INT_32(*r_dst) / src;
13020 		remainder = MAKE_INT_32(*r_dst) % src;
13021 
13022 		if(quotient == MAKE_INT_16(quotient))
13023 		{
13024 			FLAG_Z = quotient;
13025 			FLAG_N = NFLAG_16(quotient);
13026 			FLAG_V = VFLAG_CLEAR;
13027 			FLAG_C = CFLAG_CLEAR;
13028 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13029 			return;
13030 		}
13031 		FLAG_V = VFLAG_SET;
13032 		return;
13033 	}
13034 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13035 }
13036 
13037 
m68k_op_divu_16_d(void)13038 static void m68k_op_divu_16_d(void)
13039 {
13040 	uint* r_dst = &DX;
13041 	uint src = MASK_OUT_ABOVE_16(DY);
13042 
13043 	if(src != 0)
13044 	{
13045 		uint quotient = *r_dst / src;
13046 		uint remainder = *r_dst % src;
13047 
13048 		if(quotient < 0x10000)
13049 		{
13050 			FLAG_Z = quotient;
13051 			FLAG_N = NFLAG_16(quotient);
13052 			FLAG_V = VFLAG_CLEAR;
13053 			FLAG_C = CFLAG_CLEAR;
13054 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13055 			return;
13056 		}
13057 		FLAG_V = VFLAG_SET;
13058 		return;
13059 	}
13060 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13061 }
13062 
13063 
m68k_op_divu_16_ai(void)13064 static void m68k_op_divu_16_ai(void)
13065 {
13066 	uint* r_dst = &DX;
13067 	uint src = OPER_AY_AI_16();
13068 
13069 	if(src != 0)
13070 	{
13071 		uint quotient = *r_dst / src;
13072 		uint remainder = *r_dst % src;
13073 
13074 		if(quotient < 0x10000)
13075 		{
13076 			FLAG_Z = quotient;
13077 			FLAG_N = NFLAG_16(quotient);
13078 			FLAG_V = VFLAG_CLEAR;
13079 			FLAG_C = CFLAG_CLEAR;
13080 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13081 			return;
13082 		}
13083 		FLAG_V = VFLAG_SET;
13084 		return;
13085 	}
13086 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13087 }
13088 
13089 
m68k_op_divu_16_pi(void)13090 static void m68k_op_divu_16_pi(void)
13091 {
13092 	uint* r_dst = &DX;
13093 	uint src = OPER_AY_PI_16();
13094 
13095 	if(src != 0)
13096 	{
13097 		uint quotient = *r_dst / src;
13098 		uint remainder = *r_dst % src;
13099 
13100 		if(quotient < 0x10000)
13101 		{
13102 			FLAG_Z = quotient;
13103 			FLAG_N = NFLAG_16(quotient);
13104 			FLAG_V = VFLAG_CLEAR;
13105 			FLAG_C = CFLAG_CLEAR;
13106 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13107 			return;
13108 		}
13109 		FLAG_V = VFLAG_SET;
13110 		return;
13111 	}
13112 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13113 }
13114 
13115 
m68k_op_divu_16_pd(void)13116 static void m68k_op_divu_16_pd(void)
13117 {
13118 	uint* r_dst = &DX;
13119 	uint src = OPER_AY_PD_16();
13120 
13121 	if(src != 0)
13122 	{
13123 		uint quotient = *r_dst / src;
13124 		uint remainder = *r_dst % src;
13125 
13126 		if(quotient < 0x10000)
13127 		{
13128 			FLAG_Z = quotient;
13129 			FLAG_N = NFLAG_16(quotient);
13130 			FLAG_V = VFLAG_CLEAR;
13131 			FLAG_C = CFLAG_CLEAR;
13132 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13133 			return;
13134 		}
13135 		FLAG_V = VFLAG_SET;
13136 		return;
13137 	}
13138 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13139 }
13140 
13141 
m68k_op_divu_16_di(void)13142 static void m68k_op_divu_16_di(void)
13143 {
13144 	uint* r_dst = &DX;
13145 	uint src = OPER_AY_DI_16();
13146 
13147 	if(src != 0)
13148 	{
13149 		uint quotient = *r_dst / src;
13150 		uint remainder = *r_dst % src;
13151 
13152 		if(quotient < 0x10000)
13153 		{
13154 			FLAG_Z = quotient;
13155 			FLAG_N = NFLAG_16(quotient);
13156 			FLAG_V = VFLAG_CLEAR;
13157 			FLAG_C = CFLAG_CLEAR;
13158 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13159 			return;
13160 		}
13161 		FLAG_V = VFLAG_SET;
13162 		return;
13163 	}
13164 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13165 }
13166 
13167 
m68k_op_divu_16_ix(void)13168 static void m68k_op_divu_16_ix(void)
13169 {
13170 	uint* r_dst = &DX;
13171 	uint src = OPER_AY_IX_16();
13172 
13173 	if(src != 0)
13174 	{
13175 		uint quotient = *r_dst / src;
13176 		uint remainder = *r_dst % src;
13177 
13178 		if(quotient < 0x10000)
13179 		{
13180 			FLAG_Z = quotient;
13181 			FLAG_N = NFLAG_16(quotient);
13182 			FLAG_V = VFLAG_CLEAR;
13183 			FLAG_C = CFLAG_CLEAR;
13184 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13185 			return;
13186 		}
13187 		FLAG_V = VFLAG_SET;
13188 		return;
13189 	}
13190 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13191 }
13192 
13193 
m68k_op_divu_16_aw(void)13194 static void m68k_op_divu_16_aw(void)
13195 {
13196 	uint* r_dst = &DX;
13197 	uint src = OPER_AW_16();
13198 
13199 	if(src != 0)
13200 	{
13201 		uint quotient = *r_dst / src;
13202 		uint remainder = *r_dst % src;
13203 
13204 		if(quotient < 0x10000)
13205 		{
13206 			FLAG_Z = quotient;
13207 			FLAG_N = NFLAG_16(quotient);
13208 			FLAG_V = VFLAG_CLEAR;
13209 			FLAG_C = CFLAG_CLEAR;
13210 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13211 			return;
13212 		}
13213 		FLAG_V = VFLAG_SET;
13214 		return;
13215 	}
13216 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13217 }
13218 
13219 
m68k_op_divu_16_al(void)13220 static void m68k_op_divu_16_al(void)
13221 {
13222 	uint* r_dst = &DX;
13223 	uint src = OPER_AL_16();
13224 
13225 	if(src != 0)
13226 	{
13227 		uint quotient = *r_dst / src;
13228 		uint remainder = *r_dst % src;
13229 
13230 		if(quotient < 0x10000)
13231 		{
13232 			FLAG_Z = quotient;
13233 			FLAG_N = NFLAG_16(quotient);
13234 			FLAG_V = VFLAG_CLEAR;
13235 			FLAG_C = CFLAG_CLEAR;
13236 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13237 			return;
13238 		}
13239 		FLAG_V = VFLAG_SET;
13240 		return;
13241 	}
13242 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13243 }
13244 
13245 
m68k_op_divu_16_pcdi(void)13246 static void m68k_op_divu_16_pcdi(void)
13247 {
13248 	uint* r_dst = &DX;
13249 	uint src = OPER_PCDI_16();
13250 
13251 	if(src != 0)
13252 	{
13253 		uint quotient = *r_dst / src;
13254 		uint remainder = *r_dst % src;
13255 
13256 		if(quotient < 0x10000)
13257 		{
13258 			FLAG_Z = quotient;
13259 			FLAG_N = NFLAG_16(quotient);
13260 			FLAG_V = VFLAG_CLEAR;
13261 			FLAG_C = CFLAG_CLEAR;
13262 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13263 			return;
13264 		}
13265 		FLAG_V = VFLAG_SET;
13266 		return;
13267 	}
13268 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13269 }
13270 
13271 
m68k_op_divu_16_pcix(void)13272 static void m68k_op_divu_16_pcix(void)
13273 {
13274 	uint* r_dst = &DX;
13275 	uint src = OPER_PCIX_16();
13276 
13277 	if(src != 0)
13278 	{
13279 		uint quotient = *r_dst / src;
13280 		uint remainder = *r_dst % src;
13281 
13282 		if(quotient < 0x10000)
13283 		{
13284 			FLAG_Z = quotient;
13285 			FLAG_N = NFLAG_16(quotient);
13286 			FLAG_V = VFLAG_CLEAR;
13287 			FLAG_C = CFLAG_CLEAR;
13288 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13289 			return;
13290 		}
13291 		FLAG_V = VFLAG_SET;
13292 		return;
13293 	}
13294 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13295 }
13296 
13297 
m68k_op_divu_16_i(void)13298 static void m68k_op_divu_16_i(void)
13299 {
13300 	uint* r_dst = &DX;
13301 	uint src = OPER_I_16();
13302 
13303 	if(src != 0)
13304 	{
13305 		uint quotient = *r_dst / src;
13306 		uint remainder = *r_dst % src;
13307 
13308 		if(quotient < 0x10000)
13309 		{
13310 			FLAG_Z = quotient;
13311 			FLAG_N = NFLAG_16(quotient);
13312 			FLAG_V = VFLAG_CLEAR;
13313 			FLAG_C = CFLAG_CLEAR;
13314 			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13315 			return;
13316 		}
13317 		FLAG_V = VFLAG_SET;
13318 		return;
13319 	}
13320 	m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13321 }
13322 
13323 
m68k_op_divl_32_d(void)13324 static void m68k_op_divl_32_d(void)
13325 {
13326 #if M68K_USE_64_BIT
13327 
13328 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
13329 	{
13330 		uint word2 = OPER_I_16();
13331 		uint64 divisor   = DY;
13332 		uint64 dividend  = 0;
13333 		uint64 quotient  = 0;
13334 		uint64 remainder = 0;
13335 
13336 		if(divisor != 0)
13337 		{
13338 			if(BIT_A(word2))	/* 64 bit */
13339 			{
13340 				dividend = REG_D[word2 & 7];
13341 				dividend <<= 32;
13342 				dividend |= REG_D[(word2 >> 12) & 7];
13343 
13344 				if(BIT_B(word2))	   /* signed */
13345 				{
13346 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
13347 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
13348 					if((sint64)quotient != (sint64)((sint32)quotient))
13349 					{
13350 						FLAG_V = VFLAG_SET;
13351 						return;
13352 					}
13353 				}
13354 				else					/* unsigned */
13355 				{
13356 					quotient = dividend / divisor;
13357 					if(quotient > 0xffffffff)
13358 					{
13359 						FLAG_V = VFLAG_SET;
13360 						return;
13361 					}
13362 					remainder = dividend % divisor;
13363 				}
13364 			}
13365 			else	/* 32 bit */
13366 			{
13367 				dividend = REG_D[(word2 >> 12) & 7];
13368 				if(BIT_B(word2))	   /* signed */
13369 				{
13370 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
13371 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
13372 				}
13373 				else					/* unsigned */
13374 				{
13375 					quotient = dividend / divisor;
13376 					remainder = dividend % divisor;
13377 				}
13378 			}
13379 
13380 			REG_D[word2 & 7] = remainder;
13381 			REG_D[(word2 >> 12) & 7] = quotient;
13382 
13383 			FLAG_N = NFLAG_32(quotient);
13384 			FLAG_Z = quotient;
13385 			FLAG_V = VFLAG_CLEAR;
13386 			FLAG_C = CFLAG_CLEAR;
13387 			return;
13388 		}
13389 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13390 		return;
13391 	}
13392 	m68ki_exception_illegal();
13393 
13394 #else
13395 
13396 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
13397 	{
13398 		uint word2 = OPER_I_16();
13399 		uint divisor = DY;
13400 		uint dividend_hi = REG_D[word2 & 7];
13401 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
13402 		uint quotient = 0;
13403 		uint remainder = 0;
13404 		uint dividend_neg = 0;
13405 		uint divisor_neg = 0;
13406 		sint i;
13407 		uint overflow;
13408 
13409 		if(divisor != 0)
13410 		{
13411 			/* quad / long : long quotient, long remainder */
13412 			if(BIT_A(word2))
13413 			{
13414 				if(BIT_B(word2))	   /* signed */
13415 				{
13416 					/* special case in signed divide */
13417 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
13418 					{
13419 						REG_D[word2 & 7] = 0;
13420 						REG_D[(word2 >> 12) & 7] = 0x80000000;
13421 
13422 						FLAG_N = NFLAG_SET;
13423 						FLAG_Z = ZFLAG_CLEAR;
13424 						FLAG_V = VFLAG_CLEAR;
13425 						FLAG_C = CFLAG_CLEAR;
13426 						return;
13427 					}
13428 					if(GET_MSB_32(dividend_hi))
13429 					{
13430 						dividend_neg = 1;
13431 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
13432 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
13433 					}
13434 					if(GET_MSB_32(divisor))
13435 					{
13436 						divisor_neg = 1;
13437 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
13438 
13439 					}
13440 				}
13441 
13442 				/* if the upper long is greater than the divisor, we're overflowing. */
13443 				if(dividend_hi >= divisor)
13444 				{
13445 					FLAG_V = VFLAG_SET;
13446 					return;
13447 				}
13448 
13449 				for(i = 31; i >= 0; i--)
13450 				{
13451 					quotient <<= 1;
13452 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
13453 					if(remainder >= divisor)
13454 					{
13455 						remainder -= divisor;
13456 						quotient++;
13457 					}
13458 				}
13459 				for(i = 31; i >= 0; i--)
13460 				{
13461 					quotient <<= 1;
13462 					overflow = GET_MSB_32(remainder);
13463 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
13464 					if(remainder >= divisor || overflow)
13465 					{
13466 						remainder -= divisor;
13467 						quotient++;
13468 					}
13469 				}
13470 
13471 				if(BIT_B(word2))	   /* signed */
13472 				{
13473 					if(quotient > 0x7fffffff)
13474 					{
13475 						FLAG_V = VFLAG_SET;
13476 						return;
13477 					}
13478 					if(dividend_neg)
13479 					{
13480 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
13481 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
13482 					}
13483 					if(divisor_neg)
13484 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
13485 				}
13486 
13487 				REG_D[word2 & 7] = remainder;
13488 				REG_D[(word2 >> 12) & 7] = quotient;
13489 
13490 				FLAG_N = NFLAG_32(quotient);
13491 				FLAG_Z = quotient;
13492 				FLAG_V = VFLAG_CLEAR;
13493 				FLAG_C = CFLAG_CLEAR;
13494 				return;
13495 			}
13496 
13497 			/* long / long: long quotient, maybe long remainder */
13498 			if(BIT_B(word2))	   /* signed */
13499 			{
13500 				/* Special case in divide */
13501 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
13502 				{
13503 					FLAG_N = NFLAG_SET;
13504 					FLAG_Z = ZFLAG_CLEAR;
13505 					FLAG_V = VFLAG_CLEAR;
13506 					FLAG_C = CFLAG_CLEAR;
13507 					REG_D[(word2 >> 12) & 7] = 0x80000000;
13508 					REG_D[word2 & 7] = 0;
13509 					return;
13510 				}
13511 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
13512 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
13513 			}
13514 			else
13515 			{
13516 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
13517 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
13518 			}
13519 
13520 			FLAG_N = NFLAG_32(quotient);
13521 			FLAG_Z = quotient;
13522 			FLAG_V = VFLAG_CLEAR;
13523 			FLAG_C = CFLAG_CLEAR;
13524 			return;
13525 		}
13526 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13527 		return;
13528 	}
13529 	m68ki_exception_illegal();
13530 
13531 #endif
13532 }
13533 
13534 
m68k_op_divl_32_ai(void)13535 static void m68k_op_divl_32_ai(void)
13536 {
13537 #if M68K_USE_64_BIT
13538 
13539 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
13540 	{
13541 		uint word2 = OPER_I_16();
13542 		uint64 divisor = OPER_AY_AI_32();
13543 		uint64 dividend  = 0;
13544 		uint64 quotient  = 0;
13545 		uint64 remainder = 0;
13546 
13547 		if(divisor != 0)
13548 		{
13549 			if(BIT_A(word2))	/* 64 bit */
13550 			{
13551 				dividend = REG_D[word2 & 7];
13552 				dividend <<= 32;
13553 				dividend |= REG_D[(word2 >> 12) & 7];
13554 
13555 				if(BIT_B(word2))	   /* signed */
13556 				{
13557 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
13558 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
13559 					if((sint64)quotient != (sint64)((sint32)quotient))
13560 					{
13561 						FLAG_V = VFLAG_SET;
13562 						return;
13563 					}
13564 				}
13565 				else					/* unsigned */
13566 				{
13567 					quotient = dividend / divisor;
13568 					if(quotient > 0xffffffff)
13569 					{
13570 						FLAG_V = VFLAG_SET;
13571 						return;
13572 					}
13573 					remainder = dividend % divisor;
13574 				}
13575 			}
13576 			else	/* 32 bit */
13577 			{
13578 				dividend = REG_D[(word2 >> 12) & 7];
13579 				if(BIT_B(word2))	   /* signed */
13580 				{
13581 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
13582 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
13583 				}
13584 				else					/* unsigned */
13585 				{
13586 					quotient = dividend / divisor;
13587 					remainder = dividend % divisor;
13588 				}
13589 			}
13590 
13591 			REG_D[word2 & 7] = remainder;
13592 			REG_D[(word2 >> 12) & 7] = quotient;
13593 
13594 			FLAG_N = NFLAG_32(quotient);
13595 			FLAG_Z = quotient;
13596 			FLAG_V = VFLAG_CLEAR;
13597 			FLAG_C = CFLAG_CLEAR;
13598 			return;
13599 		}
13600 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13601 		return;
13602 	}
13603 	m68ki_exception_illegal();
13604 
13605 #else
13606 
13607 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
13608 	{
13609 		uint word2 = OPER_I_16();
13610 		uint divisor = OPER_AY_AI_32();
13611 		uint dividend_hi = REG_D[word2 & 7];
13612 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
13613 		uint quotient = 0;
13614 		uint remainder = 0;
13615 		uint dividend_neg = 0;
13616 		uint divisor_neg = 0;
13617 		sint i;
13618 		uint overflow;
13619 
13620 		if(divisor != 0)
13621 		{
13622 			/* quad / long : long quotient, long remainder */
13623 			if(BIT_A(word2))
13624 			{
13625 				if(BIT_B(word2))	   /* signed */
13626 				{
13627 					/* special case in signed divide */
13628 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
13629 					{
13630 						REG_D[word2 & 7] = 0;
13631 						REG_D[(word2 >> 12) & 7] = 0x80000000;
13632 
13633 						FLAG_N = NFLAG_SET;
13634 						FLAG_Z = ZFLAG_CLEAR;
13635 						FLAG_V = VFLAG_CLEAR;
13636 						FLAG_C = CFLAG_CLEAR;
13637 						return;
13638 					}
13639 					if(GET_MSB_32(dividend_hi))
13640 					{
13641 						dividend_neg = 1;
13642 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
13643 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
13644 					}
13645 					if(GET_MSB_32(divisor))
13646 					{
13647 						divisor_neg = 1;
13648 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
13649 
13650 					}
13651 				}
13652 
13653 				/* if the upper long is greater than the divisor, we're overflowing. */
13654 				if(dividend_hi >= divisor)
13655 				{
13656 					FLAG_V = VFLAG_SET;
13657 					return;
13658 				}
13659 
13660 				for(i = 31; i >= 0; i--)
13661 				{
13662 					quotient <<= 1;
13663 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
13664 					if(remainder >= divisor)
13665 					{
13666 						remainder -= divisor;
13667 						quotient++;
13668 					}
13669 				}
13670 				for(i = 31; i >= 0; i--)
13671 				{
13672 					quotient <<= 1;
13673 					overflow = GET_MSB_32(remainder);
13674 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
13675 					if(remainder >= divisor || overflow)
13676 					{
13677 						remainder -= divisor;
13678 						quotient++;
13679 					}
13680 				}
13681 
13682 				if(BIT_B(word2))	   /* signed */
13683 				{
13684 					if(quotient > 0x7fffffff)
13685 					{
13686 						FLAG_V = VFLAG_SET;
13687 						return;
13688 					}
13689 					if(dividend_neg)
13690 					{
13691 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
13692 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
13693 					}
13694 					if(divisor_neg)
13695 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
13696 				}
13697 
13698 				REG_D[word2 & 7] = remainder;
13699 				REG_D[(word2 >> 12) & 7] = quotient;
13700 
13701 				FLAG_N = NFLAG_32(quotient);
13702 				FLAG_Z = quotient;
13703 				FLAG_V = VFLAG_CLEAR;
13704 				FLAG_C = CFLAG_CLEAR;
13705 				return;
13706 			}
13707 
13708 			/* long / long: long quotient, maybe long remainder */
13709 			if(BIT_B(word2))	   /* signed */
13710 			{
13711 				/* Special case in divide */
13712 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
13713 				{
13714 					FLAG_N = NFLAG_SET;
13715 					FLAG_Z = ZFLAG_CLEAR;
13716 					FLAG_V = VFLAG_CLEAR;
13717 					FLAG_C = CFLAG_CLEAR;
13718 					REG_D[(word2 >> 12) & 7] = 0x80000000;
13719 					REG_D[word2 & 7] = 0;
13720 					return;
13721 				}
13722 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
13723 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
13724 			}
13725 			else
13726 			{
13727 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
13728 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
13729 			}
13730 
13731 			FLAG_N = NFLAG_32(quotient);
13732 			FLAG_Z = quotient;
13733 			FLAG_V = VFLAG_CLEAR;
13734 			FLAG_C = CFLAG_CLEAR;
13735 			return;
13736 		}
13737 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13738 		return;
13739 	}
13740 	m68ki_exception_illegal();
13741 
13742 #endif
13743 }
13744 
13745 
m68k_op_divl_32_pi(void)13746 static void m68k_op_divl_32_pi(void)
13747 {
13748 #if M68K_USE_64_BIT
13749 
13750 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
13751 	{
13752 		uint word2 = OPER_I_16();
13753 		uint64 divisor = OPER_AY_PI_32();
13754 		uint64 dividend  = 0;
13755 		uint64 quotient  = 0;
13756 		uint64 remainder = 0;
13757 
13758 		if(divisor != 0)
13759 		{
13760 			if(BIT_A(word2))	/* 64 bit */
13761 			{
13762 				dividend = REG_D[word2 & 7];
13763 				dividend <<= 32;
13764 				dividend |= REG_D[(word2 >> 12) & 7];
13765 
13766 				if(BIT_B(word2))	   /* signed */
13767 				{
13768 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
13769 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
13770 					if((sint64)quotient != (sint64)((sint32)quotient))
13771 					{
13772 						FLAG_V = VFLAG_SET;
13773 						return;
13774 					}
13775 				}
13776 				else					/* unsigned */
13777 				{
13778 					quotient = dividend / divisor;
13779 					if(quotient > 0xffffffff)
13780 					{
13781 						FLAG_V = VFLAG_SET;
13782 						return;
13783 					}
13784 					remainder = dividend % divisor;
13785 				}
13786 			}
13787 			else	/* 32 bit */
13788 			{
13789 				dividend = REG_D[(word2 >> 12) & 7];
13790 				if(BIT_B(word2))	   /* signed */
13791 				{
13792 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
13793 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
13794 				}
13795 				else					/* unsigned */
13796 				{
13797 					quotient = dividend / divisor;
13798 					remainder = dividend % divisor;
13799 				}
13800 			}
13801 
13802 			REG_D[word2 & 7] = remainder;
13803 			REG_D[(word2 >> 12) & 7] = quotient;
13804 
13805 			FLAG_N = NFLAG_32(quotient);
13806 			FLAG_Z = quotient;
13807 			FLAG_V = VFLAG_CLEAR;
13808 			FLAG_C = CFLAG_CLEAR;
13809 			return;
13810 		}
13811 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13812 		return;
13813 	}
13814 	m68ki_exception_illegal();
13815 
13816 #else
13817 
13818 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
13819 	{
13820 		uint word2 = OPER_I_16();
13821 		uint divisor = OPER_AY_PI_32();
13822 		uint dividend_hi = REG_D[word2 & 7];
13823 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
13824 		uint quotient = 0;
13825 		uint remainder = 0;
13826 		uint dividend_neg = 0;
13827 		uint divisor_neg = 0;
13828 		sint i;
13829 		uint overflow;
13830 
13831 		if(divisor != 0)
13832 		{
13833 			/* quad / long : long quotient, long remainder */
13834 			if(BIT_A(word2))
13835 			{
13836 				if(BIT_B(word2))	   /* signed */
13837 				{
13838 					/* special case in signed divide */
13839 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
13840 					{
13841 						REG_D[word2 & 7] = 0;
13842 						REG_D[(word2 >> 12) & 7] = 0x80000000;
13843 
13844 						FLAG_N = NFLAG_SET;
13845 						FLAG_Z = ZFLAG_CLEAR;
13846 						FLAG_V = VFLAG_CLEAR;
13847 						FLAG_C = CFLAG_CLEAR;
13848 						return;
13849 					}
13850 					if(GET_MSB_32(dividend_hi))
13851 					{
13852 						dividend_neg = 1;
13853 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
13854 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
13855 					}
13856 					if(GET_MSB_32(divisor))
13857 					{
13858 						divisor_neg = 1;
13859 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
13860 
13861 					}
13862 				}
13863 
13864 				/* if the upper long is greater than the divisor, we're overflowing. */
13865 				if(dividend_hi >= divisor)
13866 				{
13867 					FLAG_V = VFLAG_SET;
13868 					return;
13869 				}
13870 
13871 				for(i = 31; i >= 0; i--)
13872 				{
13873 					quotient <<= 1;
13874 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
13875 					if(remainder >= divisor)
13876 					{
13877 						remainder -= divisor;
13878 						quotient++;
13879 					}
13880 				}
13881 				for(i = 31; i >= 0; i--)
13882 				{
13883 					quotient <<= 1;
13884 					overflow = GET_MSB_32(remainder);
13885 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
13886 					if(remainder >= divisor || overflow)
13887 					{
13888 						remainder -= divisor;
13889 						quotient++;
13890 					}
13891 				}
13892 
13893 				if(BIT_B(word2))	   /* signed */
13894 				{
13895 					if(quotient > 0x7fffffff)
13896 					{
13897 						FLAG_V = VFLAG_SET;
13898 						return;
13899 					}
13900 					if(dividend_neg)
13901 					{
13902 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
13903 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
13904 					}
13905 					if(divisor_neg)
13906 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
13907 				}
13908 
13909 				REG_D[word2 & 7] = remainder;
13910 				REG_D[(word2 >> 12) & 7] = quotient;
13911 
13912 				FLAG_N = NFLAG_32(quotient);
13913 				FLAG_Z = quotient;
13914 				FLAG_V = VFLAG_CLEAR;
13915 				FLAG_C = CFLAG_CLEAR;
13916 				return;
13917 			}
13918 
13919 			/* long / long: long quotient, maybe long remainder */
13920 			if(BIT_B(word2))	   /* signed */
13921 			{
13922 				/* Special case in divide */
13923 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
13924 				{
13925 					FLAG_N = NFLAG_SET;
13926 					FLAG_Z = ZFLAG_CLEAR;
13927 					FLAG_V = VFLAG_CLEAR;
13928 					FLAG_C = CFLAG_CLEAR;
13929 					REG_D[(word2 >> 12) & 7] = 0x80000000;
13930 					REG_D[word2 & 7] = 0;
13931 					return;
13932 				}
13933 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
13934 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
13935 			}
13936 			else
13937 			{
13938 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
13939 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
13940 			}
13941 
13942 			FLAG_N = NFLAG_32(quotient);
13943 			FLAG_Z = quotient;
13944 			FLAG_V = VFLAG_CLEAR;
13945 			FLAG_C = CFLAG_CLEAR;
13946 			return;
13947 		}
13948 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
13949 		return;
13950 	}
13951 	m68ki_exception_illegal();
13952 
13953 #endif
13954 }
13955 
13956 
m68k_op_divl_32_pd(void)13957 static void m68k_op_divl_32_pd(void)
13958 {
13959 #if M68K_USE_64_BIT
13960 
13961 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
13962 	{
13963 		uint word2 = OPER_I_16();
13964 		uint64 divisor = OPER_AY_PD_32();
13965 		uint64 dividend  = 0;
13966 		uint64 quotient  = 0;
13967 		uint64 remainder = 0;
13968 
13969 		if(divisor != 0)
13970 		{
13971 			if(BIT_A(word2))	/* 64 bit */
13972 			{
13973 				dividend = REG_D[word2 & 7];
13974 				dividend <<= 32;
13975 				dividend |= REG_D[(word2 >> 12) & 7];
13976 
13977 				if(BIT_B(word2))	   /* signed */
13978 				{
13979 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
13980 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
13981 					if((sint64)quotient != (sint64)((sint32)quotient))
13982 					{
13983 						FLAG_V = VFLAG_SET;
13984 						return;
13985 					}
13986 				}
13987 				else					/* unsigned */
13988 				{
13989 					quotient = dividend / divisor;
13990 					if(quotient > 0xffffffff)
13991 					{
13992 						FLAG_V = VFLAG_SET;
13993 						return;
13994 					}
13995 					remainder = dividend % divisor;
13996 				}
13997 			}
13998 			else	/* 32 bit */
13999 			{
14000 				dividend = REG_D[(word2 >> 12) & 7];
14001 				if(BIT_B(word2))	   /* signed */
14002 				{
14003 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
14004 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
14005 				}
14006 				else					/* unsigned */
14007 				{
14008 					quotient = dividend / divisor;
14009 					remainder = dividend % divisor;
14010 				}
14011 			}
14012 
14013 			REG_D[word2 & 7] = remainder;
14014 			REG_D[(word2 >> 12) & 7] = quotient;
14015 
14016 			FLAG_N = NFLAG_32(quotient);
14017 			FLAG_Z = quotient;
14018 			FLAG_V = VFLAG_CLEAR;
14019 			FLAG_C = CFLAG_CLEAR;
14020 			return;
14021 		}
14022 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
14023 		return;
14024 	}
14025 	m68ki_exception_illegal();
14026 
14027 #else
14028 
14029 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
14030 	{
14031 		uint word2 = OPER_I_16();
14032 		uint divisor = OPER_AY_PD_32();
14033 		uint dividend_hi = REG_D[word2 & 7];
14034 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
14035 		uint quotient = 0;
14036 		uint remainder = 0;
14037 		uint dividend_neg = 0;
14038 		uint divisor_neg = 0;
14039 		sint i;
14040 		uint overflow;
14041 
14042 		if(divisor != 0)
14043 		{
14044 			/* quad / long : long quotient, long remainder */
14045 			if(BIT_A(word2))
14046 			{
14047 				if(BIT_B(word2))	   /* signed */
14048 				{
14049 					/* special case in signed divide */
14050 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
14051 					{
14052 						REG_D[word2 & 7] = 0;
14053 						REG_D[(word2 >> 12) & 7] = 0x80000000;
14054 
14055 						FLAG_N = NFLAG_SET;
14056 						FLAG_Z = ZFLAG_CLEAR;
14057 						FLAG_V = VFLAG_CLEAR;
14058 						FLAG_C = CFLAG_CLEAR;
14059 						return;
14060 					}
14061 					if(GET_MSB_32(dividend_hi))
14062 					{
14063 						dividend_neg = 1;
14064 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
14065 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
14066 					}
14067 					if(GET_MSB_32(divisor))
14068 					{
14069 						divisor_neg = 1;
14070 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
14071 
14072 					}
14073 				}
14074 
14075 				/* if the upper long is greater than the divisor, we're overflowing. */
14076 				if(dividend_hi >= divisor)
14077 				{
14078 					FLAG_V = VFLAG_SET;
14079 					return;
14080 				}
14081 
14082 				for(i = 31; i >= 0; i--)
14083 				{
14084 					quotient <<= 1;
14085 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
14086 					if(remainder >= divisor)
14087 					{
14088 						remainder -= divisor;
14089 						quotient++;
14090 					}
14091 				}
14092 				for(i = 31; i >= 0; i--)
14093 				{
14094 					quotient <<= 1;
14095 					overflow = GET_MSB_32(remainder);
14096 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
14097 					if(remainder >= divisor || overflow)
14098 					{
14099 						remainder -= divisor;
14100 						quotient++;
14101 					}
14102 				}
14103 
14104 				if(BIT_B(word2))	   /* signed */
14105 				{
14106 					if(quotient > 0x7fffffff)
14107 					{
14108 						FLAG_V = VFLAG_SET;
14109 						return;
14110 					}
14111 					if(dividend_neg)
14112 					{
14113 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
14114 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
14115 					}
14116 					if(divisor_neg)
14117 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
14118 				}
14119 
14120 				REG_D[word2 & 7] = remainder;
14121 				REG_D[(word2 >> 12) & 7] = quotient;
14122 
14123 				FLAG_N = NFLAG_32(quotient);
14124 				FLAG_Z = quotient;
14125 				FLAG_V = VFLAG_CLEAR;
14126 				FLAG_C = CFLAG_CLEAR;
14127 				return;
14128 			}
14129 
14130 			/* long / long: long quotient, maybe long remainder */
14131 			if(BIT_B(word2))	   /* signed */
14132 			{
14133 				/* Special case in divide */
14134 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
14135 				{
14136 					FLAG_N = NFLAG_SET;
14137 					FLAG_Z = ZFLAG_CLEAR;
14138 					FLAG_V = VFLAG_CLEAR;
14139 					FLAG_C = CFLAG_CLEAR;
14140 					REG_D[(word2 >> 12) & 7] = 0x80000000;
14141 					REG_D[word2 & 7] = 0;
14142 					return;
14143 				}
14144 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
14145 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
14146 			}
14147 			else
14148 			{
14149 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
14150 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
14151 			}
14152 
14153 			FLAG_N = NFLAG_32(quotient);
14154 			FLAG_Z = quotient;
14155 			FLAG_V = VFLAG_CLEAR;
14156 			FLAG_C = CFLAG_CLEAR;
14157 			return;
14158 		}
14159 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
14160 		return;
14161 	}
14162 	m68ki_exception_illegal();
14163 
14164 #endif
14165 }
14166 
14167 
m68k_op_divl_32_di(void)14168 static void m68k_op_divl_32_di(void)
14169 {
14170 #if M68K_USE_64_BIT
14171 
14172 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
14173 	{
14174 		uint word2 = OPER_I_16();
14175 		uint64 divisor = OPER_AY_DI_32();
14176 		uint64 dividend  = 0;
14177 		uint64 quotient  = 0;
14178 		uint64 remainder = 0;
14179 
14180 		if(divisor != 0)
14181 		{
14182 			if(BIT_A(word2))	/* 64 bit */
14183 			{
14184 				dividend = REG_D[word2 & 7];
14185 				dividend <<= 32;
14186 				dividend |= REG_D[(word2 >> 12) & 7];
14187 
14188 				if(BIT_B(word2))	   /* signed */
14189 				{
14190 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
14191 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
14192 					if((sint64)quotient != (sint64)((sint32)quotient))
14193 					{
14194 						FLAG_V = VFLAG_SET;
14195 						return;
14196 					}
14197 				}
14198 				else					/* unsigned */
14199 				{
14200 					quotient = dividend / divisor;
14201 					if(quotient > 0xffffffff)
14202 					{
14203 						FLAG_V = VFLAG_SET;
14204 						return;
14205 					}
14206 					remainder = dividend % divisor;
14207 				}
14208 			}
14209 			else	/* 32 bit */
14210 			{
14211 				dividend = REG_D[(word2 >> 12) & 7];
14212 				if(BIT_B(word2))	   /* signed */
14213 				{
14214 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
14215 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
14216 				}
14217 				else					/* unsigned */
14218 				{
14219 					quotient = dividend / divisor;
14220 					remainder = dividend % divisor;
14221 				}
14222 			}
14223 
14224 			REG_D[word2 & 7] = remainder;
14225 			REG_D[(word2 >> 12) & 7] = quotient;
14226 
14227 			FLAG_N = NFLAG_32(quotient);
14228 			FLAG_Z = quotient;
14229 			FLAG_V = VFLAG_CLEAR;
14230 			FLAG_C = CFLAG_CLEAR;
14231 			return;
14232 		}
14233 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
14234 		return;
14235 	}
14236 	m68ki_exception_illegal();
14237 
14238 #else
14239 
14240 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
14241 	{
14242 		uint word2 = OPER_I_16();
14243 		uint divisor = OPER_AY_DI_32();
14244 		uint dividend_hi = REG_D[word2 & 7];
14245 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
14246 		uint quotient = 0;
14247 		uint remainder = 0;
14248 		uint dividend_neg = 0;
14249 		uint divisor_neg = 0;
14250 		sint i;
14251 		uint overflow;
14252 
14253 		if(divisor != 0)
14254 		{
14255 			/* quad / long : long quotient, long remainder */
14256 			if(BIT_A(word2))
14257 			{
14258 				if(BIT_B(word2))	   /* signed */
14259 				{
14260 					/* special case in signed divide */
14261 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
14262 					{
14263 						REG_D[word2 & 7] = 0;
14264 						REG_D[(word2 >> 12) & 7] = 0x80000000;
14265 
14266 						FLAG_N = NFLAG_SET;
14267 						FLAG_Z = ZFLAG_CLEAR;
14268 						FLAG_V = VFLAG_CLEAR;
14269 						FLAG_C = CFLAG_CLEAR;
14270 						return;
14271 					}
14272 					if(GET_MSB_32(dividend_hi))
14273 					{
14274 						dividend_neg = 1;
14275 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
14276 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
14277 					}
14278 					if(GET_MSB_32(divisor))
14279 					{
14280 						divisor_neg = 1;
14281 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
14282 
14283 					}
14284 				}
14285 
14286 				/* if the upper long is greater than the divisor, we're overflowing. */
14287 				if(dividend_hi >= divisor)
14288 				{
14289 					FLAG_V = VFLAG_SET;
14290 					return;
14291 				}
14292 
14293 				for(i = 31; i >= 0; i--)
14294 				{
14295 					quotient <<= 1;
14296 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
14297 					if(remainder >= divisor)
14298 					{
14299 						remainder -= divisor;
14300 						quotient++;
14301 					}
14302 				}
14303 				for(i = 31; i >= 0; i--)
14304 				{
14305 					quotient <<= 1;
14306 					overflow = GET_MSB_32(remainder);
14307 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
14308 					if(remainder >= divisor || overflow)
14309 					{
14310 						remainder -= divisor;
14311 						quotient++;
14312 					}
14313 				}
14314 
14315 				if(BIT_B(word2))	   /* signed */
14316 				{
14317 					if(quotient > 0x7fffffff)
14318 					{
14319 						FLAG_V = VFLAG_SET;
14320 						return;
14321 					}
14322 					if(dividend_neg)
14323 					{
14324 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
14325 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
14326 					}
14327 					if(divisor_neg)
14328 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
14329 				}
14330 
14331 				REG_D[word2 & 7] = remainder;
14332 				REG_D[(word2 >> 12) & 7] = quotient;
14333 
14334 				FLAG_N = NFLAG_32(quotient);
14335 				FLAG_Z = quotient;
14336 				FLAG_V = VFLAG_CLEAR;
14337 				FLAG_C = CFLAG_CLEAR;
14338 				return;
14339 			}
14340 
14341 			/* long / long: long quotient, maybe long remainder */
14342 			if(BIT_B(word2))	   /* signed */
14343 			{
14344 				/* Special case in divide */
14345 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
14346 				{
14347 					FLAG_N = NFLAG_SET;
14348 					FLAG_Z = ZFLAG_CLEAR;
14349 					FLAG_V = VFLAG_CLEAR;
14350 					FLAG_C = CFLAG_CLEAR;
14351 					REG_D[(word2 >> 12) & 7] = 0x80000000;
14352 					REG_D[word2 & 7] = 0;
14353 					return;
14354 				}
14355 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
14356 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
14357 			}
14358 			else
14359 			{
14360 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
14361 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
14362 			}
14363 
14364 			FLAG_N = NFLAG_32(quotient);
14365 			FLAG_Z = quotient;
14366 			FLAG_V = VFLAG_CLEAR;
14367 			FLAG_C = CFLAG_CLEAR;
14368 			return;
14369 		}
14370 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
14371 		return;
14372 	}
14373 	m68ki_exception_illegal();
14374 
14375 #endif
14376 }
14377 
14378 
m68k_op_divl_32_ix(void)14379 static void m68k_op_divl_32_ix(void)
14380 {
14381 #if M68K_USE_64_BIT
14382 
14383 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
14384 	{
14385 		uint word2 = OPER_I_16();
14386 		uint64 divisor = OPER_AY_IX_32();
14387 		uint64 dividend  = 0;
14388 		uint64 quotient  = 0;
14389 		uint64 remainder = 0;
14390 
14391 		if(divisor != 0)
14392 		{
14393 			if(BIT_A(word2))	/* 64 bit */
14394 			{
14395 				dividend = REG_D[word2 & 7];
14396 				dividend <<= 32;
14397 				dividend |= REG_D[(word2 >> 12) & 7];
14398 
14399 				if(BIT_B(word2))	   /* signed */
14400 				{
14401 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
14402 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
14403 					if((sint64)quotient != (sint64)((sint32)quotient))
14404 					{
14405 						FLAG_V = VFLAG_SET;
14406 						return;
14407 					}
14408 				}
14409 				else					/* unsigned */
14410 				{
14411 					quotient = dividend / divisor;
14412 					if(quotient > 0xffffffff)
14413 					{
14414 						FLAG_V = VFLAG_SET;
14415 						return;
14416 					}
14417 					remainder = dividend % divisor;
14418 				}
14419 			}
14420 			else	/* 32 bit */
14421 			{
14422 				dividend = REG_D[(word2 >> 12) & 7];
14423 				if(BIT_B(word2))	   /* signed */
14424 				{
14425 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
14426 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
14427 				}
14428 				else					/* unsigned */
14429 				{
14430 					quotient = dividend / divisor;
14431 					remainder = dividend % divisor;
14432 				}
14433 			}
14434 
14435 			REG_D[word2 & 7] = remainder;
14436 			REG_D[(word2 >> 12) & 7] = quotient;
14437 
14438 			FLAG_N = NFLAG_32(quotient);
14439 			FLAG_Z = quotient;
14440 			FLAG_V = VFLAG_CLEAR;
14441 			FLAG_C = CFLAG_CLEAR;
14442 			return;
14443 		}
14444 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
14445 		return;
14446 	}
14447 	m68ki_exception_illegal();
14448 
14449 #else
14450 
14451 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
14452 	{
14453 		uint word2 = OPER_I_16();
14454 		uint divisor = OPER_AY_IX_32();
14455 		uint dividend_hi = REG_D[word2 & 7];
14456 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
14457 		uint quotient = 0;
14458 		uint remainder = 0;
14459 		uint dividend_neg = 0;
14460 		uint divisor_neg = 0;
14461 		sint i;
14462 		uint overflow;
14463 
14464 		if(divisor != 0)
14465 		{
14466 			/* quad / long : long quotient, long remainder */
14467 			if(BIT_A(word2))
14468 			{
14469 				if(BIT_B(word2))	   /* signed */
14470 				{
14471 					/* special case in signed divide */
14472 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
14473 					{
14474 						REG_D[word2 & 7] = 0;
14475 						REG_D[(word2 >> 12) & 7] = 0x80000000;
14476 
14477 						FLAG_N = NFLAG_SET;
14478 						FLAG_Z = ZFLAG_CLEAR;
14479 						FLAG_V = VFLAG_CLEAR;
14480 						FLAG_C = CFLAG_CLEAR;
14481 						return;
14482 					}
14483 					if(GET_MSB_32(dividend_hi))
14484 					{
14485 						dividend_neg = 1;
14486 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
14487 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
14488 					}
14489 					if(GET_MSB_32(divisor))
14490 					{
14491 						divisor_neg = 1;
14492 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
14493 
14494 					}
14495 				}
14496 
14497 				/* if the upper long is greater than the divisor, we're overflowing. */
14498 				if(dividend_hi >= divisor)
14499 				{
14500 					FLAG_V = VFLAG_SET;
14501 					return;
14502 				}
14503 
14504 				for(i = 31; i >= 0; i--)
14505 				{
14506 					quotient <<= 1;
14507 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
14508 					if(remainder >= divisor)
14509 					{
14510 						remainder -= divisor;
14511 						quotient++;
14512 					}
14513 				}
14514 				for(i = 31; i >= 0; i--)
14515 				{
14516 					quotient <<= 1;
14517 					overflow = GET_MSB_32(remainder);
14518 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
14519 					if(remainder >= divisor || overflow)
14520 					{
14521 						remainder -= divisor;
14522 						quotient++;
14523 					}
14524 				}
14525 
14526 				if(BIT_B(word2))	   /* signed */
14527 				{
14528 					if(quotient > 0x7fffffff)
14529 					{
14530 						FLAG_V = VFLAG_SET;
14531 						return;
14532 					}
14533 					if(dividend_neg)
14534 					{
14535 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
14536 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
14537 					}
14538 					if(divisor_neg)
14539 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
14540 				}
14541 
14542 				REG_D[word2 & 7] = remainder;
14543 				REG_D[(word2 >> 12) & 7] = quotient;
14544 
14545 				FLAG_N = NFLAG_32(quotient);
14546 				FLAG_Z = quotient;
14547 				FLAG_V = VFLAG_CLEAR;
14548 				FLAG_C = CFLAG_CLEAR;
14549 				return;
14550 			}
14551 
14552 			/* long / long: long quotient, maybe long remainder */
14553 			if(BIT_B(word2))	   /* signed */
14554 			{
14555 				/* Special case in divide */
14556 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
14557 				{
14558 					FLAG_N = NFLAG_SET;
14559 					FLAG_Z = ZFLAG_CLEAR;
14560 					FLAG_V = VFLAG_CLEAR;
14561 					FLAG_C = CFLAG_CLEAR;
14562 					REG_D[(word2 >> 12) & 7] = 0x80000000;
14563 					REG_D[word2 & 7] = 0;
14564 					return;
14565 				}
14566 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
14567 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
14568 			}
14569 			else
14570 			{
14571 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
14572 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
14573 			}
14574 
14575 			FLAG_N = NFLAG_32(quotient);
14576 			FLAG_Z = quotient;
14577 			FLAG_V = VFLAG_CLEAR;
14578 			FLAG_C = CFLAG_CLEAR;
14579 			return;
14580 		}
14581 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
14582 		return;
14583 	}
14584 	m68ki_exception_illegal();
14585 
14586 #endif
14587 }
14588 
14589 
m68k_op_divl_32_aw(void)14590 static void m68k_op_divl_32_aw(void)
14591 {
14592 #if M68K_USE_64_BIT
14593 
14594 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
14595 	{
14596 		uint word2 = OPER_I_16();
14597 		uint64 divisor = OPER_AW_32();
14598 		uint64 dividend  = 0;
14599 		uint64 quotient  = 0;
14600 		uint64 remainder = 0;
14601 
14602 		if(divisor != 0)
14603 		{
14604 			if(BIT_A(word2))	/* 64 bit */
14605 			{
14606 				dividend = REG_D[word2 & 7];
14607 				dividend <<= 32;
14608 				dividend |= REG_D[(word2 >> 12) & 7];
14609 
14610 				if(BIT_B(word2))	   /* signed */
14611 				{
14612 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
14613 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
14614 					if((sint64)quotient != (sint64)((sint32)quotient))
14615 					{
14616 						FLAG_V = VFLAG_SET;
14617 						return;
14618 					}
14619 				}
14620 				else					/* unsigned */
14621 				{
14622 					quotient = dividend / divisor;
14623 					if(quotient > 0xffffffff)
14624 					{
14625 						FLAG_V = VFLAG_SET;
14626 						return;
14627 					}
14628 					remainder = dividend % divisor;
14629 				}
14630 			}
14631 			else	/* 32 bit */
14632 			{
14633 				dividend = REG_D[(word2 >> 12) & 7];
14634 				if(BIT_B(word2))	   /* signed */
14635 				{
14636 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
14637 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
14638 				}
14639 				else					/* unsigned */
14640 				{
14641 					quotient = dividend / divisor;
14642 					remainder = dividend % divisor;
14643 				}
14644 			}
14645 
14646 			REG_D[word2 & 7] = remainder;
14647 			REG_D[(word2 >> 12) & 7] = quotient;
14648 
14649 			FLAG_N = NFLAG_32(quotient);
14650 			FLAG_Z = quotient;
14651 			FLAG_V = VFLAG_CLEAR;
14652 			FLAG_C = CFLAG_CLEAR;
14653 			return;
14654 		}
14655 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
14656 		return;
14657 	}
14658 	m68ki_exception_illegal();
14659 
14660 #else
14661 
14662 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
14663 	{
14664 		uint word2 = OPER_I_16();
14665 		uint divisor = OPER_AW_32();
14666 		uint dividend_hi = REG_D[word2 & 7];
14667 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
14668 		uint quotient = 0;
14669 		uint remainder = 0;
14670 		uint dividend_neg = 0;
14671 		uint divisor_neg = 0;
14672 		sint i;
14673 		uint overflow;
14674 
14675 		if(divisor != 0)
14676 		{
14677 			/* quad / long : long quotient, long remainder */
14678 			if(BIT_A(word2))
14679 			{
14680 				if(BIT_B(word2))	   /* signed */
14681 				{
14682 					/* special case in signed divide */
14683 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
14684 					{
14685 						REG_D[word2 & 7] = 0;
14686 						REG_D[(word2 >> 12) & 7] = 0x80000000;
14687 
14688 						FLAG_N = NFLAG_SET;
14689 						FLAG_Z = ZFLAG_CLEAR;
14690 						FLAG_V = VFLAG_CLEAR;
14691 						FLAG_C = CFLAG_CLEAR;
14692 						return;
14693 					}
14694 					if(GET_MSB_32(dividend_hi))
14695 					{
14696 						dividend_neg = 1;
14697 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
14698 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
14699 					}
14700 					if(GET_MSB_32(divisor))
14701 					{
14702 						divisor_neg = 1;
14703 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
14704 
14705 					}
14706 				}
14707 
14708 				/* if the upper long is greater than the divisor, we're overflowing. */
14709 				if(dividend_hi >= divisor)
14710 				{
14711 					FLAG_V = VFLAG_SET;
14712 					return;
14713 				}
14714 
14715 				for(i = 31; i >= 0; i--)
14716 				{
14717 					quotient <<= 1;
14718 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
14719 					if(remainder >= divisor)
14720 					{
14721 						remainder -= divisor;
14722 						quotient++;
14723 					}
14724 				}
14725 				for(i = 31; i >= 0; i--)
14726 				{
14727 					quotient <<= 1;
14728 					overflow = GET_MSB_32(remainder);
14729 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
14730 					if(remainder >= divisor || overflow)
14731 					{
14732 						remainder -= divisor;
14733 						quotient++;
14734 					}
14735 				}
14736 
14737 				if(BIT_B(word2))	   /* signed */
14738 				{
14739 					if(quotient > 0x7fffffff)
14740 					{
14741 						FLAG_V = VFLAG_SET;
14742 						return;
14743 					}
14744 					if(dividend_neg)
14745 					{
14746 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
14747 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
14748 					}
14749 					if(divisor_neg)
14750 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
14751 				}
14752 
14753 				REG_D[word2 & 7] = remainder;
14754 				REG_D[(word2 >> 12) & 7] = quotient;
14755 
14756 				FLAG_N = NFLAG_32(quotient);
14757 				FLAG_Z = quotient;
14758 				FLAG_V = VFLAG_CLEAR;
14759 				FLAG_C = CFLAG_CLEAR;
14760 				return;
14761 			}
14762 
14763 			/* long / long: long quotient, maybe long remainder */
14764 			if(BIT_B(word2))	   /* signed */
14765 			{
14766 				/* Special case in divide */
14767 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
14768 				{
14769 					FLAG_N = NFLAG_SET;
14770 					FLAG_Z = ZFLAG_CLEAR;
14771 					FLAG_V = VFLAG_CLEAR;
14772 					FLAG_C = CFLAG_CLEAR;
14773 					REG_D[(word2 >> 12) & 7] = 0x80000000;
14774 					REG_D[word2 & 7] = 0;
14775 					return;
14776 				}
14777 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
14778 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
14779 			}
14780 			else
14781 			{
14782 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
14783 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
14784 			}
14785 
14786 			FLAG_N = NFLAG_32(quotient);
14787 			FLAG_Z = quotient;
14788 			FLAG_V = VFLAG_CLEAR;
14789 			FLAG_C = CFLAG_CLEAR;
14790 			return;
14791 		}
14792 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
14793 		return;
14794 	}
14795 	m68ki_exception_illegal();
14796 
14797 #endif
14798 }
14799 
14800 
m68k_op_divl_32_al(void)14801 static void m68k_op_divl_32_al(void)
14802 {
14803 #if M68K_USE_64_BIT
14804 
14805 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
14806 	{
14807 		uint word2 = OPER_I_16();
14808 		uint64 divisor = OPER_AL_32();
14809 		uint64 dividend  = 0;
14810 		uint64 quotient  = 0;
14811 		uint64 remainder = 0;
14812 
14813 		if(divisor != 0)
14814 		{
14815 			if(BIT_A(word2))	/* 64 bit */
14816 			{
14817 				dividend = REG_D[word2 & 7];
14818 				dividend <<= 32;
14819 				dividend |= REG_D[(word2 >> 12) & 7];
14820 
14821 				if(BIT_B(word2))	   /* signed */
14822 				{
14823 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
14824 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
14825 					if((sint64)quotient != (sint64)((sint32)quotient))
14826 					{
14827 						FLAG_V = VFLAG_SET;
14828 						return;
14829 					}
14830 				}
14831 				else					/* unsigned */
14832 				{
14833 					quotient = dividend / divisor;
14834 					if(quotient > 0xffffffff)
14835 					{
14836 						FLAG_V = VFLAG_SET;
14837 						return;
14838 					}
14839 					remainder = dividend % divisor;
14840 				}
14841 			}
14842 			else	/* 32 bit */
14843 			{
14844 				dividend = REG_D[(word2 >> 12) & 7];
14845 				if(BIT_B(word2))	   /* signed */
14846 				{
14847 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
14848 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
14849 				}
14850 				else					/* unsigned */
14851 				{
14852 					quotient = dividend / divisor;
14853 					remainder = dividend % divisor;
14854 				}
14855 			}
14856 
14857 			REG_D[word2 & 7] = remainder;
14858 			REG_D[(word2 >> 12) & 7] = quotient;
14859 
14860 			FLAG_N = NFLAG_32(quotient);
14861 			FLAG_Z = quotient;
14862 			FLAG_V = VFLAG_CLEAR;
14863 			FLAG_C = CFLAG_CLEAR;
14864 			return;
14865 		}
14866 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
14867 		return;
14868 	}
14869 	m68ki_exception_illegal();
14870 
14871 #else
14872 
14873 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
14874 	{
14875 		uint word2 = OPER_I_16();
14876 		uint divisor = OPER_AL_32();
14877 		uint dividend_hi = REG_D[word2 & 7];
14878 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
14879 		uint quotient = 0;
14880 		uint remainder = 0;
14881 		uint dividend_neg = 0;
14882 		uint divisor_neg = 0;
14883 		sint i;
14884 		uint overflow;
14885 
14886 		if(divisor != 0)
14887 		{
14888 			/* quad / long : long quotient, long remainder */
14889 			if(BIT_A(word2))
14890 			{
14891 				if(BIT_B(word2))	   /* signed */
14892 				{
14893 					/* special case in signed divide */
14894 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
14895 					{
14896 						REG_D[word2 & 7] = 0;
14897 						REG_D[(word2 >> 12) & 7] = 0x80000000;
14898 
14899 						FLAG_N = NFLAG_SET;
14900 						FLAG_Z = ZFLAG_CLEAR;
14901 						FLAG_V = VFLAG_CLEAR;
14902 						FLAG_C = CFLAG_CLEAR;
14903 						return;
14904 					}
14905 					if(GET_MSB_32(dividend_hi))
14906 					{
14907 						dividend_neg = 1;
14908 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
14909 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
14910 					}
14911 					if(GET_MSB_32(divisor))
14912 					{
14913 						divisor_neg = 1;
14914 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
14915 
14916 					}
14917 				}
14918 
14919 				/* if the upper long is greater than the divisor, we're overflowing. */
14920 				if(dividend_hi >= divisor)
14921 				{
14922 					FLAG_V = VFLAG_SET;
14923 					return;
14924 				}
14925 
14926 				for(i = 31; i >= 0; i--)
14927 				{
14928 					quotient <<= 1;
14929 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
14930 					if(remainder >= divisor)
14931 					{
14932 						remainder -= divisor;
14933 						quotient++;
14934 					}
14935 				}
14936 				for(i = 31; i >= 0; i--)
14937 				{
14938 					quotient <<= 1;
14939 					overflow = GET_MSB_32(remainder);
14940 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
14941 					if(remainder >= divisor || overflow)
14942 					{
14943 						remainder -= divisor;
14944 						quotient++;
14945 					}
14946 				}
14947 
14948 				if(BIT_B(word2))	   /* signed */
14949 				{
14950 					if(quotient > 0x7fffffff)
14951 					{
14952 						FLAG_V = VFLAG_SET;
14953 						return;
14954 					}
14955 					if(dividend_neg)
14956 					{
14957 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
14958 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
14959 					}
14960 					if(divisor_neg)
14961 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
14962 				}
14963 
14964 				REG_D[word2 & 7] = remainder;
14965 				REG_D[(word2 >> 12) & 7] = quotient;
14966 
14967 				FLAG_N = NFLAG_32(quotient);
14968 				FLAG_Z = quotient;
14969 				FLAG_V = VFLAG_CLEAR;
14970 				FLAG_C = CFLAG_CLEAR;
14971 				return;
14972 			}
14973 
14974 			/* long / long: long quotient, maybe long remainder */
14975 			if(BIT_B(word2))	   /* signed */
14976 			{
14977 				/* Special case in divide */
14978 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
14979 				{
14980 					FLAG_N = NFLAG_SET;
14981 					FLAG_Z = ZFLAG_CLEAR;
14982 					FLAG_V = VFLAG_CLEAR;
14983 					FLAG_C = CFLAG_CLEAR;
14984 					REG_D[(word2 >> 12) & 7] = 0x80000000;
14985 					REG_D[word2 & 7] = 0;
14986 					return;
14987 				}
14988 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
14989 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
14990 			}
14991 			else
14992 			{
14993 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
14994 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
14995 			}
14996 
14997 			FLAG_N = NFLAG_32(quotient);
14998 			FLAG_Z = quotient;
14999 			FLAG_V = VFLAG_CLEAR;
15000 			FLAG_C = CFLAG_CLEAR;
15001 			return;
15002 		}
15003 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
15004 		return;
15005 	}
15006 	m68ki_exception_illegal();
15007 
15008 #endif
15009 }
15010 
15011 
m68k_op_divl_32_pcdi(void)15012 static void m68k_op_divl_32_pcdi(void)
15013 {
15014 #if M68K_USE_64_BIT
15015 
15016 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
15017 	{
15018 		uint word2 = OPER_I_16();
15019 		uint64 divisor = OPER_PCDI_32();
15020 		uint64 dividend  = 0;
15021 		uint64 quotient  = 0;
15022 		uint64 remainder = 0;
15023 
15024 		if(divisor != 0)
15025 		{
15026 			if(BIT_A(word2))	/* 64 bit */
15027 			{
15028 				dividend = REG_D[word2 & 7];
15029 				dividend <<= 32;
15030 				dividend |= REG_D[(word2 >> 12) & 7];
15031 
15032 				if(BIT_B(word2))	   /* signed */
15033 				{
15034 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
15035 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
15036 					if((sint64)quotient != (sint64)((sint32)quotient))
15037 					{
15038 						FLAG_V = VFLAG_SET;
15039 						return;
15040 					}
15041 				}
15042 				else					/* unsigned */
15043 				{
15044 					quotient = dividend / divisor;
15045 					if(quotient > 0xffffffff)
15046 					{
15047 						FLAG_V = VFLAG_SET;
15048 						return;
15049 					}
15050 					remainder = dividend % divisor;
15051 				}
15052 			}
15053 			else	/* 32 bit */
15054 			{
15055 				dividend = REG_D[(word2 >> 12) & 7];
15056 				if(BIT_B(word2))	   /* signed */
15057 				{
15058 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
15059 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
15060 				}
15061 				else					/* unsigned */
15062 				{
15063 					quotient = dividend / divisor;
15064 					remainder = dividend % divisor;
15065 				}
15066 			}
15067 
15068 			REG_D[word2 & 7] = remainder;
15069 			REG_D[(word2 >> 12) & 7] = quotient;
15070 
15071 			FLAG_N = NFLAG_32(quotient);
15072 			FLAG_Z = quotient;
15073 			FLAG_V = VFLAG_CLEAR;
15074 			FLAG_C = CFLAG_CLEAR;
15075 			return;
15076 		}
15077 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
15078 		return;
15079 	}
15080 	m68ki_exception_illegal();
15081 
15082 #else
15083 
15084 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
15085 	{
15086 		uint word2 = OPER_I_16();
15087 		uint divisor = OPER_PCDI_32();
15088 		uint dividend_hi = REG_D[word2 & 7];
15089 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
15090 		uint quotient = 0;
15091 		uint remainder = 0;
15092 		uint dividend_neg = 0;
15093 		uint divisor_neg = 0;
15094 		sint i;
15095 		uint overflow;
15096 
15097 		if(divisor != 0)
15098 		{
15099 			/* quad / long : long quotient, long remainder */
15100 			if(BIT_A(word2))
15101 			{
15102 				if(BIT_B(word2))	   /* signed */
15103 				{
15104 					/* special case in signed divide */
15105 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
15106 					{
15107 						REG_D[word2 & 7] = 0;
15108 						REG_D[(word2 >> 12) & 7] = 0x80000000;
15109 
15110 						FLAG_N = NFLAG_SET;
15111 						FLAG_Z = ZFLAG_CLEAR;
15112 						FLAG_V = VFLAG_CLEAR;
15113 						FLAG_C = CFLAG_CLEAR;
15114 						return;
15115 					}
15116 					if(GET_MSB_32(dividend_hi))
15117 					{
15118 						dividend_neg = 1;
15119 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
15120 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
15121 					}
15122 					if(GET_MSB_32(divisor))
15123 					{
15124 						divisor_neg = 1;
15125 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
15126 
15127 					}
15128 				}
15129 
15130 				/* if the upper long is greater than the divisor, we're overflowing. */
15131 				if(dividend_hi >= divisor)
15132 				{
15133 					FLAG_V = VFLAG_SET;
15134 					return;
15135 				}
15136 
15137 				for(i = 31; i >= 0; i--)
15138 				{
15139 					quotient <<= 1;
15140 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
15141 					if(remainder >= divisor)
15142 					{
15143 						remainder -= divisor;
15144 						quotient++;
15145 					}
15146 				}
15147 				for(i = 31; i >= 0; i--)
15148 				{
15149 					quotient <<= 1;
15150 					overflow = GET_MSB_32(remainder);
15151 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
15152 					if(remainder >= divisor || overflow)
15153 					{
15154 						remainder -= divisor;
15155 						quotient++;
15156 					}
15157 				}
15158 
15159 				if(BIT_B(word2))	   /* signed */
15160 				{
15161 					if(quotient > 0x7fffffff)
15162 					{
15163 						FLAG_V = VFLAG_SET;
15164 						return;
15165 					}
15166 					if(dividend_neg)
15167 					{
15168 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
15169 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
15170 					}
15171 					if(divisor_neg)
15172 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
15173 				}
15174 
15175 				REG_D[word2 & 7] = remainder;
15176 				REG_D[(word2 >> 12) & 7] = quotient;
15177 
15178 				FLAG_N = NFLAG_32(quotient);
15179 				FLAG_Z = quotient;
15180 				FLAG_V = VFLAG_CLEAR;
15181 				FLAG_C = CFLAG_CLEAR;
15182 				return;
15183 			}
15184 
15185 			/* long / long: long quotient, maybe long remainder */
15186 			if(BIT_B(word2))	   /* signed */
15187 			{
15188 				/* Special case in divide */
15189 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
15190 				{
15191 					FLAG_N = NFLAG_SET;
15192 					FLAG_Z = ZFLAG_CLEAR;
15193 					FLAG_V = VFLAG_CLEAR;
15194 					FLAG_C = CFLAG_CLEAR;
15195 					REG_D[(word2 >> 12) & 7] = 0x80000000;
15196 					REG_D[word2 & 7] = 0;
15197 					return;
15198 				}
15199 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
15200 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
15201 			}
15202 			else
15203 			{
15204 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
15205 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
15206 			}
15207 
15208 			FLAG_N = NFLAG_32(quotient);
15209 			FLAG_Z = quotient;
15210 			FLAG_V = VFLAG_CLEAR;
15211 			FLAG_C = CFLAG_CLEAR;
15212 			return;
15213 		}
15214 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
15215 		return;
15216 	}
15217 	m68ki_exception_illegal();
15218 
15219 #endif
15220 }
15221 
15222 
m68k_op_divl_32_pcix(void)15223 static void m68k_op_divl_32_pcix(void)
15224 {
15225 #if M68K_USE_64_BIT
15226 
15227 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
15228 	{
15229 		uint word2 = OPER_I_16();
15230 		uint64 divisor = OPER_PCIX_32();
15231 		uint64 dividend  = 0;
15232 		uint64 quotient  = 0;
15233 		uint64 remainder = 0;
15234 
15235 		if(divisor != 0)
15236 		{
15237 			if(BIT_A(word2))	/* 64 bit */
15238 			{
15239 				dividend = REG_D[word2 & 7];
15240 				dividend <<= 32;
15241 				dividend |= REG_D[(word2 >> 12) & 7];
15242 
15243 				if(BIT_B(word2))	   /* signed */
15244 				{
15245 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
15246 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
15247 					if((sint64)quotient != (sint64)((sint32)quotient))
15248 					{
15249 						FLAG_V = VFLAG_SET;
15250 						return;
15251 					}
15252 				}
15253 				else					/* unsigned */
15254 				{
15255 					quotient = dividend / divisor;
15256 					if(quotient > 0xffffffff)
15257 					{
15258 						FLAG_V = VFLAG_SET;
15259 						return;
15260 					}
15261 					remainder = dividend % divisor;
15262 				}
15263 			}
15264 			else	/* 32 bit */
15265 			{
15266 				dividend = REG_D[(word2 >> 12) & 7];
15267 				if(BIT_B(word2))	   /* signed */
15268 				{
15269 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
15270 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
15271 				}
15272 				else					/* unsigned */
15273 				{
15274 					quotient = dividend / divisor;
15275 					remainder = dividend % divisor;
15276 				}
15277 			}
15278 
15279 			REG_D[word2 & 7] = remainder;
15280 			REG_D[(word2 >> 12) & 7] = quotient;
15281 
15282 			FLAG_N = NFLAG_32(quotient);
15283 			FLAG_Z = quotient;
15284 			FLAG_V = VFLAG_CLEAR;
15285 			FLAG_C = CFLAG_CLEAR;
15286 			return;
15287 		}
15288 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
15289 		return;
15290 	}
15291 	m68ki_exception_illegal();
15292 
15293 #else
15294 
15295 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
15296 	{
15297 		uint word2 = OPER_I_16();
15298 		uint divisor = OPER_PCIX_32();
15299 		uint dividend_hi = REG_D[word2 & 7];
15300 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
15301 		uint quotient = 0;
15302 		uint remainder = 0;
15303 		uint dividend_neg = 0;
15304 		uint divisor_neg = 0;
15305 		sint i;
15306 		uint overflow;
15307 
15308 		if(divisor != 0)
15309 		{
15310 			/* quad / long : long quotient, long remainder */
15311 			if(BIT_A(word2))
15312 			{
15313 				if(BIT_B(word2))	   /* signed */
15314 				{
15315 					/* special case in signed divide */
15316 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
15317 					{
15318 						REG_D[word2 & 7] = 0;
15319 						REG_D[(word2 >> 12) & 7] = 0x80000000;
15320 
15321 						FLAG_N = NFLAG_SET;
15322 						FLAG_Z = ZFLAG_CLEAR;
15323 						FLAG_V = VFLAG_CLEAR;
15324 						FLAG_C = CFLAG_CLEAR;
15325 						return;
15326 					}
15327 					if(GET_MSB_32(dividend_hi))
15328 					{
15329 						dividend_neg = 1;
15330 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
15331 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
15332 					}
15333 					if(GET_MSB_32(divisor))
15334 					{
15335 						divisor_neg = 1;
15336 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
15337 
15338 					}
15339 				}
15340 
15341 				/* if the upper long is greater than the divisor, we're overflowing. */
15342 				if(dividend_hi >= divisor)
15343 				{
15344 					FLAG_V = VFLAG_SET;
15345 					return;
15346 				}
15347 
15348 				for(i = 31; i >= 0; i--)
15349 				{
15350 					quotient <<= 1;
15351 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
15352 					if(remainder >= divisor)
15353 					{
15354 						remainder -= divisor;
15355 						quotient++;
15356 					}
15357 				}
15358 				for(i = 31; i >= 0; i--)
15359 				{
15360 					quotient <<= 1;
15361 					overflow = GET_MSB_32(remainder);
15362 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
15363 					if(remainder >= divisor || overflow)
15364 					{
15365 						remainder -= divisor;
15366 						quotient++;
15367 					}
15368 				}
15369 
15370 				if(BIT_B(word2))	   /* signed */
15371 				{
15372 					if(quotient > 0x7fffffff)
15373 					{
15374 						FLAG_V = VFLAG_SET;
15375 						return;
15376 					}
15377 					if(dividend_neg)
15378 					{
15379 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
15380 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
15381 					}
15382 					if(divisor_neg)
15383 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
15384 				}
15385 
15386 				REG_D[word2 & 7] = remainder;
15387 				REG_D[(word2 >> 12) & 7] = quotient;
15388 
15389 				FLAG_N = NFLAG_32(quotient);
15390 				FLAG_Z = quotient;
15391 				FLAG_V = VFLAG_CLEAR;
15392 				FLAG_C = CFLAG_CLEAR;
15393 				return;
15394 			}
15395 
15396 			/* long / long: long quotient, maybe long remainder */
15397 			if(BIT_B(word2))	   /* signed */
15398 			{
15399 				/* Special case in divide */
15400 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
15401 				{
15402 					FLAG_N = NFLAG_SET;
15403 					FLAG_Z = ZFLAG_CLEAR;
15404 					FLAG_V = VFLAG_CLEAR;
15405 					FLAG_C = CFLAG_CLEAR;
15406 					REG_D[(word2 >> 12) & 7] = 0x80000000;
15407 					REG_D[word2 & 7] = 0;
15408 					return;
15409 				}
15410 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
15411 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
15412 			}
15413 			else
15414 			{
15415 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
15416 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
15417 			}
15418 
15419 			FLAG_N = NFLAG_32(quotient);
15420 			FLAG_Z = quotient;
15421 			FLAG_V = VFLAG_CLEAR;
15422 			FLAG_C = CFLAG_CLEAR;
15423 			return;
15424 		}
15425 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
15426 		return;
15427 	}
15428 	m68ki_exception_illegal();
15429 
15430 #endif
15431 }
15432 
15433 
m68k_op_divl_32_i(void)15434 static void m68k_op_divl_32_i(void)
15435 {
15436 #if M68K_USE_64_BIT
15437 
15438 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
15439 	{
15440 		uint word2 = OPER_I_16();
15441 		uint64 divisor = OPER_I_32();
15442 		uint64 dividend  = 0;
15443 		uint64 quotient  = 0;
15444 		uint64 remainder = 0;
15445 
15446 		if(divisor != 0)
15447 		{
15448 			if(BIT_A(word2))	/* 64 bit */
15449 			{
15450 				dividend = REG_D[word2 & 7];
15451 				dividend <<= 32;
15452 				dividend |= REG_D[(word2 >> 12) & 7];
15453 
15454 				if(BIT_B(word2))	   /* signed */
15455 				{
15456 					quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
15457 					remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
15458 					if((sint64)quotient != (sint64)((sint32)quotient))
15459 					{
15460 						FLAG_V = VFLAG_SET;
15461 						return;
15462 					}
15463 				}
15464 				else					/* unsigned */
15465 				{
15466 					quotient = dividend / divisor;
15467 					if(quotient > 0xffffffff)
15468 					{
15469 						FLAG_V = VFLAG_SET;
15470 						return;
15471 					}
15472 					remainder = dividend % divisor;
15473 				}
15474 			}
15475 			else	/* 32 bit */
15476 			{
15477 				dividend = REG_D[(word2 >> 12) & 7];
15478 				if(BIT_B(word2))	   /* signed */
15479 				{
15480 					quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
15481 					remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
15482 				}
15483 				else					/* unsigned */
15484 				{
15485 					quotient = dividend / divisor;
15486 					remainder = dividend % divisor;
15487 				}
15488 			}
15489 
15490 			REG_D[word2 & 7] = remainder;
15491 			REG_D[(word2 >> 12) & 7] = quotient;
15492 
15493 			FLAG_N = NFLAG_32(quotient);
15494 			FLAG_Z = quotient;
15495 			FLAG_V = VFLAG_CLEAR;
15496 			FLAG_C = CFLAG_CLEAR;
15497 			return;
15498 		}
15499 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
15500 		return;
15501 	}
15502 	m68ki_exception_illegal();
15503 
15504 #else
15505 
15506 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
15507 	{
15508 		uint word2 = OPER_I_16();
15509 		uint divisor = OPER_I_32();
15510 		uint dividend_hi = REG_D[word2 & 7];
15511 		uint dividend_lo = REG_D[(word2 >> 12) & 7];
15512 		uint quotient = 0;
15513 		uint remainder = 0;
15514 		uint dividend_neg = 0;
15515 		uint divisor_neg = 0;
15516 		sint i;
15517 		uint overflow;
15518 
15519 		if(divisor != 0)
15520 		{
15521 			/* quad / long : long quotient, long remainder */
15522 			if(BIT_A(word2))
15523 			{
15524 				if(BIT_B(word2))	   /* signed */
15525 				{
15526 					/* special case in signed divide */
15527 					if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
15528 					{
15529 						REG_D[word2 & 7] = 0;
15530 						REG_D[(word2 >> 12) & 7] = 0x80000000;
15531 
15532 						FLAG_N = NFLAG_SET;
15533 						FLAG_Z = ZFLAG_CLEAR;
15534 						FLAG_V = VFLAG_CLEAR;
15535 						FLAG_C = CFLAG_CLEAR;
15536 						return;
15537 					}
15538 					if(GET_MSB_32(dividend_hi))
15539 					{
15540 						dividend_neg = 1;
15541 						dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
15542 						dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
15543 					}
15544 					if(GET_MSB_32(divisor))
15545 					{
15546 						divisor_neg = 1;
15547 						divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
15548 
15549 					}
15550 				}
15551 
15552 				/* if the upper long is greater than the divisor, we're overflowing. */
15553 				if(dividend_hi >= divisor)
15554 				{
15555 					FLAG_V = VFLAG_SET;
15556 					return;
15557 				}
15558 
15559 				for(i = 31; i >= 0; i--)
15560 				{
15561 					quotient <<= 1;
15562 					remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
15563 					if(remainder >= divisor)
15564 					{
15565 						remainder -= divisor;
15566 						quotient++;
15567 					}
15568 				}
15569 				for(i = 31; i >= 0; i--)
15570 				{
15571 					quotient <<= 1;
15572 					overflow = GET_MSB_32(remainder);
15573 					remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
15574 					if(remainder >= divisor || overflow)
15575 					{
15576 						remainder -= divisor;
15577 						quotient++;
15578 					}
15579 				}
15580 
15581 				if(BIT_B(word2))	   /* signed */
15582 				{
15583 					if(quotient > 0x7fffffff)
15584 					{
15585 						FLAG_V = VFLAG_SET;
15586 						return;
15587 					}
15588 					if(dividend_neg)
15589 					{
15590 						remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
15591 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
15592 					}
15593 					if(divisor_neg)
15594 						quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
15595 				}
15596 
15597 				REG_D[word2 & 7] = remainder;
15598 				REG_D[(word2 >> 12) & 7] = quotient;
15599 
15600 				FLAG_N = NFLAG_32(quotient);
15601 				FLAG_Z = quotient;
15602 				FLAG_V = VFLAG_CLEAR;
15603 				FLAG_C = CFLAG_CLEAR;
15604 				return;
15605 			}
15606 
15607 			/* long / long: long quotient, maybe long remainder */
15608 			if(BIT_B(word2))	   /* signed */
15609 			{
15610 				/* Special case in divide */
15611 				if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
15612 				{
15613 					FLAG_N = NFLAG_SET;
15614 					FLAG_Z = ZFLAG_CLEAR;
15615 					FLAG_V = VFLAG_CLEAR;
15616 					FLAG_C = CFLAG_CLEAR;
15617 					REG_D[(word2 >> 12) & 7] = 0x80000000;
15618 					REG_D[word2 & 7] = 0;
15619 					return;
15620 				}
15621 				REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
15622 				quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
15623 			}
15624 			else
15625 			{
15626 				REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
15627 				quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
15628 			}
15629 
15630 			FLAG_N = NFLAG_32(quotient);
15631 			FLAG_Z = quotient;
15632 			FLAG_V = VFLAG_CLEAR;
15633 			FLAG_C = CFLAG_CLEAR;
15634 			return;
15635 		}
15636 		m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
15637 		return;
15638 	}
15639 	m68ki_exception_illegal();
15640 
15641 #endif
15642 }
15643 
15644 
m68k_op_eor_8_d(void)15645 static void m68k_op_eor_8_d(void)
15646 {
15647 	uint res = MASK_OUT_ABOVE_8(DY ^= MASK_OUT_ABOVE_8(DX));
15648 
15649 	FLAG_N = NFLAG_8(res);
15650 	FLAG_Z = res;
15651 	FLAG_C = CFLAG_CLEAR;
15652 	FLAG_V = VFLAG_CLEAR;
15653 }
15654 
15655 
m68k_op_eor_8_ai(void)15656 static void m68k_op_eor_8_ai(void)
15657 {
15658 	uint ea = EA_AY_AI_8();
15659 	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
15660 
15661 	m68ki_write_8(ea, res);
15662 
15663 	FLAG_N = NFLAG_8(res);
15664 	FLAG_Z = res;
15665 	FLAG_C = CFLAG_CLEAR;
15666 	FLAG_V = VFLAG_CLEAR;
15667 }
15668 
15669 
m68k_op_eor_8_pi(void)15670 static void m68k_op_eor_8_pi(void)
15671 {
15672 	uint ea = EA_AY_PI_8();
15673 	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
15674 
15675 	m68ki_write_8(ea, res);
15676 
15677 	FLAG_N = NFLAG_8(res);
15678 	FLAG_Z = res;
15679 	FLAG_C = CFLAG_CLEAR;
15680 	FLAG_V = VFLAG_CLEAR;
15681 }
15682 
15683 
m68k_op_eor_8_pi7(void)15684 static void m68k_op_eor_8_pi7(void)
15685 {
15686 	uint ea = EA_A7_PI_8();
15687 	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
15688 
15689 	m68ki_write_8(ea, res);
15690 
15691 	FLAG_N = NFLAG_8(res);
15692 	FLAG_Z = res;
15693 	FLAG_C = CFLAG_CLEAR;
15694 	FLAG_V = VFLAG_CLEAR;
15695 }
15696 
15697 
m68k_op_eor_8_pd(void)15698 static void m68k_op_eor_8_pd(void)
15699 {
15700 	uint ea = EA_AY_PD_8();
15701 	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
15702 
15703 	m68ki_write_8(ea, res);
15704 
15705 	FLAG_N = NFLAG_8(res);
15706 	FLAG_Z = res;
15707 	FLAG_C = CFLAG_CLEAR;
15708 	FLAG_V = VFLAG_CLEAR;
15709 }
15710 
15711 
m68k_op_eor_8_pd7(void)15712 static void m68k_op_eor_8_pd7(void)
15713 {
15714 	uint ea = EA_A7_PD_8();
15715 	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
15716 
15717 	m68ki_write_8(ea, res);
15718 
15719 	FLAG_N = NFLAG_8(res);
15720 	FLAG_Z = res;
15721 	FLAG_C = CFLAG_CLEAR;
15722 	FLAG_V = VFLAG_CLEAR;
15723 }
15724 
15725 
m68k_op_eor_8_di(void)15726 static void m68k_op_eor_8_di(void)
15727 {
15728 	uint ea = EA_AY_DI_8();
15729 	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
15730 
15731 	m68ki_write_8(ea, res);
15732 
15733 	FLAG_N = NFLAG_8(res);
15734 	FLAG_Z = res;
15735 	FLAG_C = CFLAG_CLEAR;
15736 	FLAG_V = VFLAG_CLEAR;
15737 }
15738 
15739 
m68k_op_eor_8_ix(void)15740 static void m68k_op_eor_8_ix(void)
15741 {
15742 	uint ea = EA_AY_IX_8();
15743 	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
15744 
15745 	m68ki_write_8(ea, res);
15746 
15747 	FLAG_N = NFLAG_8(res);
15748 	FLAG_Z = res;
15749 	FLAG_C = CFLAG_CLEAR;
15750 	FLAG_V = VFLAG_CLEAR;
15751 }
15752 
15753 
m68k_op_eor_8_aw(void)15754 static void m68k_op_eor_8_aw(void)
15755 {
15756 	uint ea = EA_AW_8();
15757 	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
15758 
15759 	m68ki_write_8(ea, res);
15760 
15761 	FLAG_N = NFLAG_8(res);
15762 	FLAG_Z = res;
15763 	FLAG_C = CFLAG_CLEAR;
15764 	FLAG_V = VFLAG_CLEAR;
15765 }
15766 
15767 
m68k_op_eor_8_al(void)15768 static void m68k_op_eor_8_al(void)
15769 {
15770 	uint ea = EA_AL_8();
15771 	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
15772 
15773 	m68ki_write_8(ea, res);
15774 
15775 	FLAG_N = NFLAG_8(res);
15776 	FLAG_Z = res;
15777 	FLAG_C = CFLAG_CLEAR;
15778 	FLAG_V = VFLAG_CLEAR;
15779 }
15780 
15781 
m68k_op_eor_16_d(void)15782 static void m68k_op_eor_16_d(void)
15783 {
15784 	uint res = MASK_OUT_ABOVE_16(DY ^= MASK_OUT_ABOVE_16(DX));
15785 
15786 	FLAG_N = NFLAG_16(res);
15787 	FLAG_Z = res;
15788 	FLAG_C = CFLAG_CLEAR;
15789 	FLAG_V = VFLAG_CLEAR;
15790 }
15791 
15792 
m68k_op_eor_16_ai(void)15793 static void m68k_op_eor_16_ai(void)
15794 {
15795 	uint ea = EA_AY_AI_16();
15796 	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
15797 
15798 	m68ki_write_16(ea, res);
15799 
15800 	FLAG_N = NFLAG_16(res);
15801 	FLAG_Z = res;
15802 	FLAG_C = CFLAG_CLEAR;
15803 	FLAG_V = VFLAG_CLEAR;
15804 }
15805 
15806 
m68k_op_eor_16_pi(void)15807 static void m68k_op_eor_16_pi(void)
15808 {
15809 	uint ea = EA_AY_PI_16();
15810 	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
15811 
15812 	m68ki_write_16(ea, res);
15813 
15814 	FLAG_N = NFLAG_16(res);
15815 	FLAG_Z = res;
15816 	FLAG_C = CFLAG_CLEAR;
15817 	FLAG_V = VFLAG_CLEAR;
15818 }
15819 
15820 
m68k_op_eor_16_pd(void)15821 static void m68k_op_eor_16_pd(void)
15822 {
15823 	uint ea = EA_AY_PD_16();
15824 	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
15825 
15826 	m68ki_write_16(ea, res);
15827 
15828 	FLAG_N = NFLAG_16(res);
15829 	FLAG_Z = res;
15830 	FLAG_C = CFLAG_CLEAR;
15831 	FLAG_V = VFLAG_CLEAR;
15832 }
15833 
15834 
m68k_op_eor_16_di(void)15835 static void m68k_op_eor_16_di(void)
15836 {
15837 	uint ea = EA_AY_DI_16();
15838 	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
15839 
15840 	m68ki_write_16(ea, res);
15841 
15842 	FLAG_N = NFLAG_16(res);
15843 	FLAG_Z = res;
15844 	FLAG_C = CFLAG_CLEAR;
15845 	FLAG_V = VFLAG_CLEAR;
15846 }
15847 
15848 
m68k_op_eor_16_ix(void)15849 static void m68k_op_eor_16_ix(void)
15850 {
15851 	uint ea = EA_AY_IX_16();
15852 	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
15853 
15854 	m68ki_write_16(ea, res);
15855 
15856 	FLAG_N = NFLAG_16(res);
15857 	FLAG_Z = res;
15858 	FLAG_C = CFLAG_CLEAR;
15859 	FLAG_V = VFLAG_CLEAR;
15860 }
15861 
15862 
m68k_op_eor_16_aw(void)15863 static void m68k_op_eor_16_aw(void)
15864 {
15865 	uint ea = EA_AW_16();
15866 	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
15867 
15868 	m68ki_write_16(ea, res);
15869 
15870 	FLAG_N = NFLAG_16(res);
15871 	FLAG_Z = res;
15872 	FLAG_C = CFLAG_CLEAR;
15873 	FLAG_V = VFLAG_CLEAR;
15874 }
15875 
15876 
m68k_op_eor_16_al(void)15877 static void m68k_op_eor_16_al(void)
15878 {
15879 	uint ea = EA_AL_16();
15880 	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
15881 
15882 	m68ki_write_16(ea, res);
15883 
15884 	FLAG_N = NFLAG_16(res);
15885 	FLAG_Z = res;
15886 	FLAG_C = CFLAG_CLEAR;
15887 	FLAG_V = VFLAG_CLEAR;
15888 }
15889 
15890 
m68k_op_eor_32_d(void)15891 static void m68k_op_eor_32_d(void)
15892 {
15893 	uint res = DY ^= DX;
15894 
15895 	FLAG_N = NFLAG_32(res);
15896 	FLAG_Z = res;
15897 	FLAG_C = CFLAG_CLEAR;
15898 	FLAG_V = VFLAG_CLEAR;
15899 }
15900 
15901 
m68k_op_eor_32_ai(void)15902 static void m68k_op_eor_32_ai(void)
15903 {
15904 	uint ea = EA_AY_AI_32();
15905 	uint res = DX ^ m68ki_read_32(ea);
15906 
15907 	m68ki_write_32(ea, res);
15908 
15909 	FLAG_N = NFLAG_32(res);
15910 	FLAG_Z = res;
15911 	FLAG_C = CFLAG_CLEAR;
15912 	FLAG_V = VFLAG_CLEAR;
15913 }
15914 
15915 
m68k_op_eor_32_pi(void)15916 static void m68k_op_eor_32_pi(void)
15917 {
15918 	uint ea = EA_AY_PI_32();
15919 	uint res = DX ^ m68ki_read_32(ea);
15920 
15921 	m68ki_write_32(ea, res);
15922 
15923 	FLAG_N = NFLAG_32(res);
15924 	FLAG_Z = res;
15925 	FLAG_C = CFLAG_CLEAR;
15926 	FLAG_V = VFLAG_CLEAR;
15927 }
15928 
15929 
m68k_op_eor_32_pd(void)15930 static void m68k_op_eor_32_pd(void)
15931 {
15932 	uint ea = EA_AY_PD_32();
15933 	uint res = DX ^ m68ki_read_32(ea);
15934 
15935 	m68ki_write_32(ea, res);
15936 
15937 	FLAG_N = NFLAG_32(res);
15938 	FLAG_Z = res;
15939 	FLAG_C = CFLAG_CLEAR;
15940 	FLAG_V = VFLAG_CLEAR;
15941 }
15942 
15943 
m68k_op_eor_32_di(void)15944 static void m68k_op_eor_32_di(void)
15945 {
15946 	uint ea = EA_AY_DI_32();
15947 	uint res = DX ^ m68ki_read_32(ea);
15948 
15949 	m68ki_write_32(ea, res);
15950 
15951 	FLAG_N = NFLAG_32(res);
15952 	FLAG_Z = res;
15953 	FLAG_C = CFLAG_CLEAR;
15954 	FLAG_V = VFLAG_CLEAR;
15955 }
15956 
15957 
m68k_op_eor_32_ix(void)15958 static void m68k_op_eor_32_ix(void)
15959 {
15960 	uint ea = EA_AY_IX_32();
15961 	uint res = DX ^ m68ki_read_32(ea);
15962 
15963 	m68ki_write_32(ea, res);
15964 
15965 	FLAG_N = NFLAG_32(res);
15966 	FLAG_Z = res;
15967 	FLAG_C = CFLAG_CLEAR;
15968 	FLAG_V = VFLAG_CLEAR;
15969 }
15970 
15971 
m68k_op_eor_32_aw(void)15972 static void m68k_op_eor_32_aw(void)
15973 {
15974 	uint ea = EA_AW_32();
15975 	uint res = DX ^ m68ki_read_32(ea);
15976 
15977 	m68ki_write_32(ea, res);
15978 
15979 	FLAG_N = NFLAG_32(res);
15980 	FLAG_Z = res;
15981 	FLAG_C = CFLAG_CLEAR;
15982 	FLAG_V = VFLAG_CLEAR;
15983 }
15984 
15985 
m68k_op_eor_32_al(void)15986 static void m68k_op_eor_32_al(void)
15987 {
15988 	uint ea = EA_AL_32();
15989 	uint res = DX ^ m68ki_read_32(ea);
15990 
15991 	m68ki_write_32(ea, res);
15992 
15993 	FLAG_N = NFLAG_32(res);
15994 	FLAG_Z = res;
15995 	FLAG_C = CFLAG_CLEAR;
15996 	FLAG_V = VFLAG_CLEAR;
15997 }
15998 
15999 
m68k_op_eori_8_d(void)16000 static void m68k_op_eori_8_d(void)
16001 {
16002 	uint res = MASK_OUT_ABOVE_8(DY ^= OPER_I_8());
16003 
16004 	FLAG_N = NFLAG_8(res);
16005 	FLAG_Z = res;
16006 	FLAG_C = CFLAG_CLEAR;
16007 	FLAG_V = VFLAG_CLEAR;
16008 }
16009 
16010 
m68k_op_eori_8_ai(void)16011 static void m68k_op_eori_8_ai(void)
16012 {
16013 	uint src = OPER_I_8();
16014 	uint ea = EA_AY_AI_8();
16015 	uint res = src ^ m68ki_read_8(ea);
16016 
16017 	m68ki_write_8(ea, res);
16018 
16019 	FLAG_N = NFLAG_8(res);
16020 	FLAG_Z = res;
16021 	FLAG_C = CFLAG_CLEAR;
16022 	FLAG_V = VFLAG_CLEAR;
16023 }
16024 
16025 
m68k_op_eori_8_pi(void)16026 static void m68k_op_eori_8_pi(void)
16027 {
16028 	uint src = OPER_I_8();
16029 	uint ea = EA_AY_PI_8();
16030 	uint res = src ^ m68ki_read_8(ea);
16031 
16032 	m68ki_write_8(ea, res);
16033 
16034 	FLAG_N = NFLAG_8(res);
16035 	FLAG_Z = res;
16036 	FLAG_C = CFLAG_CLEAR;
16037 	FLAG_V = VFLAG_CLEAR;
16038 }
16039 
16040 
m68k_op_eori_8_pi7(void)16041 static void m68k_op_eori_8_pi7(void)
16042 {
16043 	uint src = OPER_I_8();
16044 	uint ea = EA_A7_PI_8();
16045 	uint res = src ^ m68ki_read_8(ea);
16046 
16047 	m68ki_write_8(ea, res);
16048 
16049 	FLAG_N = NFLAG_8(res);
16050 	FLAG_Z = res;
16051 	FLAG_C = CFLAG_CLEAR;
16052 	FLAG_V = VFLAG_CLEAR;
16053 }
16054 
16055 
m68k_op_eori_8_pd(void)16056 static void m68k_op_eori_8_pd(void)
16057 {
16058 	uint src = OPER_I_8();
16059 	uint ea = EA_AY_PD_8();
16060 	uint res = src ^ m68ki_read_8(ea);
16061 
16062 	m68ki_write_8(ea, res);
16063 
16064 	FLAG_N = NFLAG_8(res);
16065 	FLAG_Z = res;
16066 	FLAG_C = CFLAG_CLEAR;
16067 	FLAG_V = VFLAG_CLEAR;
16068 }
16069 
16070 
m68k_op_eori_8_pd7(void)16071 static void m68k_op_eori_8_pd7(void)
16072 {
16073 	uint src = OPER_I_8();
16074 	uint ea = EA_A7_PD_8();
16075 	uint res = src ^ m68ki_read_8(ea);
16076 
16077 	m68ki_write_8(ea, res);
16078 
16079 	FLAG_N = NFLAG_8(res);
16080 	FLAG_Z = res;
16081 	FLAG_C = CFLAG_CLEAR;
16082 	FLAG_V = VFLAG_CLEAR;
16083 }
16084 
16085 
m68k_op_eori_8_di(void)16086 static void m68k_op_eori_8_di(void)
16087 {
16088 	uint src = OPER_I_8();
16089 	uint ea = EA_AY_DI_8();
16090 	uint res = src ^ m68ki_read_8(ea);
16091 
16092 	m68ki_write_8(ea, res);
16093 
16094 	FLAG_N = NFLAG_8(res);
16095 	FLAG_Z = res;
16096 	FLAG_C = CFLAG_CLEAR;
16097 	FLAG_V = VFLAG_CLEAR;
16098 }
16099 
16100 
m68k_op_eori_8_ix(void)16101 static void m68k_op_eori_8_ix(void)
16102 {
16103 	uint src = OPER_I_8();
16104 	uint ea = EA_AY_IX_8();
16105 	uint res = src ^ m68ki_read_8(ea);
16106 
16107 	m68ki_write_8(ea, res);
16108 
16109 	FLAG_N = NFLAG_8(res);
16110 	FLAG_Z = res;
16111 	FLAG_C = CFLAG_CLEAR;
16112 	FLAG_V = VFLAG_CLEAR;
16113 }
16114 
16115 
m68k_op_eori_8_aw(void)16116 static void m68k_op_eori_8_aw(void)
16117 {
16118 	uint src = OPER_I_8();
16119 	uint ea = EA_AW_8();
16120 	uint res = src ^ m68ki_read_8(ea);
16121 
16122 	m68ki_write_8(ea, res);
16123 
16124 	FLAG_N = NFLAG_8(res);
16125 	FLAG_Z = res;
16126 	FLAG_C = CFLAG_CLEAR;
16127 	FLAG_V = VFLAG_CLEAR;
16128 }
16129 
16130 
m68k_op_eori_8_al(void)16131 static void m68k_op_eori_8_al(void)
16132 {
16133 	uint src = OPER_I_8();
16134 	uint ea = EA_AL_8();
16135 	uint res = src ^ m68ki_read_8(ea);
16136 
16137 	m68ki_write_8(ea, res);
16138 
16139 	FLAG_N = NFLAG_8(res);
16140 	FLAG_Z = res;
16141 	FLAG_C = CFLAG_CLEAR;
16142 	FLAG_V = VFLAG_CLEAR;
16143 }
16144 
16145 
m68k_op_eori_16_d(void)16146 static void m68k_op_eori_16_d(void)
16147 {
16148 	uint res = MASK_OUT_ABOVE_16(DY ^= OPER_I_16());
16149 
16150 	FLAG_N = NFLAG_16(res);
16151 	FLAG_Z = res;
16152 	FLAG_C = CFLAG_CLEAR;
16153 	FLAG_V = VFLAG_CLEAR;
16154 }
16155 
16156 
m68k_op_eori_16_ai(void)16157 static void m68k_op_eori_16_ai(void)
16158 {
16159 	uint src = OPER_I_16();
16160 	uint ea = EA_AY_AI_16();
16161 	uint res = src ^ m68ki_read_16(ea);
16162 
16163 	m68ki_write_16(ea, res);
16164 
16165 	FLAG_N = NFLAG_16(res);
16166 	FLAG_Z = res;
16167 	FLAG_C = CFLAG_CLEAR;
16168 	FLAG_V = VFLAG_CLEAR;
16169 }
16170 
16171 
m68k_op_eori_16_pi(void)16172 static void m68k_op_eori_16_pi(void)
16173 {
16174 	uint src = OPER_I_16();
16175 	uint ea = EA_AY_PI_16();
16176 	uint res = src ^ m68ki_read_16(ea);
16177 
16178 	m68ki_write_16(ea, res);
16179 
16180 	FLAG_N = NFLAG_16(res);
16181 	FLAG_Z = res;
16182 	FLAG_C = CFLAG_CLEAR;
16183 	FLAG_V = VFLAG_CLEAR;
16184 }
16185 
16186 
m68k_op_eori_16_pd(void)16187 static void m68k_op_eori_16_pd(void)
16188 {
16189 	uint src = OPER_I_16();
16190 	uint ea = EA_AY_PD_16();
16191 	uint res = src ^ m68ki_read_16(ea);
16192 
16193 	m68ki_write_16(ea, res);
16194 
16195 	FLAG_N = NFLAG_16(res);
16196 	FLAG_Z = res;
16197 	FLAG_C = CFLAG_CLEAR;
16198 	FLAG_V = VFLAG_CLEAR;
16199 }
16200 
16201 
m68k_op_eori_16_di(void)16202 static void m68k_op_eori_16_di(void)
16203 {
16204 	uint src = OPER_I_16();
16205 	uint ea = EA_AY_DI_16();
16206 	uint res = src ^ m68ki_read_16(ea);
16207 
16208 	m68ki_write_16(ea, res);
16209 
16210 	FLAG_N = NFLAG_16(res);
16211 	FLAG_Z = res;
16212 	FLAG_C = CFLAG_CLEAR;
16213 	FLAG_V = VFLAG_CLEAR;
16214 }
16215 
16216 
m68k_op_eori_16_ix(void)16217 static void m68k_op_eori_16_ix(void)
16218 {
16219 	uint src = OPER_I_16();
16220 	uint ea = EA_AY_IX_16();
16221 	uint res = src ^ m68ki_read_16(ea);
16222 
16223 	m68ki_write_16(ea, res);
16224 
16225 	FLAG_N = NFLAG_16(res);
16226 	FLAG_Z = res;
16227 	FLAG_C = CFLAG_CLEAR;
16228 	FLAG_V = VFLAG_CLEAR;
16229 }
16230 
16231 
m68k_op_eori_16_aw(void)16232 static void m68k_op_eori_16_aw(void)
16233 {
16234 	uint src = OPER_I_16();
16235 	uint ea = EA_AW_16();
16236 	uint res = src ^ m68ki_read_16(ea);
16237 
16238 	m68ki_write_16(ea, res);
16239 
16240 	FLAG_N = NFLAG_16(res);
16241 	FLAG_Z = res;
16242 	FLAG_C = CFLAG_CLEAR;
16243 	FLAG_V = VFLAG_CLEAR;
16244 }
16245 
16246 
m68k_op_eori_16_al(void)16247 static void m68k_op_eori_16_al(void)
16248 {
16249 	uint src = OPER_I_16();
16250 	uint ea = EA_AL_16();
16251 	uint res = src ^ m68ki_read_16(ea);
16252 
16253 	m68ki_write_16(ea, res);
16254 
16255 	FLAG_N = NFLAG_16(res);
16256 	FLAG_Z = res;
16257 	FLAG_C = CFLAG_CLEAR;
16258 	FLAG_V = VFLAG_CLEAR;
16259 }
16260 
16261 
m68k_op_eori_32_d(void)16262 static void m68k_op_eori_32_d(void)
16263 {
16264 	uint res = DY ^= OPER_I_32();
16265 
16266 	FLAG_N = NFLAG_32(res);
16267 	FLAG_Z = res;
16268 	FLAG_C = CFLAG_CLEAR;
16269 	FLAG_V = VFLAG_CLEAR;
16270 }
16271 
16272 
m68k_op_eori_32_ai(void)16273 static void m68k_op_eori_32_ai(void)
16274 {
16275 	uint src = OPER_I_32();
16276 	uint ea = EA_AY_AI_32();
16277 	uint res = src ^ m68ki_read_32(ea);
16278 
16279 	m68ki_write_32(ea, res);
16280 
16281 	FLAG_N = NFLAG_32(res);
16282 	FLAG_Z = res;
16283 	FLAG_C = CFLAG_CLEAR;
16284 	FLAG_V = VFLAG_CLEAR;
16285 }
16286 
16287 
m68k_op_eori_32_pi(void)16288 static void m68k_op_eori_32_pi(void)
16289 {
16290 	uint src = OPER_I_32();
16291 	uint ea = EA_AY_PI_32();
16292 	uint res = src ^ m68ki_read_32(ea);
16293 
16294 	m68ki_write_32(ea, res);
16295 
16296 	FLAG_N = NFLAG_32(res);
16297 	FLAG_Z = res;
16298 	FLAG_C = CFLAG_CLEAR;
16299 	FLAG_V = VFLAG_CLEAR;
16300 }
16301 
16302 
m68k_op_eori_32_pd(void)16303 static void m68k_op_eori_32_pd(void)
16304 {
16305 	uint src = OPER_I_32();
16306 	uint ea = EA_AY_PD_32();
16307 	uint res = src ^ m68ki_read_32(ea);
16308 
16309 	m68ki_write_32(ea, res);
16310 
16311 	FLAG_N = NFLAG_32(res);
16312 	FLAG_Z = res;
16313 	FLAG_C = CFLAG_CLEAR;
16314 	FLAG_V = VFLAG_CLEAR;
16315 }
16316 
16317 
m68k_op_eori_32_di(void)16318 static void m68k_op_eori_32_di(void)
16319 {
16320 	uint src = OPER_I_32();
16321 	uint ea = EA_AY_DI_32();
16322 	uint res = src ^ m68ki_read_32(ea);
16323 
16324 	m68ki_write_32(ea, res);
16325 
16326 	FLAG_N = NFLAG_32(res);
16327 	FLAG_Z = res;
16328 	FLAG_C = CFLAG_CLEAR;
16329 	FLAG_V = VFLAG_CLEAR;
16330 }
16331 
16332 
m68k_op_eori_32_ix(void)16333 static void m68k_op_eori_32_ix(void)
16334 {
16335 	uint src = OPER_I_32();
16336 	uint ea = EA_AY_IX_32();
16337 	uint res = src ^ m68ki_read_32(ea);
16338 
16339 	m68ki_write_32(ea, res);
16340 
16341 	FLAG_N = NFLAG_32(res);
16342 	FLAG_Z = res;
16343 	FLAG_C = CFLAG_CLEAR;
16344 	FLAG_V = VFLAG_CLEAR;
16345 }
16346 
16347 
m68k_op_eori_32_aw(void)16348 static void m68k_op_eori_32_aw(void)
16349 {
16350 	uint src = OPER_I_32();
16351 	uint ea = EA_AW_32();
16352 	uint res = src ^ m68ki_read_32(ea);
16353 
16354 	m68ki_write_32(ea, res);
16355 
16356 	FLAG_N = NFLAG_32(res);
16357 	FLAG_Z = res;
16358 	FLAG_C = CFLAG_CLEAR;
16359 	FLAG_V = VFLAG_CLEAR;
16360 }
16361 
16362 
m68k_op_eori_32_al(void)16363 static void m68k_op_eori_32_al(void)
16364 {
16365 	uint src = OPER_I_32();
16366 	uint ea = EA_AL_32();
16367 	uint res = src ^ m68ki_read_32(ea);
16368 
16369 	m68ki_write_32(ea, res);
16370 
16371 	FLAG_N = NFLAG_32(res);
16372 	FLAG_Z = res;
16373 	FLAG_C = CFLAG_CLEAR;
16374 	FLAG_V = VFLAG_CLEAR;
16375 }
16376 
16377 
m68k_op_eori_16_toc(void)16378 static void m68k_op_eori_16_toc(void)
16379 {
16380 	m68ki_set_ccr(m68ki_get_ccr() ^ OPER_I_16());
16381 }
16382 
16383 
m68k_op_eori_16_tos(void)16384 static void m68k_op_eori_16_tos(void)
16385 {
16386 	if(FLAG_S)
16387 	{
16388 		uint src = OPER_I_16();
16389 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
16390 		m68ki_set_sr(m68ki_get_sr() ^ src);
16391 		return;
16392 	}
16393 	m68ki_exception_privilege_violation();
16394 }
16395 
16396 
m68k_op_exg_32_dd(void)16397 static void m68k_op_exg_32_dd(void)
16398 {
16399 	uint* reg_a = &DX;
16400 	uint* reg_b = &DY;
16401 	uint tmp = *reg_a;
16402 	*reg_a = *reg_b;
16403 	*reg_b = tmp;
16404 }
16405 
16406 
m68k_op_exg_32_aa(void)16407 static void m68k_op_exg_32_aa(void)
16408 {
16409 	uint* reg_a = &AX;
16410 	uint* reg_b = &AY;
16411 	uint tmp = *reg_a;
16412 	*reg_a = *reg_b;
16413 	*reg_b = tmp;
16414 }
16415 
16416 
m68k_op_exg_32_da(void)16417 static void m68k_op_exg_32_da(void)
16418 {
16419 	uint* reg_a = &DX;
16420 	uint* reg_b = &AY;
16421 	uint tmp = *reg_a;
16422 	*reg_a = *reg_b;
16423 	*reg_b = tmp;
16424 }
16425 
16426 
m68k_op_ext_16(void)16427 static void m68k_op_ext_16(void)
16428 {
16429 	uint* r_dst = &DY;
16430 
16431 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xff00 : 0);
16432 
16433 	FLAG_N = NFLAG_16(*r_dst);
16434 	FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
16435 	FLAG_V = VFLAG_CLEAR;
16436 	FLAG_C = CFLAG_CLEAR;
16437 }
16438 
16439 
m68k_op_ext_32(void)16440 static void m68k_op_ext_32(void)
16441 {
16442 	uint* r_dst = &DY;
16443 
16444 	*r_dst = MASK_OUT_ABOVE_16(*r_dst) | (GET_MSB_16(*r_dst) ? 0xffff0000 : 0);
16445 
16446 	FLAG_N = NFLAG_32(*r_dst);
16447 	FLAG_Z = *r_dst;
16448 	FLAG_V = VFLAG_CLEAR;
16449 	FLAG_C = CFLAG_CLEAR;
16450 }
16451 
16452 
m68k_op_extb_32(void)16453 static void m68k_op_extb_32(void)
16454 {
16455 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
16456 	{
16457 		uint* r_dst = &DY;
16458 
16459 		*r_dst = MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xffffff00 : 0);
16460 
16461 		FLAG_N = NFLAG_32(*r_dst);
16462 		FLAG_Z = *r_dst;
16463 		FLAG_V = VFLAG_CLEAR;
16464 		FLAG_C = CFLAG_CLEAR;
16465 		return;
16466 	}
16467 	m68ki_exception_illegal();
16468 }
16469 
16470 
m68k_op_illegal(void)16471 static void m68k_op_illegal(void)
16472 {
16473 	m68ki_exception_illegal();
16474 }
16475 
16476 
m68k_op_jmp_32_ai(void)16477 static void m68k_op_jmp_32_ai(void)
16478 {
16479 	m68ki_jump(EA_AY_AI_32());
16480 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16481 	if(REG_PC == REG_PPC)
16482 		USE_ALL_CYCLES();
16483 }
16484 
16485 
m68k_op_jmp_32_di(void)16486 static void m68k_op_jmp_32_di(void)
16487 {
16488 	m68ki_jump(EA_AY_DI_32());
16489 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16490 	if(REG_PC == REG_PPC)
16491 		USE_ALL_CYCLES();
16492 }
16493 
16494 
m68k_op_jmp_32_ix(void)16495 static void m68k_op_jmp_32_ix(void)
16496 {
16497 	m68ki_jump(EA_AY_IX_32());
16498 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16499 	if(REG_PC == REG_PPC)
16500 		USE_ALL_CYCLES();
16501 }
16502 
16503 
m68k_op_jmp_32_aw(void)16504 static void m68k_op_jmp_32_aw(void)
16505 {
16506 	m68ki_jump(EA_AW_32());
16507 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16508 	if(REG_PC == REG_PPC)
16509 		USE_ALL_CYCLES();
16510 }
16511 
16512 
m68k_op_jmp_32_al(void)16513 static void m68k_op_jmp_32_al(void)
16514 {
16515 	m68ki_jump(EA_AL_32());
16516 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16517 	if(REG_PC == REG_PPC)
16518 		USE_ALL_CYCLES();
16519 }
16520 
16521 
m68k_op_jmp_32_pcdi(void)16522 static void m68k_op_jmp_32_pcdi(void)
16523 {
16524 	m68ki_jump(EA_PCDI_32());
16525 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16526 	if(REG_PC == REG_PPC)
16527 		USE_ALL_CYCLES();
16528 }
16529 
16530 
m68k_op_jmp_32_pcix(void)16531 static void m68k_op_jmp_32_pcix(void)
16532 {
16533 	m68ki_jump(EA_PCIX_32());
16534 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16535 	if(REG_PC == REG_PPC)
16536 		USE_ALL_CYCLES();
16537 }
16538 
16539 
m68k_op_jsr_32_ai(void)16540 static void m68k_op_jsr_32_ai(void)
16541 {
16542 	uint ea = EA_AY_AI_32();
16543 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16544 	m68ki_push_32(REG_PC);
16545 	m68ki_jump(ea);
16546 }
16547 
16548 
m68k_op_jsr_32_di(void)16549 static void m68k_op_jsr_32_di(void)
16550 {
16551 	uint ea = EA_AY_DI_32();
16552 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16553 	m68ki_push_32(REG_PC);
16554 	m68ki_jump(ea);
16555 }
16556 
16557 
m68k_op_jsr_32_ix(void)16558 static void m68k_op_jsr_32_ix(void)
16559 {
16560 	uint ea = EA_AY_IX_32();
16561 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16562 	m68ki_push_32(REG_PC);
16563 	m68ki_jump(ea);
16564 }
16565 
16566 
m68k_op_jsr_32_aw(void)16567 static void m68k_op_jsr_32_aw(void)
16568 {
16569 	uint ea = EA_AW_32();
16570 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16571 	m68ki_push_32(REG_PC);
16572 	m68ki_jump(ea);
16573 }
16574 
16575 
m68k_op_jsr_32_al(void)16576 static void m68k_op_jsr_32_al(void)
16577 {
16578 	uint ea = EA_AL_32();
16579 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16580 	m68ki_push_32(REG_PC);
16581 	m68ki_jump(ea);
16582 }
16583 
16584 
m68k_op_jsr_32_pcdi(void)16585 static void m68k_op_jsr_32_pcdi(void)
16586 {
16587 	uint ea = EA_PCDI_32();
16588 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16589 	m68ki_push_32(REG_PC);
16590 	m68ki_jump(ea);
16591 }
16592 
16593 
m68k_op_jsr_32_pcix(void)16594 static void m68k_op_jsr_32_pcix(void)
16595 {
16596 	uint ea = EA_PCIX_32();
16597 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
16598 	m68ki_push_32(REG_PC);
16599 	m68ki_jump(ea);
16600 }
16601 
16602 
m68k_op_lea_32_ai(void)16603 static void m68k_op_lea_32_ai(void)
16604 {
16605 	AX = EA_AY_AI_32();
16606 }
16607 
16608 
m68k_op_lea_32_di(void)16609 static void m68k_op_lea_32_di(void)
16610 {
16611 	AX = EA_AY_DI_32();
16612 }
16613 
16614 
m68k_op_lea_32_ix(void)16615 static void m68k_op_lea_32_ix(void)
16616 {
16617 	AX = EA_AY_IX_32();
16618 }
16619 
16620 
m68k_op_lea_32_aw(void)16621 static void m68k_op_lea_32_aw(void)
16622 {
16623 	AX = EA_AW_32();
16624 }
16625 
16626 
m68k_op_lea_32_al(void)16627 static void m68k_op_lea_32_al(void)
16628 {
16629 	AX = EA_AL_32();
16630 }
16631 
16632 
m68k_op_lea_32_pcdi(void)16633 static void m68k_op_lea_32_pcdi(void)
16634 {
16635 	AX = EA_PCDI_32();
16636 }
16637 
16638 
m68k_op_lea_32_pcix(void)16639 static void m68k_op_lea_32_pcix(void)
16640 {
16641 	AX = EA_PCIX_32();
16642 }
16643 
16644 
m68k_op_link_16_a7(void)16645 static void m68k_op_link_16_a7(void)
16646 {
16647 	REG_A[7] -= 4;
16648 	m68ki_write_32(REG_A[7], REG_A[7]);
16649 	REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));
16650 }
16651 
16652 
m68k_op_link_16(void)16653 static void m68k_op_link_16(void)
16654 {
16655 	uint* r_dst = &AY;
16656 
16657 	m68ki_push_32(*r_dst);
16658 	*r_dst = REG_A[7];
16659 	REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));
16660 }
16661 
16662 
m68k_op_link_32_a7(void)16663 static void m68k_op_link_32_a7(void)
16664 {
16665 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
16666 	{
16667 		REG_A[7] -= 4;
16668 		m68ki_write_32(REG_A[7], REG_A[7]);
16669 		REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32());
16670 		return;
16671 	}
16672 	m68ki_exception_illegal();
16673 }
16674 
16675 
m68k_op_link_32(void)16676 static void m68k_op_link_32(void)
16677 {
16678 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
16679 	{
16680 		uint* r_dst = &AY;
16681 
16682 		m68ki_push_32(*r_dst);
16683 		*r_dst = REG_A[7];
16684 		REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32());
16685 		return;
16686 	}
16687 	m68ki_exception_illegal();
16688 }
16689 
16690 
m68k_op_lsr_8_s(void)16691 static void m68k_op_lsr_8_s(void)
16692 {
16693 	uint* r_dst = &DY;
16694 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
16695 	uint src = MASK_OUT_ABOVE_8(*r_dst);
16696 	uint res = src >> shift;
16697 
16698 	if(shift != 0)
16699 		USE_CYCLES(shift<<CYC_SHIFT);
16700 
16701 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16702 
16703 	FLAG_N = NFLAG_CLEAR;
16704 	FLAG_Z = res;
16705 	FLAG_X = FLAG_C = src << (9-shift);
16706 	FLAG_V = VFLAG_CLEAR;
16707 }
16708 
16709 
m68k_op_lsr_16_s(void)16710 static void m68k_op_lsr_16_s(void)
16711 {
16712 	uint* r_dst = &DY;
16713 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
16714 	uint src = MASK_OUT_ABOVE_16(*r_dst);
16715 	uint res = src >> shift;
16716 
16717 	if(shift != 0)
16718 		USE_CYCLES(shift<<CYC_SHIFT);
16719 
16720 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
16721 
16722 	FLAG_N = NFLAG_CLEAR;
16723 	FLAG_Z = res;
16724 	FLAG_X = FLAG_C = src << (9-shift);
16725 	FLAG_V = VFLAG_CLEAR;
16726 }
16727 
16728 
m68k_op_lsr_32_s(void)16729 static void m68k_op_lsr_32_s(void)
16730 {
16731 	uint* r_dst = &DY;
16732 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
16733 	uint src = *r_dst;
16734 	uint res = src >> shift;
16735 
16736 	if(shift != 0)
16737 		USE_CYCLES(shift<<CYC_SHIFT);
16738 
16739 	*r_dst = res;
16740 
16741 	FLAG_N = NFLAG_CLEAR;
16742 	FLAG_Z = res;
16743 	FLAG_X = FLAG_C = src << (9-shift);
16744 	FLAG_V = VFLAG_CLEAR;
16745 }
16746 
16747 
m68k_op_lsr_8_r(void)16748 static void m68k_op_lsr_8_r(void)
16749 {
16750 	uint* r_dst = &DY;
16751 	uint shift = DX & 0x3f;
16752 	uint src = MASK_OUT_ABOVE_8(*r_dst);
16753 	uint res = src >> shift;
16754 
16755 	if(shift != 0)
16756 	{
16757 		USE_CYCLES(shift<<CYC_SHIFT);
16758 
16759 		if(shift <= 8)
16760 		{
16761 			*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16762 			FLAG_X = FLAG_C = src << (9-shift);
16763 			FLAG_N = NFLAG_CLEAR;
16764 			FLAG_Z = res;
16765 			FLAG_V = VFLAG_CLEAR;
16766 			return;
16767 		}
16768 
16769 		*r_dst &= 0xffffff00;
16770 		FLAG_X = XFLAG_CLEAR;
16771 		FLAG_C = CFLAG_CLEAR;
16772 		FLAG_N = NFLAG_CLEAR;
16773 		FLAG_Z = ZFLAG_SET;
16774 		FLAG_V = VFLAG_CLEAR;
16775 		return;
16776 	}
16777 
16778 	FLAG_C = CFLAG_CLEAR;
16779 	FLAG_N = NFLAG_8(src);
16780 	FLAG_Z = src;
16781 	FLAG_V = VFLAG_CLEAR;
16782 }
16783 
16784 
m68k_op_lsr_16_r(void)16785 static void m68k_op_lsr_16_r(void)
16786 {
16787 	uint* r_dst = &DY;
16788 	uint shift = DX & 0x3f;
16789 	uint src = MASK_OUT_ABOVE_16(*r_dst);
16790 	uint res = src >> shift;
16791 
16792 	if(shift != 0)
16793 	{
16794 		USE_CYCLES(shift<<CYC_SHIFT);
16795 
16796 		if(shift <= 16)
16797 		{
16798 			*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
16799 			FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
16800 			FLAG_N = NFLAG_CLEAR;
16801 			FLAG_Z = res;
16802 			FLAG_V = VFLAG_CLEAR;
16803 			return;
16804 		}
16805 
16806 		*r_dst &= 0xffff0000;
16807 		FLAG_X = XFLAG_CLEAR;
16808 		FLAG_C = CFLAG_CLEAR;
16809 		FLAG_N = NFLAG_CLEAR;
16810 		FLAG_Z = ZFLAG_SET;
16811 		FLAG_V = VFLAG_CLEAR;
16812 		return;
16813 	}
16814 
16815 	FLAG_C = CFLAG_CLEAR;
16816 	FLAG_N = NFLAG_16(src);
16817 	FLAG_Z = src;
16818 	FLAG_V = VFLAG_CLEAR;
16819 }
16820 
16821 
m68k_op_lsr_32_r(void)16822 static void m68k_op_lsr_32_r(void)
16823 {
16824 	uint* r_dst = &DY;
16825 	uint shift = DX & 0x3f;
16826 	uint src = *r_dst;
16827 	uint res = src >> shift;
16828 
16829 	if(shift != 0)
16830 	{
16831 		USE_CYCLES(shift<<CYC_SHIFT);
16832 
16833 		if(shift < 32)
16834 		{
16835 			*r_dst = res;
16836 			FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
16837 			FLAG_N = NFLAG_CLEAR;
16838 			FLAG_Z = res;
16839 			FLAG_V = VFLAG_CLEAR;
16840 			return;
16841 		}
16842 
16843 		*r_dst = 0;
16844 		FLAG_X = FLAG_C = (shift == 32 ? GET_MSB_32(src)>>23 : 0);
16845 		FLAG_N = NFLAG_CLEAR;
16846 		FLAG_Z = ZFLAG_SET;
16847 		FLAG_V = VFLAG_CLEAR;
16848 		return;
16849 	}
16850 
16851 	FLAG_C = CFLAG_CLEAR;
16852 	FLAG_N = NFLAG_32(src);
16853 	FLAG_Z = src;
16854 	FLAG_V = VFLAG_CLEAR;
16855 }
16856 
16857 
m68k_op_lsr_16_ai(void)16858 static void m68k_op_lsr_16_ai(void)
16859 {
16860 	uint ea = EA_AY_AI_16();
16861 	uint src = m68ki_read_16(ea);
16862 	uint res = src >> 1;
16863 
16864 	m68ki_write_16(ea, res);
16865 
16866 	FLAG_N = NFLAG_CLEAR;
16867 	FLAG_Z = res;
16868 	FLAG_C = FLAG_X = src << 8;
16869 	FLAG_V = VFLAG_CLEAR;
16870 }
16871 
16872 
m68k_op_lsr_16_pi(void)16873 static void m68k_op_lsr_16_pi(void)
16874 {
16875 	uint ea = EA_AY_PI_16();
16876 	uint src = m68ki_read_16(ea);
16877 	uint res = src >> 1;
16878 
16879 	m68ki_write_16(ea, res);
16880 
16881 	FLAG_N = NFLAG_CLEAR;
16882 	FLAG_Z = res;
16883 	FLAG_C = FLAG_X = src << 8;
16884 	FLAG_V = VFLAG_CLEAR;
16885 }
16886 
16887 
m68k_op_lsr_16_pd(void)16888 static void m68k_op_lsr_16_pd(void)
16889 {
16890 	uint ea = EA_AY_PD_16();
16891 	uint src = m68ki_read_16(ea);
16892 	uint res = src >> 1;
16893 
16894 	m68ki_write_16(ea, res);
16895 
16896 	FLAG_N = NFLAG_CLEAR;
16897 	FLAG_Z = res;
16898 	FLAG_C = FLAG_X = src << 8;
16899 	FLAG_V = VFLAG_CLEAR;
16900 }
16901 
16902 
m68k_op_lsr_16_di(void)16903 static void m68k_op_lsr_16_di(void)
16904 {
16905 	uint ea = EA_AY_DI_16();
16906 	uint src = m68ki_read_16(ea);
16907 	uint res = src >> 1;
16908 
16909 	m68ki_write_16(ea, res);
16910 
16911 	FLAG_N = NFLAG_CLEAR;
16912 	FLAG_Z = res;
16913 	FLAG_C = FLAG_X = src << 8;
16914 	FLAG_V = VFLAG_CLEAR;
16915 }
16916 
16917 
m68k_op_lsr_16_ix(void)16918 static void m68k_op_lsr_16_ix(void)
16919 {
16920 	uint ea = EA_AY_IX_16();
16921 	uint src = m68ki_read_16(ea);
16922 	uint res = src >> 1;
16923 
16924 	m68ki_write_16(ea, res);
16925 
16926 	FLAG_N = NFLAG_CLEAR;
16927 	FLAG_Z = res;
16928 	FLAG_C = FLAG_X = src << 8;
16929 	FLAG_V = VFLAG_CLEAR;
16930 }
16931 
16932 
m68k_op_lsr_16_aw(void)16933 static void m68k_op_lsr_16_aw(void)
16934 {
16935 	uint ea = EA_AW_16();
16936 	uint src = m68ki_read_16(ea);
16937 	uint res = src >> 1;
16938 
16939 	m68ki_write_16(ea, res);
16940 
16941 	FLAG_N = NFLAG_CLEAR;
16942 	FLAG_Z = res;
16943 	FLAG_C = FLAG_X = src << 8;
16944 	FLAG_V = VFLAG_CLEAR;
16945 }
16946 
16947 
m68k_op_lsr_16_al(void)16948 static void m68k_op_lsr_16_al(void)
16949 {
16950 	uint ea = EA_AL_16();
16951 	uint src = m68ki_read_16(ea);
16952 	uint res = src >> 1;
16953 
16954 	m68ki_write_16(ea, res);
16955 
16956 	FLAG_N = NFLAG_CLEAR;
16957 	FLAG_Z = res;
16958 	FLAG_C = FLAG_X = src << 8;
16959 	FLAG_V = VFLAG_CLEAR;
16960 }
16961 
16962 
m68k_op_lsl_8_s(void)16963 static void m68k_op_lsl_8_s(void)
16964 {
16965 	uint* r_dst = &DY;
16966 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
16967 	uint src = MASK_OUT_ABOVE_8(*r_dst);
16968 	uint res = MASK_OUT_ABOVE_8(src << shift);
16969 
16970 	if(shift != 0)
16971 		USE_CYCLES(shift<<CYC_SHIFT);
16972 
16973 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16974 
16975 	FLAG_N = NFLAG_8(res);
16976 	FLAG_Z = res;
16977 	FLAG_X = FLAG_C = src << shift;
16978 	FLAG_V = VFLAG_CLEAR;
16979 }
16980 
16981 
m68k_op_lsl_16_s(void)16982 static void m68k_op_lsl_16_s(void)
16983 {
16984 	uint* r_dst = &DY;
16985 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
16986 	uint src = MASK_OUT_ABOVE_16(*r_dst);
16987 	uint res = MASK_OUT_ABOVE_16(src << shift);
16988 
16989 	if(shift != 0)
16990 		USE_CYCLES(shift<<CYC_SHIFT);
16991 
16992 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
16993 
16994 	FLAG_N = NFLAG_16(res);
16995 	FLAG_Z = res;
16996 	FLAG_X = FLAG_C = src >> (8-shift);
16997 	FLAG_V = VFLAG_CLEAR;
16998 }
16999 
17000 
m68k_op_lsl_32_s(void)17001 static void m68k_op_lsl_32_s(void)
17002 {
17003 	uint* r_dst = &DY;
17004 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
17005 	uint src = *r_dst;
17006 	uint res = MASK_OUT_ABOVE_32(src << shift);
17007 
17008 	if(shift != 0)
17009 		USE_CYCLES(shift<<CYC_SHIFT);
17010 
17011 	*r_dst = res;
17012 
17013 	FLAG_N = NFLAG_32(res);
17014 	FLAG_Z = res;
17015 	FLAG_X = FLAG_C = src >> (24-shift);
17016 	FLAG_V = VFLAG_CLEAR;
17017 }
17018 
17019 
m68k_op_lsl_8_r(void)17020 static void m68k_op_lsl_8_r(void)
17021 {
17022 	uint* r_dst = &DY;
17023 	uint shift = DX & 0x3f;
17024 	uint src = MASK_OUT_ABOVE_8(*r_dst);
17025 	uint res = MASK_OUT_ABOVE_8(src << shift);
17026 
17027 	if(shift != 0)
17028 	{
17029 		USE_CYCLES(shift<<CYC_SHIFT);
17030 
17031 		if(shift <= 8)
17032 		{
17033 			*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17034 			FLAG_X = FLAG_C = src << shift;
17035 			FLAG_N = NFLAG_8(res);
17036 			FLAG_Z = res;
17037 			FLAG_V = VFLAG_CLEAR;
17038 			return;
17039 		}
17040 
17041 		*r_dst &= 0xffffff00;
17042 		FLAG_X = XFLAG_CLEAR;
17043 		FLAG_C = CFLAG_CLEAR;
17044 		FLAG_N = NFLAG_CLEAR;
17045 		FLAG_Z = ZFLAG_SET;
17046 		FLAG_V = VFLAG_CLEAR;
17047 		return;
17048 	}
17049 
17050 	FLAG_C = CFLAG_CLEAR;
17051 	FLAG_N = NFLAG_8(src);
17052 	FLAG_Z = src;
17053 	FLAG_V = VFLAG_CLEAR;
17054 }
17055 
17056 
m68k_op_lsl_16_r(void)17057 static void m68k_op_lsl_16_r(void)
17058 {
17059 	uint* r_dst = &DY;
17060 	uint shift = DX & 0x3f;
17061 	uint src = MASK_OUT_ABOVE_16(*r_dst);
17062 	uint res = MASK_OUT_ABOVE_16(src << shift);
17063 
17064 	if(shift != 0)
17065 	{
17066 		USE_CYCLES(shift<<CYC_SHIFT);
17067 
17068 		if(shift <= 16)
17069 		{
17070 			*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17071 			FLAG_X = FLAG_C = (src << shift) >> 8;
17072 			FLAG_N = NFLAG_16(res);
17073 			FLAG_Z = res;
17074 			FLAG_V = VFLAG_CLEAR;
17075 			return;
17076 		}
17077 
17078 		*r_dst &= 0xffff0000;
17079 		FLAG_X = XFLAG_CLEAR;
17080 		FLAG_C = CFLAG_CLEAR;
17081 		FLAG_N = NFLAG_CLEAR;
17082 		FLAG_Z = ZFLAG_SET;
17083 		FLAG_V = VFLAG_CLEAR;
17084 		return;
17085 	}
17086 
17087 	FLAG_C = CFLAG_CLEAR;
17088 	FLAG_N = NFLAG_16(src);
17089 	FLAG_Z = src;
17090 	FLAG_V = VFLAG_CLEAR;
17091 }
17092 
17093 
m68k_op_lsl_32_r(void)17094 static void m68k_op_lsl_32_r(void)
17095 {
17096 	uint* r_dst = &DY;
17097 	uint shift = DX & 0x3f;
17098 	uint src = *r_dst;
17099 	uint res = MASK_OUT_ABOVE_32(src << shift);
17100 
17101 	if(shift != 0)
17102 	{
17103 		USE_CYCLES(shift<<CYC_SHIFT);
17104 
17105 		if(shift < 32)
17106 		{
17107 			*r_dst = res;
17108 			FLAG_X = FLAG_C = (src >> (32 - shift)) << 8;
17109 			FLAG_N = NFLAG_32(res);
17110 			FLAG_Z = res;
17111 			FLAG_V = VFLAG_CLEAR;
17112 			return;
17113 		}
17114 
17115 		*r_dst = 0;
17116 		FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8;
17117 		FLAG_N = NFLAG_CLEAR;
17118 		FLAG_Z = ZFLAG_SET;
17119 		FLAG_V = VFLAG_CLEAR;
17120 		return;
17121 	}
17122 
17123 	FLAG_C = CFLAG_CLEAR;
17124 	FLAG_N = NFLAG_32(src);
17125 	FLAG_Z = src;
17126 	FLAG_V = VFLAG_CLEAR;
17127 }
17128 
17129 
m68k_op_lsl_16_ai(void)17130 static void m68k_op_lsl_16_ai(void)
17131 {
17132 	uint ea = EA_AY_AI_16();
17133 	uint src = m68ki_read_16(ea);
17134 	uint res = MASK_OUT_ABOVE_16(src << 1);
17135 
17136 	m68ki_write_16(ea, res);
17137 
17138 	FLAG_N = NFLAG_16(res);
17139 	FLAG_Z = res;
17140 	FLAG_X = FLAG_C = src >> 7;
17141 	FLAG_V = VFLAG_CLEAR;
17142 }
17143 
17144 
m68k_op_lsl_16_pi(void)17145 static void m68k_op_lsl_16_pi(void)
17146 {
17147 	uint ea = EA_AY_PI_16();
17148 	uint src = m68ki_read_16(ea);
17149 	uint res = MASK_OUT_ABOVE_16(src << 1);
17150 
17151 	m68ki_write_16(ea, res);
17152 
17153 	FLAG_N = NFLAG_16(res);
17154 	FLAG_Z = res;
17155 	FLAG_X = FLAG_C = src >> 7;
17156 	FLAG_V = VFLAG_CLEAR;
17157 }
17158 
17159 
m68k_op_lsl_16_pd(void)17160 static void m68k_op_lsl_16_pd(void)
17161 {
17162 	uint ea = EA_AY_PD_16();
17163 	uint src = m68ki_read_16(ea);
17164 	uint res = MASK_OUT_ABOVE_16(src << 1);
17165 
17166 	m68ki_write_16(ea, res);
17167 
17168 	FLAG_N = NFLAG_16(res);
17169 	FLAG_Z = res;
17170 	FLAG_X = FLAG_C = src >> 7;
17171 	FLAG_V = VFLAG_CLEAR;
17172 }
17173 
17174 
m68k_op_lsl_16_di(void)17175 static void m68k_op_lsl_16_di(void)
17176 {
17177 	uint ea = EA_AY_DI_16();
17178 	uint src = m68ki_read_16(ea);
17179 	uint res = MASK_OUT_ABOVE_16(src << 1);
17180 
17181 	m68ki_write_16(ea, res);
17182 
17183 	FLAG_N = NFLAG_16(res);
17184 	FLAG_Z = res;
17185 	FLAG_X = FLAG_C = src >> 7;
17186 	FLAG_V = VFLAG_CLEAR;
17187 }
17188 
17189 
m68k_op_lsl_16_ix(void)17190 static void m68k_op_lsl_16_ix(void)
17191 {
17192 	uint ea = EA_AY_IX_16();
17193 	uint src = m68ki_read_16(ea);
17194 	uint res = MASK_OUT_ABOVE_16(src << 1);
17195 
17196 	m68ki_write_16(ea, res);
17197 
17198 	FLAG_N = NFLAG_16(res);
17199 	FLAG_Z = res;
17200 	FLAG_X = FLAG_C = src >> 7;
17201 	FLAG_V = VFLAG_CLEAR;
17202 }
17203 
17204 
m68k_op_lsl_16_aw(void)17205 static void m68k_op_lsl_16_aw(void)
17206 {
17207 	uint ea = EA_AW_16();
17208 	uint src = m68ki_read_16(ea);
17209 	uint res = MASK_OUT_ABOVE_16(src << 1);
17210 
17211 	m68ki_write_16(ea, res);
17212 
17213 	FLAG_N = NFLAG_16(res);
17214 	FLAG_Z = res;
17215 	FLAG_X = FLAG_C = src >> 7;
17216 	FLAG_V = VFLAG_CLEAR;
17217 }
17218 
17219 
m68k_op_lsl_16_al(void)17220 static void m68k_op_lsl_16_al(void)
17221 {
17222 	uint ea = EA_AL_16();
17223 	uint src = m68ki_read_16(ea);
17224 	uint res = MASK_OUT_ABOVE_16(src << 1);
17225 
17226 	m68ki_write_16(ea, res);
17227 
17228 	FLAG_N = NFLAG_16(res);
17229 	FLAG_Z = res;
17230 	FLAG_X = FLAG_C = src >> 7;
17231 	FLAG_V = VFLAG_CLEAR;
17232 }
17233 
17234 
m68k_op_move_8_d_d(void)17235 static void m68k_op_move_8_d_d(void)
17236 {
17237 	uint res = MASK_OUT_ABOVE_8(DY);
17238 	uint* r_dst = &DX;
17239 
17240 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17241 
17242 	FLAG_N = NFLAG_8(res);
17243 	FLAG_Z = res;
17244 	FLAG_V = VFLAG_CLEAR;
17245 	FLAG_C = CFLAG_CLEAR;
17246 }
17247 
17248 
m68k_op_move_8_d_ai(void)17249 static void m68k_op_move_8_d_ai(void)
17250 {
17251 	uint res = OPER_AY_AI_8();
17252 	uint* r_dst = &DX;
17253 
17254 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17255 
17256 	FLAG_N = NFLAG_8(res);
17257 	FLAG_Z = res;
17258 	FLAG_V = VFLAG_CLEAR;
17259 	FLAG_C = CFLAG_CLEAR;
17260 }
17261 
17262 
m68k_op_move_8_d_pi(void)17263 static void m68k_op_move_8_d_pi(void)
17264 {
17265 	uint res = OPER_AY_PI_8();
17266 	uint* r_dst = &DX;
17267 
17268 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17269 
17270 	FLAG_N = NFLAG_8(res);
17271 	FLAG_Z = res;
17272 	FLAG_V = VFLAG_CLEAR;
17273 	FLAG_C = CFLAG_CLEAR;
17274 }
17275 
17276 
m68k_op_move_8_d_pi7(void)17277 static void m68k_op_move_8_d_pi7(void)
17278 {
17279 	uint res = OPER_A7_PI_8();
17280 	uint* r_dst = &DX;
17281 
17282 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17283 
17284 	FLAG_N = NFLAG_8(res);
17285 	FLAG_Z = res;
17286 	FLAG_V = VFLAG_CLEAR;
17287 	FLAG_C = CFLAG_CLEAR;
17288 }
17289 
17290 
m68k_op_move_8_d_pd(void)17291 static void m68k_op_move_8_d_pd(void)
17292 {
17293 	uint res = OPER_AY_PD_8();
17294 	uint* r_dst = &DX;
17295 
17296 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17297 
17298 	FLAG_N = NFLAG_8(res);
17299 	FLAG_Z = res;
17300 	FLAG_V = VFLAG_CLEAR;
17301 	FLAG_C = CFLAG_CLEAR;
17302 }
17303 
17304 
m68k_op_move_8_d_pd7(void)17305 static void m68k_op_move_8_d_pd7(void)
17306 {
17307 	uint res = OPER_A7_PD_8();
17308 	uint* r_dst = &DX;
17309 
17310 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17311 
17312 	FLAG_N = NFLAG_8(res);
17313 	FLAG_Z = res;
17314 	FLAG_V = VFLAG_CLEAR;
17315 	FLAG_C = CFLAG_CLEAR;
17316 }
17317 
17318 
m68k_op_move_8_d_di(void)17319 static void m68k_op_move_8_d_di(void)
17320 {
17321 	uint res = OPER_AY_DI_8();
17322 	uint* r_dst = &DX;
17323 
17324 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17325 
17326 	FLAG_N = NFLAG_8(res);
17327 	FLAG_Z = res;
17328 	FLAG_V = VFLAG_CLEAR;
17329 	FLAG_C = CFLAG_CLEAR;
17330 }
17331 
17332 
m68k_op_move_8_d_ix(void)17333 static void m68k_op_move_8_d_ix(void)
17334 {
17335 	uint res = OPER_AY_IX_8();
17336 	uint* r_dst = &DX;
17337 
17338 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17339 
17340 	FLAG_N = NFLAG_8(res);
17341 	FLAG_Z = res;
17342 	FLAG_V = VFLAG_CLEAR;
17343 	FLAG_C = CFLAG_CLEAR;
17344 }
17345 
17346 
m68k_op_move_8_d_aw(void)17347 static void m68k_op_move_8_d_aw(void)
17348 {
17349 	uint res = OPER_AW_8();
17350 	uint* r_dst = &DX;
17351 
17352 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17353 
17354 	FLAG_N = NFLAG_8(res);
17355 	FLAG_Z = res;
17356 	FLAG_V = VFLAG_CLEAR;
17357 	FLAG_C = CFLAG_CLEAR;
17358 }
17359 
17360 
m68k_op_move_8_d_al(void)17361 static void m68k_op_move_8_d_al(void)
17362 {
17363 	uint res = OPER_AL_8();
17364 	uint* r_dst = &DX;
17365 
17366 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17367 
17368 	FLAG_N = NFLAG_8(res);
17369 	FLAG_Z = res;
17370 	FLAG_V = VFLAG_CLEAR;
17371 	FLAG_C = CFLAG_CLEAR;
17372 }
17373 
17374 
m68k_op_move_8_d_pcdi(void)17375 static void m68k_op_move_8_d_pcdi(void)
17376 {
17377 	uint res = OPER_PCDI_8();
17378 	uint* r_dst = &DX;
17379 
17380 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17381 
17382 	FLAG_N = NFLAG_8(res);
17383 	FLAG_Z = res;
17384 	FLAG_V = VFLAG_CLEAR;
17385 	FLAG_C = CFLAG_CLEAR;
17386 }
17387 
17388 
m68k_op_move_8_d_pcix(void)17389 static void m68k_op_move_8_d_pcix(void)
17390 {
17391 	uint res = OPER_PCIX_8();
17392 	uint* r_dst = &DX;
17393 
17394 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17395 
17396 	FLAG_N = NFLAG_8(res);
17397 	FLAG_Z = res;
17398 	FLAG_V = VFLAG_CLEAR;
17399 	FLAG_C = CFLAG_CLEAR;
17400 }
17401 
17402 
m68k_op_move_8_d_i(void)17403 static void m68k_op_move_8_d_i(void)
17404 {
17405 	uint res = OPER_I_8();
17406 	uint* r_dst = &DX;
17407 
17408 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
17409 
17410 	FLAG_N = NFLAG_8(res);
17411 	FLAG_Z = res;
17412 	FLAG_V = VFLAG_CLEAR;
17413 	FLAG_C = CFLAG_CLEAR;
17414 }
17415 
17416 
m68k_op_move_8_ai_d(void)17417 static void m68k_op_move_8_ai_d(void)
17418 {
17419 	uint res = MASK_OUT_ABOVE_8(DY);
17420 	uint ea = EA_AX_AI_8();
17421 
17422 	m68ki_write_8(ea, res);
17423 
17424 	FLAG_N = NFLAG_8(res);
17425 	FLAG_Z = res;
17426 	FLAG_V = VFLAG_CLEAR;
17427 	FLAG_C = CFLAG_CLEAR;
17428 }
17429 
17430 
m68k_op_move_8_ai_ai(void)17431 static void m68k_op_move_8_ai_ai(void)
17432 {
17433 	uint res = OPER_AY_AI_8();
17434 	uint ea = EA_AX_AI_8();
17435 
17436 	m68ki_write_8(ea, res);
17437 
17438 	FLAG_N = NFLAG_8(res);
17439 	FLAG_Z = res;
17440 	FLAG_V = VFLAG_CLEAR;
17441 	FLAG_C = CFLAG_CLEAR;
17442 }
17443 
17444 
m68k_op_move_8_ai_pi(void)17445 static void m68k_op_move_8_ai_pi(void)
17446 {
17447 	uint res = OPER_AY_PI_8();
17448 	uint ea = EA_AX_AI_8();
17449 
17450 	m68ki_write_8(ea, res);
17451 
17452 	FLAG_N = NFLAG_8(res);
17453 	FLAG_Z = res;
17454 	FLAG_V = VFLAG_CLEAR;
17455 	FLAG_C = CFLAG_CLEAR;
17456 }
17457 
17458 
m68k_op_move_8_ai_pi7(void)17459 static void m68k_op_move_8_ai_pi7(void)
17460 {
17461 	uint res = OPER_A7_PI_8();
17462 	uint ea = EA_AX_AI_8();
17463 
17464 	m68ki_write_8(ea, res);
17465 
17466 	FLAG_N = NFLAG_8(res);
17467 	FLAG_Z = res;
17468 	FLAG_V = VFLAG_CLEAR;
17469 	FLAG_C = CFLAG_CLEAR;
17470 }
17471 
17472 
m68k_op_move_8_ai_pd(void)17473 static void m68k_op_move_8_ai_pd(void)
17474 {
17475 	uint res = OPER_AY_PD_8();
17476 	uint ea = EA_AX_AI_8();
17477 
17478 	m68ki_write_8(ea, res);
17479 
17480 	FLAG_N = NFLAG_8(res);
17481 	FLAG_Z = res;
17482 	FLAG_V = VFLAG_CLEAR;
17483 	FLAG_C = CFLAG_CLEAR;
17484 }
17485 
17486 
m68k_op_move_8_ai_pd7(void)17487 static void m68k_op_move_8_ai_pd7(void)
17488 {
17489 	uint res = OPER_A7_PD_8();
17490 	uint ea = EA_AX_AI_8();
17491 
17492 	m68ki_write_8(ea, res);
17493 
17494 	FLAG_N = NFLAG_8(res);
17495 	FLAG_Z = res;
17496 	FLAG_V = VFLAG_CLEAR;
17497 	FLAG_C = CFLAG_CLEAR;
17498 }
17499 
17500 
m68k_op_move_8_ai_di(void)17501 static void m68k_op_move_8_ai_di(void)
17502 {
17503 	uint res = OPER_AY_DI_8();
17504 	uint ea = EA_AX_AI_8();
17505 
17506 	m68ki_write_8(ea, res);
17507 
17508 	FLAG_N = NFLAG_8(res);
17509 	FLAG_Z = res;
17510 	FLAG_V = VFLAG_CLEAR;
17511 	FLAG_C = CFLAG_CLEAR;
17512 }
17513 
17514 
m68k_op_move_8_ai_ix(void)17515 static void m68k_op_move_8_ai_ix(void)
17516 {
17517 	uint res = OPER_AY_IX_8();
17518 	uint ea = EA_AX_AI_8();
17519 
17520 	m68ki_write_8(ea, res);
17521 
17522 	FLAG_N = NFLAG_8(res);
17523 	FLAG_Z = res;
17524 	FLAG_V = VFLAG_CLEAR;
17525 	FLAG_C = CFLAG_CLEAR;
17526 }
17527 
17528 
m68k_op_move_8_ai_aw(void)17529 static void m68k_op_move_8_ai_aw(void)
17530 {
17531 	uint res = OPER_AW_8();
17532 	uint ea = EA_AX_AI_8();
17533 
17534 	m68ki_write_8(ea, res);
17535 
17536 	FLAG_N = NFLAG_8(res);
17537 	FLAG_Z = res;
17538 	FLAG_V = VFLAG_CLEAR;
17539 	FLAG_C = CFLAG_CLEAR;
17540 }
17541 
17542 
m68k_op_move_8_ai_al(void)17543 static void m68k_op_move_8_ai_al(void)
17544 {
17545 	uint res = OPER_AL_8();
17546 	uint ea = EA_AX_AI_8();
17547 
17548 	m68ki_write_8(ea, res);
17549 
17550 	FLAG_N = NFLAG_8(res);
17551 	FLAG_Z = res;
17552 	FLAG_V = VFLAG_CLEAR;
17553 	FLAG_C = CFLAG_CLEAR;
17554 }
17555 
17556 
m68k_op_move_8_ai_pcdi(void)17557 static void m68k_op_move_8_ai_pcdi(void)
17558 {
17559 	uint res = OPER_PCDI_8();
17560 	uint ea = EA_AX_AI_8();
17561 
17562 	m68ki_write_8(ea, res);
17563 
17564 	FLAG_N = NFLAG_8(res);
17565 	FLAG_Z = res;
17566 	FLAG_V = VFLAG_CLEAR;
17567 	FLAG_C = CFLAG_CLEAR;
17568 }
17569 
17570 
m68k_op_move_8_ai_pcix(void)17571 static void m68k_op_move_8_ai_pcix(void)
17572 {
17573 	uint res = OPER_PCIX_8();
17574 	uint ea = EA_AX_AI_8();
17575 
17576 	m68ki_write_8(ea, res);
17577 
17578 	FLAG_N = NFLAG_8(res);
17579 	FLAG_Z = res;
17580 	FLAG_V = VFLAG_CLEAR;
17581 	FLAG_C = CFLAG_CLEAR;
17582 }
17583 
17584 
m68k_op_move_8_ai_i(void)17585 static void m68k_op_move_8_ai_i(void)
17586 {
17587 	uint res = OPER_I_8();
17588 	uint ea = EA_AX_AI_8();
17589 
17590 	m68ki_write_8(ea, res);
17591 
17592 	FLAG_N = NFLAG_8(res);
17593 	FLAG_Z = res;
17594 	FLAG_V = VFLAG_CLEAR;
17595 	FLAG_C = CFLAG_CLEAR;
17596 }
17597 
17598 
m68k_op_move_8_pi7_d(void)17599 static void m68k_op_move_8_pi7_d(void)
17600 {
17601 	uint res = MASK_OUT_ABOVE_8(DY);
17602 	uint ea = EA_A7_PI_8();
17603 
17604 	m68ki_write_8(ea, res);
17605 
17606 	FLAG_N = NFLAG_8(res);
17607 	FLAG_Z = res;
17608 	FLAG_V = VFLAG_CLEAR;
17609 	FLAG_C = CFLAG_CLEAR;
17610 }
17611 
17612 
m68k_op_move_8_pi_d(void)17613 static void m68k_op_move_8_pi_d(void)
17614 {
17615 	uint res = MASK_OUT_ABOVE_8(DY);
17616 	uint ea = EA_AX_PI_8();
17617 
17618 	m68ki_write_8(ea, res);
17619 
17620 	FLAG_N = NFLAG_8(res);
17621 	FLAG_Z = res;
17622 	FLAG_V = VFLAG_CLEAR;
17623 	FLAG_C = CFLAG_CLEAR;
17624 }
17625 
17626 
m68k_op_move_8_pi7_ai(void)17627 static void m68k_op_move_8_pi7_ai(void)
17628 {
17629 	uint res = OPER_AY_AI_8();
17630 	uint ea = EA_A7_PI_8();
17631 
17632 	m68ki_write_8(ea, res);
17633 
17634 	FLAG_N = NFLAG_8(res);
17635 	FLAG_Z = res;
17636 	FLAG_V = VFLAG_CLEAR;
17637 	FLAG_C = CFLAG_CLEAR;
17638 }
17639 
17640 
m68k_op_move_8_pi7_pi(void)17641 static void m68k_op_move_8_pi7_pi(void)
17642 {
17643 	uint res = OPER_AY_PI_8();
17644 	uint ea = EA_A7_PI_8();
17645 
17646 	m68ki_write_8(ea, res);
17647 
17648 	FLAG_N = NFLAG_8(res);
17649 	FLAG_Z = res;
17650 	FLAG_V = VFLAG_CLEAR;
17651 	FLAG_C = CFLAG_CLEAR;
17652 }
17653 
17654 
m68k_op_move_8_pi7_pi7(void)17655 static void m68k_op_move_8_pi7_pi7(void)
17656 {
17657 	uint res = OPER_A7_PI_8();
17658 	uint ea = EA_A7_PI_8();
17659 
17660 	m68ki_write_8(ea, res);
17661 
17662 	FLAG_N = NFLAG_8(res);
17663 	FLAG_Z = res;
17664 	FLAG_V = VFLAG_CLEAR;
17665 	FLAG_C = CFLAG_CLEAR;
17666 }
17667 
17668 
m68k_op_move_8_pi7_pd(void)17669 static void m68k_op_move_8_pi7_pd(void)
17670 {
17671 	uint res = OPER_AY_PD_8();
17672 	uint ea = EA_A7_PI_8();
17673 
17674 	m68ki_write_8(ea, res);
17675 
17676 	FLAG_N = NFLAG_8(res);
17677 	FLAG_Z = res;
17678 	FLAG_V = VFLAG_CLEAR;
17679 	FLAG_C = CFLAG_CLEAR;
17680 }
17681 
17682 
m68k_op_move_8_pi7_pd7(void)17683 static void m68k_op_move_8_pi7_pd7(void)
17684 {
17685 	uint res = OPER_A7_PD_8();
17686 	uint ea = EA_A7_PI_8();
17687 
17688 	m68ki_write_8(ea, res);
17689 
17690 	FLAG_N = NFLAG_8(res);
17691 	FLAG_Z = res;
17692 	FLAG_V = VFLAG_CLEAR;
17693 	FLAG_C = CFLAG_CLEAR;
17694 }
17695 
17696 
m68k_op_move_8_pi7_di(void)17697 static void m68k_op_move_8_pi7_di(void)
17698 {
17699 	uint res = OPER_AY_DI_8();
17700 	uint ea = EA_A7_PI_8();
17701 
17702 	m68ki_write_8(ea, res);
17703 
17704 	FLAG_N = NFLAG_8(res);
17705 	FLAG_Z = res;
17706 	FLAG_V = VFLAG_CLEAR;
17707 	FLAG_C = CFLAG_CLEAR;
17708 }
17709 
17710 
m68k_op_move_8_pi7_ix(void)17711 static void m68k_op_move_8_pi7_ix(void)
17712 {
17713 	uint res = OPER_AY_IX_8();
17714 	uint ea = EA_A7_PI_8();
17715 
17716 	m68ki_write_8(ea, res);
17717 
17718 	FLAG_N = NFLAG_8(res);
17719 	FLAG_Z = res;
17720 	FLAG_V = VFLAG_CLEAR;
17721 	FLAG_C = CFLAG_CLEAR;
17722 }
17723 
17724 
m68k_op_move_8_pi7_aw(void)17725 static void m68k_op_move_8_pi7_aw(void)
17726 {
17727 	uint res = OPER_AW_8();
17728 	uint ea = EA_A7_PI_8();
17729 
17730 	m68ki_write_8(ea, res);
17731 
17732 	FLAG_N = NFLAG_8(res);
17733 	FLAG_Z = res;
17734 	FLAG_V = VFLAG_CLEAR;
17735 	FLAG_C = CFLAG_CLEAR;
17736 }
17737 
17738 
m68k_op_move_8_pi7_al(void)17739 static void m68k_op_move_8_pi7_al(void)
17740 {
17741 	uint res = OPER_AL_8();
17742 	uint ea = EA_A7_PI_8();
17743 
17744 	m68ki_write_8(ea, res);
17745 
17746 	FLAG_N = NFLAG_8(res);
17747 	FLAG_Z = res;
17748 	FLAG_V = VFLAG_CLEAR;
17749 	FLAG_C = CFLAG_CLEAR;
17750 }
17751 
17752 
m68k_op_move_8_pi7_pcdi(void)17753 static void m68k_op_move_8_pi7_pcdi(void)
17754 {
17755 	uint res = OPER_PCDI_8();
17756 	uint ea = EA_A7_PI_8();
17757 
17758 	m68ki_write_8(ea, res);
17759 
17760 	FLAG_N = NFLAG_8(res);
17761 	FLAG_Z = res;
17762 	FLAG_V = VFLAG_CLEAR;
17763 	FLAG_C = CFLAG_CLEAR;
17764 }
17765 
17766 
m68k_op_move_8_pi7_pcix(void)17767 static void m68k_op_move_8_pi7_pcix(void)
17768 {
17769 	uint res = OPER_PCIX_8();
17770 	uint ea = EA_A7_PI_8();
17771 
17772 	m68ki_write_8(ea, res);
17773 
17774 	FLAG_N = NFLAG_8(res);
17775 	FLAG_Z = res;
17776 	FLAG_V = VFLAG_CLEAR;
17777 	FLAG_C = CFLAG_CLEAR;
17778 }
17779 
17780 
m68k_op_move_8_pi7_i(void)17781 static void m68k_op_move_8_pi7_i(void)
17782 {
17783 	uint res = OPER_I_8();
17784 	uint ea = EA_A7_PI_8();
17785 
17786 	m68ki_write_8(ea, res);
17787 
17788 	FLAG_N = NFLAG_8(res);
17789 	FLAG_Z = res;
17790 	FLAG_V = VFLAG_CLEAR;
17791 	FLAG_C = CFLAG_CLEAR;
17792 }
17793 
17794 
m68k_op_move_8_pi_ai(void)17795 static void m68k_op_move_8_pi_ai(void)
17796 {
17797 	uint res = OPER_AY_AI_8();
17798 	uint ea = EA_AX_PI_8();
17799 
17800 	m68ki_write_8(ea, res);
17801 
17802 	FLAG_N = NFLAG_8(res);
17803 	FLAG_Z = res;
17804 	FLAG_V = VFLAG_CLEAR;
17805 	FLAG_C = CFLAG_CLEAR;
17806 }
17807 
17808 
m68k_op_move_8_pi_pi(void)17809 static void m68k_op_move_8_pi_pi(void)
17810 {
17811 	uint res = OPER_AY_PI_8();
17812 	uint ea = EA_AX_PI_8();
17813 
17814 	m68ki_write_8(ea, res);
17815 
17816 	FLAG_N = NFLAG_8(res);
17817 	FLAG_Z = res;
17818 	FLAG_V = VFLAG_CLEAR;
17819 	FLAG_C = CFLAG_CLEAR;
17820 }
17821 
17822 
m68k_op_move_8_pi_pi7(void)17823 static void m68k_op_move_8_pi_pi7(void)
17824 {
17825 	uint res = OPER_A7_PI_8();
17826 	uint ea = EA_AX_PI_8();
17827 
17828 	m68ki_write_8(ea, res);
17829 
17830 	FLAG_N = NFLAG_8(res);
17831 	FLAG_Z = res;
17832 	FLAG_V = VFLAG_CLEAR;
17833 	FLAG_C = CFLAG_CLEAR;
17834 }
17835 
17836 
m68k_op_move_8_pi_pd(void)17837 static void m68k_op_move_8_pi_pd(void)
17838 {
17839 	uint res = OPER_AY_PD_8();
17840 	uint ea = EA_AX_PI_8();
17841 
17842 	m68ki_write_8(ea, res);
17843 
17844 	FLAG_N = NFLAG_8(res);
17845 	FLAG_Z = res;
17846 	FLAG_V = VFLAG_CLEAR;
17847 	FLAG_C = CFLAG_CLEAR;
17848 }
17849 
17850 
m68k_op_move_8_pi_pd7(void)17851 static void m68k_op_move_8_pi_pd7(void)
17852 {
17853 	uint res = OPER_A7_PD_8();
17854 	uint ea = EA_AX_PI_8();
17855 
17856 	m68ki_write_8(ea, res);
17857 
17858 	FLAG_N = NFLAG_8(res);
17859 	FLAG_Z = res;
17860 	FLAG_V = VFLAG_CLEAR;
17861 	FLAG_C = CFLAG_CLEAR;
17862 }
17863 
17864 
m68k_op_move_8_pi_di(void)17865 static void m68k_op_move_8_pi_di(void)
17866 {
17867 	uint res = OPER_AY_DI_8();
17868 	uint ea = EA_AX_PI_8();
17869 
17870 	m68ki_write_8(ea, res);
17871 
17872 	FLAG_N = NFLAG_8(res);
17873 	FLAG_Z = res;
17874 	FLAG_V = VFLAG_CLEAR;
17875 	FLAG_C = CFLAG_CLEAR;
17876 }
17877 
17878 
m68k_op_move_8_pi_ix(void)17879 static void m68k_op_move_8_pi_ix(void)
17880 {
17881 	uint res = OPER_AY_IX_8();
17882 	uint ea = EA_AX_PI_8();
17883 
17884 	m68ki_write_8(ea, res);
17885 
17886 	FLAG_N = NFLAG_8(res);
17887 	FLAG_Z = res;
17888 	FLAG_V = VFLAG_CLEAR;
17889 	FLAG_C = CFLAG_CLEAR;
17890 }
17891 
17892 
m68k_op_move_8_pi_aw(void)17893 static void m68k_op_move_8_pi_aw(void)
17894 {
17895 	uint res = OPER_AW_8();
17896 	uint ea = EA_AX_PI_8();
17897 
17898 	m68ki_write_8(ea, res);
17899 
17900 	FLAG_N = NFLAG_8(res);
17901 	FLAG_Z = res;
17902 	FLAG_V = VFLAG_CLEAR;
17903 	FLAG_C = CFLAG_CLEAR;
17904 }
17905 
17906 
m68k_op_move_8_pi_al(void)17907 static void m68k_op_move_8_pi_al(void)
17908 {
17909 	uint res = OPER_AL_8();
17910 	uint ea = EA_AX_PI_8();
17911 
17912 	m68ki_write_8(ea, res);
17913 
17914 	FLAG_N = NFLAG_8(res);
17915 	FLAG_Z = res;
17916 	FLAG_V = VFLAG_CLEAR;
17917 	FLAG_C = CFLAG_CLEAR;
17918 }
17919 
17920 
m68k_op_move_8_pi_pcdi(void)17921 static void m68k_op_move_8_pi_pcdi(void)
17922 {
17923 	uint res = OPER_PCDI_8();
17924 	uint ea = EA_AX_PI_8();
17925 
17926 	m68ki_write_8(ea, res);
17927 
17928 	FLAG_N = NFLAG_8(res);
17929 	FLAG_Z = res;
17930 	FLAG_V = VFLAG_CLEAR;
17931 	FLAG_C = CFLAG_CLEAR;
17932 }
17933 
17934 
m68k_op_move_8_pi_pcix(void)17935 static void m68k_op_move_8_pi_pcix(void)
17936 {
17937 	uint res = OPER_PCIX_8();
17938 	uint ea = EA_AX_PI_8();
17939 
17940 	m68ki_write_8(ea, res);
17941 
17942 	FLAG_N = NFLAG_8(res);
17943 	FLAG_Z = res;
17944 	FLAG_V = VFLAG_CLEAR;
17945 	FLAG_C = CFLAG_CLEAR;
17946 }
17947 
17948 
m68k_op_move_8_pi_i(void)17949 static void m68k_op_move_8_pi_i(void)
17950 {
17951 	uint res = OPER_I_8();
17952 	uint ea = EA_AX_PI_8();
17953 
17954 	m68ki_write_8(ea, res);
17955 
17956 	FLAG_N = NFLAG_8(res);
17957 	FLAG_Z = res;
17958 	FLAG_V = VFLAG_CLEAR;
17959 	FLAG_C = CFLAG_CLEAR;
17960 }
17961 
17962 
m68k_op_move_8_pd7_d(void)17963 static void m68k_op_move_8_pd7_d(void)
17964 {
17965 	uint res = MASK_OUT_ABOVE_8(DY);
17966 	uint ea = EA_A7_PD_8();
17967 
17968 	m68ki_write_8(ea, res);
17969 
17970 	FLAG_N = NFLAG_8(res);
17971 	FLAG_Z = res;
17972 	FLAG_V = VFLAG_CLEAR;
17973 	FLAG_C = CFLAG_CLEAR;
17974 }
17975 
17976 
m68k_op_move_8_pd_d(void)17977 static void m68k_op_move_8_pd_d(void)
17978 {
17979 	uint res = MASK_OUT_ABOVE_8(DY);
17980 	uint ea = EA_AX_PD_8();
17981 
17982 	m68ki_write_8(ea, res);
17983 
17984 	FLAG_N = NFLAG_8(res);
17985 	FLAG_Z = res;
17986 	FLAG_V = VFLAG_CLEAR;
17987 	FLAG_C = CFLAG_CLEAR;
17988 }
17989 
17990 
m68k_op_move_8_pd7_ai(void)17991 static void m68k_op_move_8_pd7_ai(void)
17992 {
17993 	uint res = OPER_AY_AI_8();
17994 	uint ea = EA_A7_PD_8();
17995 
17996 	m68ki_write_8(ea, res);
17997 
17998 	FLAG_N = NFLAG_8(res);
17999 	FLAG_Z = res;
18000 	FLAG_V = VFLAG_CLEAR;
18001 	FLAG_C = CFLAG_CLEAR;
18002 }
18003 
18004 
m68k_op_move_8_pd7_pi(void)18005 static void m68k_op_move_8_pd7_pi(void)
18006 {
18007 	uint res = OPER_AY_PI_8();
18008 	uint ea = EA_A7_PD_8();
18009 
18010 	m68ki_write_8(ea, res);
18011 
18012 	FLAG_N = NFLAG_8(res);
18013 	FLAG_Z = res;
18014 	FLAG_V = VFLAG_CLEAR;
18015 	FLAG_C = CFLAG_CLEAR;
18016 }
18017 
18018 
m68k_op_move_8_pd7_pi7(void)18019 static void m68k_op_move_8_pd7_pi7(void)
18020 {
18021 	uint res = OPER_A7_PI_8();
18022 	uint ea = EA_A7_PD_8();
18023 
18024 	m68ki_write_8(ea, res);
18025 
18026 	FLAG_N = NFLAG_8(res);
18027 	FLAG_Z = res;
18028 	FLAG_V = VFLAG_CLEAR;
18029 	FLAG_C = CFLAG_CLEAR;
18030 }
18031 
18032 
m68k_op_move_8_pd7_pd(void)18033 static void m68k_op_move_8_pd7_pd(void)
18034 {
18035 	uint res = OPER_AY_PD_8();
18036 	uint ea = EA_A7_PD_8();
18037 
18038 	m68ki_write_8(ea, res);
18039 
18040 	FLAG_N = NFLAG_8(res);
18041 	FLAG_Z = res;
18042 	FLAG_V = VFLAG_CLEAR;
18043 	FLAG_C = CFLAG_CLEAR;
18044 }
18045 
18046 
m68k_op_move_8_pd7_pd7(void)18047 static void m68k_op_move_8_pd7_pd7(void)
18048 {
18049 	uint res = OPER_A7_PD_8();
18050 	uint ea = EA_A7_PD_8();
18051 
18052 	m68ki_write_8(ea, res);
18053 
18054 	FLAG_N = NFLAG_8(res);
18055 	FLAG_Z = res;
18056 	FLAG_V = VFLAG_CLEAR;
18057 	FLAG_C = CFLAG_CLEAR;
18058 }
18059 
18060 
m68k_op_move_8_pd7_di(void)18061 static void m68k_op_move_8_pd7_di(void)
18062 {
18063 	uint res = OPER_AY_DI_8();
18064 	uint ea = EA_A7_PD_8();
18065 
18066 	m68ki_write_8(ea, res);
18067 
18068 	FLAG_N = NFLAG_8(res);
18069 	FLAG_Z = res;
18070 	FLAG_V = VFLAG_CLEAR;
18071 	FLAG_C = CFLAG_CLEAR;
18072 }
18073 
18074 
m68k_op_move_8_pd7_ix(void)18075 static void m68k_op_move_8_pd7_ix(void)
18076 {
18077 	uint res = OPER_AY_IX_8();
18078 	uint ea = EA_A7_PD_8();
18079 
18080 	m68ki_write_8(ea, res);
18081 
18082 	FLAG_N = NFLAG_8(res);
18083 	FLAG_Z = res;
18084 	FLAG_V = VFLAG_CLEAR;
18085 	FLAG_C = CFLAG_CLEAR;
18086 }
18087 
18088 
m68k_op_move_8_pd7_aw(void)18089 static void m68k_op_move_8_pd7_aw(void)
18090 {
18091 	uint res = OPER_AW_8();
18092 	uint ea = EA_A7_PD_8();
18093 
18094 	m68ki_write_8(ea, res);
18095 
18096 	FLAG_N = NFLAG_8(res);
18097 	FLAG_Z = res;
18098 	FLAG_V = VFLAG_CLEAR;
18099 	FLAG_C = CFLAG_CLEAR;
18100 }
18101 
18102 
m68k_op_move_8_pd7_al(void)18103 static void m68k_op_move_8_pd7_al(void)
18104 {
18105 	uint res = OPER_AL_8();
18106 	uint ea = EA_A7_PD_8();
18107 
18108 	m68ki_write_8(ea, res);
18109 
18110 	FLAG_N = NFLAG_8(res);
18111 	FLAG_Z = res;
18112 	FLAG_V = VFLAG_CLEAR;
18113 	FLAG_C = CFLAG_CLEAR;
18114 }
18115 
18116 
m68k_op_move_8_pd7_pcdi(void)18117 static void m68k_op_move_8_pd7_pcdi(void)
18118 {
18119 	uint res = OPER_PCDI_8();
18120 	uint ea = EA_A7_PD_8();
18121 
18122 	m68ki_write_8(ea, res);
18123 
18124 	FLAG_N = NFLAG_8(res);
18125 	FLAG_Z = res;
18126 	FLAG_V = VFLAG_CLEAR;
18127 	FLAG_C = CFLAG_CLEAR;
18128 }
18129 
18130 
m68k_op_move_8_pd7_pcix(void)18131 static void m68k_op_move_8_pd7_pcix(void)
18132 {
18133 	uint res = OPER_PCIX_8();
18134 	uint ea = EA_A7_PD_8();
18135 
18136 	m68ki_write_8(ea, res);
18137 
18138 	FLAG_N = NFLAG_8(res);
18139 	FLAG_Z = res;
18140 	FLAG_V = VFLAG_CLEAR;
18141 	FLAG_C = CFLAG_CLEAR;
18142 }
18143 
18144 
m68k_op_move_8_pd7_i(void)18145 static void m68k_op_move_8_pd7_i(void)
18146 {
18147 	uint res = OPER_I_8();
18148 	uint ea = EA_A7_PD_8();
18149 
18150 	m68ki_write_8(ea, res);
18151 
18152 	FLAG_N = NFLAG_8(res);
18153 	FLAG_Z = res;
18154 	FLAG_V = VFLAG_CLEAR;
18155 	FLAG_C = CFLAG_CLEAR;
18156 }
18157 
18158 
m68k_op_move_8_pd_ai(void)18159 static void m68k_op_move_8_pd_ai(void)
18160 {
18161 	uint res = OPER_AY_AI_8();
18162 	uint ea = EA_AX_PD_8();
18163 
18164 	m68ki_write_8(ea, res);
18165 
18166 	FLAG_N = NFLAG_8(res);
18167 	FLAG_Z = res;
18168 	FLAG_V = VFLAG_CLEAR;
18169 	FLAG_C = CFLAG_CLEAR;
18170 }
18171 
18172 
m68k_op_move_8_pd_pi(void)18173 static void m68k_op_move_8_pd_pi(void)
18174 {
18175 	uint res = OPER_AY_PI_8();
18176 	uint ea = EA_AX_PD_8();
18177 
18178 	m68ki_write_8(ea, res);
18179 
18180 	FLAG_N = NFLAG_8(res);
18181 	FLAG_Z = res;
18182 	FLAG_V = VFLAG_CLEAR;
18183 	FLAG_C = CFLAG_CLEAR;
18184 }
18185 
18186 
m68k_op_move_8_pd_pi7(void)18187 static void m68k_op_move_8_pd_pi7(void)
18188 {
18189 	uint res = OPER_A7_PI_8();
18190 	uint ea = EA_AX_PD_8();
18191 
18192 	m68ki_write_8(ea, res);
18193 
18194 	FLAG_N = NFLAG_8(res);
18195 	FLAG_Z = res;
18196 	FLAG_V = VFLAG_CLEAR;
18197 	FLAG_C = CFLAG_CLEAR;
18198 }
18199 
18200 
m68k_op_move_8_pd_pd(void)18201 static void m68k_op_move_8_pd_pd(void)
18202 {
18203 	uint res = OPER_AY_PD_8();
18204 	uint ea = EA_AX_PD_8();
18205 
18206 	m68ki_write_8(ea, res);
18207 
18208 	FLAG_N = NFLAG_8(res);
18209 	FLAG_Z = res;
18210 	FLAG_V = VFLAG_CLEAR;
18211 	FLAG_C = CFLAG_CLEAR;
18212 }
18213 
18214 
m68k_op_move_8_pd_pd7(void)18215 static void m68k_op_move_8_pd_pd7(void)
18216 {
18217 	uint res = OPER_A7_PD_8();
18218 	uint ea = EA_AX_PD_8();
18219 
18220 	m68ki_write_8(ea, res);
18221 
18222 	FLAG_N = NFLAG_8(res);
18223 	FLAG_Z = res;
18224 	FLAG_V = VFLAG_CLEAR;
18225 	FLAG_C = CFLAG_CLEAR;
18226 }
18227 
18228 
m68k_op_move_8_pd_di(void)18229 static void m68k_op_move_8_pd_di(void)
18230 {
18231 	uint res = OPER_AY_DI_8();
18232 	uint ea = EA_AX_PD_8();
18233 
18234 	m68ki_write_8(ea, res);
18235 
18236 	FLAG_N = NFLAG_8(res);
18237 	FLAG_Z = res;
18238 	FLAG_V = VFLAG_CLEAR;
18239 	FLAG_C = CFLAG_CLEAR;
18240 }
18241 
18242 
m68k_op_move_8_pd_ix(void)18243 static void m68k_op_move_8_pd_ix(void)
18244 {
18245 	uint res = OPER_AY_IX_8();
18246 	uint ea = EA_AX_PD_8();
18247 
18248 	m68ki_write_8(ea, res);
18249 
18250 	FLAG_N = NFLAG_8(res);
18251 	FLAG_Z = res;
18252 	FLAG_V = VFLAG_CLEAR;
18253 	FLAG_C = CFLAG_CLEAR;
18254 }
18255 
18256 
m68k_op_move_8_pd_aw(void)18257 static void m68k_op_move_8_pd_aw(void)
18258 {
18259 	uint res = OPER_AW_8();
18260 	uint ea = EA_AX_PD_8();
18261 
18262 	m68ki_write_8(ea, res);
18263 
18264 	FLAG_N = NFLAG_8(res);
18265 	FLAG_Z = res;
18266 	FLAG_V = VFLAG_CLEAR;
18267 	FLAG_C = CFLAG_CLEAR;
18268 }
18269 
18270 
m68k_op_move_8_pd_al(void)18271 static void m68k_op_move_8_pd_al(void)
18272 {
18273 	uint res = OPER_AL_8();
18274 	uint ea = EA_AX_PD_8();
18275 
18276 	m68ki_write_8(ea, res);
18277 
18278 	FLAG_N = NFLAG_8(res);
18279 	FLAG_Z = res;
18280 	FLAG_V = VFLAG_CLEAR;
18281 	FLAG_C = CFLAG_CLEAR;
18282 }
18283 
18284 
m68k_op_move_8_pd_pcdi(void)18285 static void m68k_op_move_8_pd_pcdi(void)
18286 {
18287 	uint res = OPER_PCDI_8();
18288 	uint ea = EA_AX_PD_8();
18289 
18290 	m68ki_write_8(ea, res);
18291 
18292 	FLAG_N = NFLAG_8(res);
18293 	FLAG_Z = res;
18294 	FLAG_V = VFLAG_CLEAR;
18295 	FLAG_C = CFLAG_CLEAR;
18296 }
18297 
18298 
m68k_op_move_8_pd_pcix(void)18299 static void m68k_op_move_8_pd_pcix(void)
18300 {
18301 	uint res = OPER_PCIX_8();
18302 	uint ea = EA_AX_PD_8();
18303 
18304 	m68ki_write_8(ea, res);
18305 
18306 	FLAG_N = NFLAG_8(res);
18307 	FLAG_Z = res;
18308 	FLAG_V = VFLAG_CLEAR;
18309 	FLAG_C = CFLAG_CLEAR;
18310 }
18311 
18312 
m68k_op_move_8_pd_i(void)18313 static void m68k_op_move_8_pd_i(void)
18314 {
18315 	uint res = OPER_I_8();
18316 	uint ea = EA_AX_PD_8();
18317 
18318 	m68ki_write_8(ea, res);
18319 
18320 	FLAG_N = NFLAG_8(res);
18321 	FLAG_Z = res;
18322 	FLAG_V = VFLAG_CLEAR;
18323 	FLAG_C = CFLAG_CLEAR;
18324 }
18325 
18326 
m68k_op_move_8_di_d(void)18327 static void m68k_op_move_8_di_d(void)
18328 {
18329 	uint res = MASK_OUT_ABOVE_8(DY);
18330 	uint ea = EA_AX_DI_8();
18331 
18332 	m68ki_write_8(ea, res);
18333 
18334 	FLAG_N = NFLAG_8(res);
18335 	FLAG_Z = res;
18336 	FLAG_V = VFLAG_CLEAR;
18337 	FLAG_C = CFLAG_CLEAR;
18338 }
18339 
18340 
m68k_op_move_8_di_ai(void)18341 static void m68k_op_move_8_di_ai(void)
18342 {
18343 	uint res = OPER_AY_AI_8();
18344 	uint ea = EA_AX_DI_8();
18345 
18346 	m68ki_write_8(ea, res);
18347 
18348 	FLAG_N = NFLAG_8(res);
18349 	FLAG_Z = res;
18350 	FLAG_V = VFLAG_CLEAR;
18351 	FLAG_C = CFLAG_CLEAR;
18352 }
18353 
18354 
m68k_op_move_8_di_pi(void)18355 static void m68k_op_move_8_di_pi(void)
18356 {
18357 	uint res = OPER_AY_PI_8();
18358 	uint ea = EA_AX_DI_8();
18359 
18360 	m68ki_write_8(ea, res);
18361 
18362 	FLAG_N = NFLAG_8(res);
18363 	FLAG_Z = res;
18364 	FLAG_V = VFLAG_CLEAR;
18365 	FLAG_C = CFLAG_CLEAR;
18366 }
18367 
18368 
m68k_op_move_8_di_pi7(void)18369 static void m68k_op_move_8_di_pi7(void)
18370 {
18371 	uint res = OPER_A7_PI_8();
18372 	uint ea = EA_AX_DI_8();
18373 
18374 	m68ki_write_8(ea, res);
18375 
18376 	FLAG_N = NFLAG_8(res);
18377 	FLAG_Z = res;
18378 	FLAG_V = VFLAG_CLEAR;
18379 	FLAG_C = CFLAG_CLEAR;
18380 }
18381 
18382 
m68k_op_move_8_di_pd(void)18383 static void m68k_op_move_8_di_pd(void)
18384 {
18385 	uint res = OPER_AY_PD_8();
18386 	uint ea = EA_AX_DI_8();
18387 
18388 	m68ki_write_8(ea, res);
18389 
18390 	FLAG_N = NFLAG_8(res);
18391 	FLAG_Z = res;
18392 	FLAG_V = VFLAG_CLEAR;
18393 	FLAG_C = CFLAG_CLEAR;
18394 }
18395 
18396 
m68k_op_move_8_di_pd7(void)18397 static void m68k_op_move_8_di_pd7(void)
18398 {
18399 	uint res = OPER_A7_PD_8();
18400 	uint ea = EA_AX_DI_8();
18401 
18402 	m68ki_write_8(ea, res);
18403 
18404 	FLAG_N = NFLAG_8(res);
18405 	FLAG_Z = res;
18406 	FLAG_V = VFLAG_CLEAR;
18407 	FLAG_C = CFLAG_CLEAR;
18408 }
18409 
18410 
m68k_op_move_8_di_di(void)18411 static void m68k_op_move_8_di_di(void)
18412 {
18413 	uint res = OPER_AY_DI_8();
18414 	uint ea = EA_AX_DI_8();
18415 
18416 	m68ki_write_8(ea, res);
18417 
18418 	FLAG_N = NFLAG_8(res);
18419 	FLAG_Z = res;
18420 	FLAG_V = VFLAG_CLEAR;
18421 	FLAG_C = CFLAG_CLEAR;
18422 }
18423 
18424 
m68k_op_move_8_di_ix(void)18425 static void m68k_op_move_8_di_ix(void)
18426 {
18427 	uint res = OPER_AY_IX_8();
18428 	uint ea = EA_AX_DI_8();
18429 
18430 	m68ki_write_8(ea, res);
18431 
18432 	FLAG_N = NFLAG_8(res);
18433 	FLAG_Z = res;
18434 	FLAG_V = VFLAG_CLEAR;
18435 	FLAG_C = CFLAG_CLEAR;
18436 }
18437 
18438 
m68k_op_move_8_di_aw(void)18439 static void m68k_op_move_8_di_aw(void)
18440 {
18441 	uint res = OPER_AW_8();
18442 	uint ea = EA_AX_DI_8();
18443 
18444 	m68ki_write_8(ea, res);
18445 
18446 	FLAG_N = NFLAG_8(res);
18447 	FLAG_Z = res;
18448 	FLAG_V = VFLAG_CLEAR;
18449 	FLAG_C = CFLAG_CLEAR;
18450 }
18451 
18452 
m68k_op_move_8_di_al(void)18453 static void m68k_op_move_8_di_al(void)
18454 {
18455 	uint res = OPER_AL_8();
18456 	uint ea = EA_AX_DI_8();
18457 
18458 	m68ki_write_8(ea, res);
18459 
18460 	FLAG_N = NFLAG_8(res);
18461 	FLAG_Z = res;
18462 	FLAG_V = VFLAG_CLEAR;
18463 	FLAG_C = CFLAG_CLEAR;
18464 }
18465 
18466 
m68k_op_move_8_di_pcdi(void)18467 static void m68k_op_move_8_di_pcdi(void)
18468 {
18469 	uint res = OPER_PCDI_8();
18470 	uint ea = EA_AX_DI_8();
18471 
18472 	m68ki_write_8(ea, res);
18473 
18474 	FLAG_N = NFLAG_8(res);
18475 	FLAG_Z = res;
18476 	FLAG_V = VFLAG_CLEAR;
18477 	FLAG_C = CFLAG_CLEAR;
18478 }
18479 
18480 
m68k_op_move_8_di_pcix(void)18481 static void m68k_op_move_8_di_pcix(void)
18482 {
18483 	uint res = OPER_PCIX_8();
18484 	uint ea = EA_AX_DI_8();
18485 
18486 	m68ki_write_8(ea, res);
18487 
18488 	FLAG_N = NFLAG_8(res);
18489 	FLAG_Z = res;
18490 	FLAG_V = VFLAG_CLEAR;
18491 	FLAG_C = CFLAG_CLEAR;
18492 }
18493 
18494 
m68k_op_move_8_di_i(void)18495 static void m68k_op_move_8_di_i(void)
18496 {
18497 	uint res = OPER_I_8();
18498 	uint ea = EA_AX_DI_8();
18499 
18500 	m68ki_write_8(ea, res);
18501 
18502 	FLAG_N = NFLAG_8(res);
18503 	FLAG_Z = res;
18504 	FLAG_V = VFLAG_CLEAR;
18505 	FLAG_C = CFLAG_CLEAR;
18506 }
18507 
18508 
m68k_op_move_8_ix_d(void)18509 static void m68k_op_move_8_ix_d(void)
18510 {
18511 	uint res = MASK_OUT_ABOVE_8(DY);
18512 	uint ea = EA_AX_IX_8();
18513 
18514 	m68ki_write_8(ea, res);
18515 
18516 	FLAG_N = NFLAG_8(res);
18517 	FLAG_Z = res;
18518 	FLAG_V = VFLAG_CLEAR;
18519 	FLAG_C = CFLAG_CLEAR;
18520 }
18521 
18522 
m68k_op_move_8_ix_ai(void)18523 static void m68k_op_move_8_ix_ai(void)
18524 {
18525 	uint res = OPER_AY_AI_8();
18526 	uint ea = EA_AX_IX_8();
18527 
18528 	m68ki_write_8(ea, res);
18529 
18530 	FLAG_N = NFLAG_8(res);
18531 	FLAG_Z = res;
18532 	FLAG_V = VFLAG_CLEAR;
18533 	FLAG_C = CFLAG_CLEAR;
18534 }
18535 
18536 
m68k_op_move_8_ix_pi(void)18537 static void m68k_op_move_8_ix_pi(void)
18538 {
18539 	uint res = OPER_AY_PI_8();
18540 	uint ea = EA_AX_IX_8();
18541 
18542 	m68ki_write_8(ea, res);
18543 
18544 	FLAG_N = NFLAG_8(res);
18545 	FLAG_Z = res;
18546 	FLAG_V = VFLAG_CLEAR;
18547 	FLAG_C = CFLAG_CLEAR;
18548 }
18549 
18550 
m68k_op_move_8_ix_pi7(void)18551 static void m68k_op_move_8_ix_pi7(void)
18552 {
18553 	uint res = OPER_A7_PI_8();
18554 	uint ea = EA_AX_IX_8();
18555 
18556 	m68ki_write_8(ea, res);
18557 
18558 	FLAG_N = NFLAG_8(res);
18559 	FLAG_Z = res;
18560 	FLAG_V = VFLAG_CLEAR;
18561 	FLAG_C = CFLAG_CLEAR;
18562 }
18563 
18564 
m68k_op_move_8_ix_pd(void)18565 static void m68k_op_move_8_ix_pd(void)
18566 {
18567 	uint res = OPER_AY_PD_8();
18568 	uint ea = EA_AX_IX_8();
18569 
18570 	m68ki_write_8(ea, res);
18571 
18572 	FLAG_N = NFLAG_8(res);
18573 	FLAG_Z = res;
18574 	FLAG_V = VFLAG_CLEAR;
18575 	FLAG_C = CFLAG_CLEAR;
18576 }
18577 
18578 
m68k_op_move_8_ix_pd7(void)18579 static void m68k_op_move_8_ix_pd7(void)
18580 {
18581 	uint res = OPER_A7_PD_8();
18582 	uint ea = EA_AX_IX_8();
18583 
18584 	m68ki_write_8(ea, res);
18585 
18586 	FLAG_N = NFLAG_8(res);
18587 	FLAG_Z = res;
18588 	FLAG_V = VFLAG_CLEAR;
18589 	FLAG_C = CFLAG_CLEAR;
18590 }
18591 
18592 
m68k_op_move_8_ix_di(void)18593 static void m68k_op_move_8_ix_di(void)
18594 {
18595 	uint res = OPER_AY_DI_8();
18596 	uint ea = EA_AX_IX_8();
18597 
18598 	m68ki_write_8(ea, res);
18599 
18600 	FLAG_N = NFLAG_8(res);
18601 	FLAG_Z = res;
18602 	FLAG_V = VFLAG_CLEAR;
18603 	FLAG_C = CFLAG_CLEAR;
18604 }
18605 
18606 
m68k_op_move_8_ix_ix(void)18607 static void m68k_op_move_8_ix_ix(void)
18608 {
18609 	uint res = OPER_AY_IX_8();
18610 	uint ea = EA_AX_IX_8();
18611 
18612 	m68ki_write_8(ea, res);
18613 
18614 	FLAG_N = NFLAG_8(res);
18615 	FLAG_Z = res;
18616 	FLAG_V = VFLAG_CLEAR;
18617 	FLAG_C = CFLAG_CLEAR;
18618 }
18619 
18620 
m68k_op_move_8_ix_aw(void)18621 static void m68k_op_move_8_ix_aw(void)
18622 {
18623 	uint res = OPER_AW_8();
18624 	uint ea = EA_AX_IX_8();
18625 
18626 	m68ki_write_8(ea, res);
18627 
18628 	FLAG_N = NFLAG_8(res);
18629 	FLAG_Z = res;
18630 	FLAG_V = VFLAG_CLEAR;
18631 	FLAG_C = CFLAG_CLEAR;
18632 }
18633 
18634 
m68k_op_move_8_ix_al(void)18635 static void m68k_op_move_8_ix_al(void)
18636 {
18637 	uint res = OPER_AL_8();
18638 	uint ea = EA_AX_IX_8();
18639 
18640 	m68ki_write_8(ea, res);
18641 
18642 	FLAG_N = NFLAG_8(res);
18643 	FLAG_Z = res;
18644 	FLAG_V = VFLAG_CLEAR;
18645 	FLAG_C = CFLAG_CLEAR;
18646 }
18647 
18648 
m68k_op_move_8_ix_pcdi(void)18649 static void m68k_op_move_8_ix_pcdi(void)
18650 {
18651 	uint res = OPER_PCDI_8();
18652 	uint ea = EA_AX_IX_8();
18653 
18654 	m68ki_write_8(ea, res);
18655 
18656 	FLAG_N = NFLAG_8(res);
18657 	FLAG_Z = res;
18658 	FLAG_V = VFLAG_CLEAR;
18659 	FLAG_C = CFLAG_CLEAR;
18660 }
18661 
18662 
m68k_op_move_8_ix_pcix(void)18663 static void m68k_op_move_8_ix_pcix(void)
18664 {
18665 	uint res = OPER_PCIX_8();
18666 	uint ea = EA_AX_IX_8();
18667 
18668 	m68ki_write_8(ea, res);
18669 
18670 	FLAG_N = NFLAG_8(res);
18671 	FLAG_Z = res;
18672 	FLAG_V = VFLAG_CLEAR;
18673 	FLAG_C = CFLAG_CLEAR;
18674 }
18675 
18676 
m68k_op_move_8_ix_i(void)18677 static void m68k_op_move_8_ix_i(void)
18678 {
18679 	uint res = OPER_I_8();
18680 	uint ea = EA_AX_IX_8();
18681 
18682 	m68ki_write_8(ea, res);
18683 
18684 	FLAG_N = NFLAG_8(res);
18685 	FLAG_Z = res;
18686 	FLAG_V = VFLAG_CLEAR;
18687 	FLAG_C = CFLAG_CLEAR;
18688 }
18689 
18690 
m68k_op_move_8_aw_d(void)18691 static void m68k_op_move_8_aw_d(void)
18692 {
18693 	uint res = MASK_OUT_ABOVE_8(DY);
18694 	uint ea = EA_AW_8();
18695 
18696 	m68ki_write_8(ea, res);
18697 
18698 	FLAG_N = NFLAG_8(res);
18699 	FLAG_Z = res;
18700 	FLAG_V = VFLAG_CLEAR;
18701 	FLAG_C = CFLAG_CLEAR;
18702 }
18703 
18704 
m68k_op_move_8_aw_ai(void)18705 static void m68k_op_move_8_aw_ai(void)
18706 {
18707 	uint res = OPER_AY_AI_8();
18708 	uint ea = EA_AW_8();
18709 
18710 	m68ki_write_8(ea, res);
18711 
18712 	FLAG_N = NFLAG_8(res);
18713 	FLAG_Z = res;
18714 	FLAG_V = VFLAG_CLEAR;
18715 	FLAG_C = CFLAG_CLEAR;
18716 }
18717 
18718 
m68k_op_move_8_aw_pi(void)18719 static void m68k_op_move_8_aw_pi(void)
18720 {
18721 	uint res = OPER_AY_PI_8();
18722 	uint ea = EA_AW_8();
18723 
18724 	m68ki_write_8(ea, res);
18725 
18726 	FLAG_N = NFLAG_8(res);
18727 	FLAG_Z = res;
18728 	FLAG_V = VFLAG_CLEAR;
18729 	FLAG_C = CFLAG_CLEAR;
18730 }
18731 
18732 
m68k_op_move_8_aw_pi7(void)18733 static void m68k_op_move_8_aw_pi7(void)
18734 {
18735 	uint res = OPER_A7_PI_8();
18736 	uint ea = EA_AW_8();
18737 
18738 	m68ki_write_8(ea, res);
18739 
18740 	FLAG_N = NFLAG_8(res);
18741 	FLAG_Z = res;
18742 	FLAG_V = VFLAG_CLEAR;
18743 	FLAG_C = CFLAG_CLEAR;
18744 }
18745 
18746 
m68k_op_move_8_aw_pd(void)18747 static void m68k_op_move_8_aw_pd(void)
18748 {
18749 	uint res = OPER_AY_PD_8();
18750 	uint ea = EA_AW_8();
18751 
18752 	m68ki_write_8(ea, res);
18753 
18754 	FLAG_N = NFLAG_8(res);
18755 	FLAG_Z = res;
18756 	FLAG_V = VFLAG_CLEAR;
18757 	FLAG_C = CFLAG_CLEAR;
18758 }
18759 
18760 
m68k_op_move_8_aw_pd7(void)18761 static void m68k_op_move_8_aw_pd7(void)
18762 {
18763 	uint res = OPER_A7_PD_8();
18764 	uint ea = EA_AW_8();
18765 
18766 	m68ki_write_8(ea, res);
18767 
18768 	FLAG_N = NFLAG_8(res);
18769 	FLAG_Z = res;
18770 	FLAG_V = VFLAG_CLEAR;
18771 	FLAG_C = CFLAG_CLEAR;
18772 }
18773 
18774 
m68k_op_move_8_aw_di(void)18775 static void m68k_op_move_8_aw_di(void)
18776 {
18777 	uint res = OPER_AY_DI_8();
18778 	uint ea = EA_AW_8();
18779 
18780 	m68ki_write_8(ea, res);
18781 
18782 	FLAG_N = NFLAG_8(res);
18783 	FLAG_Z = res;
18784 	FLAG_V = VFLAG_CLEAR;
18785 	FLAG_C = CFLAG_CLEAR;
18786 }
18787 
18788 
m68k_op_move_8_aw_ix(void)18789 static void m68k_op_move_8_aw_ix(void)
18790 {
18791 	uint res = OPER_AY_IX_8();
18792 	uint ea = EA_AW_8();
18793 
18794 	m68ki_write_8(ea, res);
18795 
18796 	FLAG_N = NFLAG_8(res);
18797 	FLAG_Z = res;
18798 	FLAG_V = VFLAG_CLEAR;
18799 	FLAG_C = CFLAG_CLEAR;
18800 }
18801 
18802 
m68k_op_move_8_aw_aw(void)18803 static void m68k_op_move_8_aw_aw(void)
18804 {
18805 	uint res = OPER_AW_8();
18806 	uint ea = EA_AW_8();
18807 
18808 	m68ki_write_8(ea, res);
18809 
18810 	FLAG_N = NFLAG_8(res);
18811 	FLAG_Z = res;
18812 	FLAG_V = VFLAG_CLEAR;
18813 	FLAG_C = CFLAG_CLEAR;
18814 }
18815 
18816 
m68k_op_move_8_aw_al(void)18817 static void m68k_op_move_8_aw_al(void)
18818 {
18819 	uint res = OPER_AL_8();
18820 	uint ea = EA_AW_8();
18821 
18822 	m68ki_write_8(ea, res);
18823 
18824 	FLAG_N = NFLAG_8(res);
18825 	FLAG_Z = res;
18826 	FLAG_V = VFLAG_CLEAR;
18827 	FLAG_C = CFLAG_CLEAR;
18828 }
18829 
18830 
m68k_op_move_8_aw_pcdi(void)18831 static void m68k_op_move_8_aw_pcdi(void)
18832 {
18833 	uint res = OPER_PCDI_8();
18834 	uint ea = EA_AW_8();
18835 
18836 	m68ki_write_8(ea, res);
18837 
18838 	FLAG_N = NFLAG_8(res);
18839 	FLAG_Z = res;
18840 	FLAG_V = VFLAG_CLEAR;
18841 	FLAG_C = CFLAG_CLEAR;
18842 }
18843 
18844 
m68k_op_move_8_aw_pcix(void)18845 static void m68k_op_move_8_aw_pcix(void)
18846 {
18847 	uint res = OPER_PCIX_8();
18848 	uint ea = EA_AW_8();
18849 
18850 	m68ki_write_8(ea, res);
18851 
18852 	FLAG_N = NFLAG_8(res);
18853 	FLAG_Z = res;
18854 	FLAG_V = VFLAG_CLEAR;
18855 	FLAG_C = CFLAG_CLEAR;
18856 }
18857 
18858 
m68k_op_move_8_aw_i(void)18859 static void m68k_op_move_8_aw_i(void)
18860 {
18861 	uint res = OPER_I_8();
18862 	uint ea = EA_AW_8();
18863 
18864 	m68ki_write_8(ea, res);
18865 
18866 	FLAG_N = NFLAG_8(res);
18867 	FLAG_Z = res;
18868 	FLAG_V = VFLAG_CLEAR;
18869 	FLAG_C = CFLAG_CLEAR;
18870 }
18871 
18872 
m68k_op_move_8_al_d(void)18873 static void m68k_op_move_8_al_d(void)
18874 {
18875 	uint res = MASK_OUT_ABOVE_8(DY);
18876 	uint ea = EA_AL_8();
18877 
18878 	m68ki_write_8(ea, res);
18879 
18880 	FLAG_N = NFLAG_8(res);
18881 	FLAG_Z = res;
18882 	FLAG_V = VFLAG_CLEAR;
18883 	FLAG_C = CFLAG_CLEAR;
18884 }
18885 
18886 
m68k_op_move_8_al_ai(void)18887 static void m68k_op_move_8_al_ai(void)
18888 {
18889 	uint res = OPER_AY_AI_8();
18890 	uint ea = EA_AL_8();
18891 
18892 	m68ki_write_8(ea, res);
18893 
18894 	FLAG_N = NFLAG_8(res);
18895 	FLAG_Z = res;
18896 	FLAG_V = VFLAG_CLEAR;
18897 	FLAG_C = CFLAG_CLEAR;
18898 }
18899 
18900 
m68k_op_move_8_al_pi(void)18901 static void m68k_op_move_8_al_pi(void)
18902 {
18903 	uint res = OPER_AY_PI_8();
18904 	uint ea = EA_AL_8();
18905 
18906 	m68ki_write_8(ea, res);
18907 
18908 	FLAG_N = NFLAG_8(res);
18909 	FLAG_Z = res;
18910 	FLAG_V = VFLAG_CLEAR;
18911 	FLAG_C = CFLAG_CLEAR;
18912 }
18913 
18914 
m68k_op_move_8_al_pi7(void)18915 static void m68k_op_move_8_al_pi7(void)
18916 {
18917 	uint res = OPER_A7_PI_8();
18918 	uint ea = EA_AL_8();
18919 
18920 	m68ki_write_8(ea, res);
18921 
18922 	FLAG_N = NFLAG_8(res);
18923 	FLAG_Z = res;
18924 	FLAG_V = VFLAG_CLEAR;
18925 	FLAG_C = CFLAG_CLEAR;
18926 }
18927 
18928 
m68k_op_move_8_al_pd(void)18929 static void m68k_op_move_8_al_pd(void)
18930 {
18931 	uint res = OPER_AY_PD_8();
18932 	uint ea = EA_AL_8();
18933 
18934 	m68ki_write_8(ea, res);
18935 
18936 	FLAG_N = NFLAG_8(res);
18937 	FLAG_Z = res;
18938 	FLAG_V = VFLAG_CLEAR;
18939 	FLAG_C = CFLAG_CLEAR;
18940 }
18941 
18942 
m68k_op_move_8_al_pd7(void)18943 static void m68k_op_move_8_al_pd7(void)
18944 {
18945 	uint res = OPER_A7_PD_8();
18946 	uint ea = EA_AL_8();
18947 
18948 	m68ki_write_8(ea, res);
18949 
18950 	FLAG_N = NFLAG_8(res);
18951 	FLAG_Z = res;
18952 	FLAG_V = VFLAG_CLEAR;
18953 	FLAG_C = CFLAG_CLEAR;
18954 }
18955 
18956 
m68k_op_move_8_al_di(void)18957 static void m68k_op_move_8_al_di(void)
18958 {
18959 	uint res = OPER_AY_DI_8();
18960 	uint ea = EA_AL_8();
18961 
18962 	m68ki_write_8(ea, res);
18963 
18964 	FLAG_N = NFLAG_8(res);
18965 	FLAG_Z = res;
18966 	FLAG_V = VFLAG_CLEAR;
18967 	FLAG_C = CFLAG_CLEAR;
18968 }
18969 
18970 
m68k_op_move_8_al_ix(void)18971 static void m68k_op_move_8_al_ix(void)
18972 {
18973 	uint res = OPER_AY_IX_8();
18974 	uint ea = EA_AL_8();
18975 
18976 	m68ki_write_8(ea, res);
18977 
18978 	FLAG_N = NFLAG_8(res);
18979 	FLAG_Z = res;
18980 	FLAG_V = VFLAG_CLEAR;
18981 	FLAG_C = CFLAG_CLEAR;
18982 }
18983 
18984 
m68k_op_move_8_al_aw(void)18985 static void m68k_op_move_8_al_aw(void)
18986 {
18987 	uint res = OPER_AW_8();
18988 	uint ea = EA_AL_8();
18989 
18990 	m68ki_write_8(ea, res);
18991 
18992 	FLAG_N = NFLAG_8(res);
18993 	FLAG_Z = res;
18994 	FLAG_V = VFLAG_CLEAR;
18995 	FLAG_C = CFLAG_CLEAR;
18996 }
18997 
18998 
m68k_op_move_8_al_al(void)18999 static void m68k_op_move_8_al_al(void)
19000 {
19001 	uint res = OPER_AL_8();
19002 	uint ea = EA_AL_8();
19003 
19004 	m68ki_write_8(ea, res);
19005 
19006 	FLAG_N = NFLAG_8(res);
19007 	FLAG_Z = res;
19008 	FLAG_V = VFLAG_CLEAR;
19009 	FLAG_C = CFLAG_CLEAR;
19010 }
19011 
19012 
m68k_op_move_8_al_pcdi(void)19013 static void m68k_op_move_8_al_pcdi(void)
19014 {
19015 	uint res = OPER_PCDI_8();
19016 	uint ea = EA_AL_8();
19017 
19018 	m68ki_write_8(ea, res);
19019 
19020 	FLAG_N = NFLAG_8(res);
19021 	FLAG_Z = res;
19022 	FLAG_V = VFLAG_CLEAR;
19023 	FLAG_C = CFLAG_CLEAR;
19024 }
19025 
19026 
m68k_op_move_8_al_pcix(void)19027 static void m68k_op_move_8_al_pcix(void)
19028 {
19029 	uint res = OPER_PCIX_8();
19030 	uint ea = EA_AL_8();
19031 
19032 	m68ki_write_8(ea, res);
19033 
19034 	FLAG_N = NFLAG_8(res);
19035 	FLAG_Z = res;
19036 	FLAG_V = VFLAG_CLEAR;
19037 	FLAG_C = CFLAG_CLEAR;
19038 }
19039 
19040 
m68k_op_move_8_al_i(void)19041 static void m68k_op_move_8_al_i(void)
19042 {
19043 	uint res = OPER_I_8();
19044 	uint ea = EA_AL_8();
19045 
19046 	m68ki_write_8(ea, res);
19047 
19048 	FLAG_N = NFLAG_8(res);
19049 	FLAG_Z = res;
19050 	FLAG_V = VFLAG_CLEAR;
19051 	FLAG_C = CFLAG_CLEAR;
19052 }
19053 
19054 
m68k_op_move_16_d_d(void)19055 static void m68k_op_move_16_d_d(void)
19056 {
19057 	uint res = MASK_OUT_ABOVE_16(DY);
19058 	uint* r_dst = &DX;
19059 
19060 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19061 
19062 	FLAG_N = NFLAG_16(res);
19063 	FLAG_Z = res;
19064 	FLAG_V = VFLAG_CLEAR;
19065 	FLAG_C = CFLAG_CLEAR;
19066 }
19067 
19068 
m68k_op_move_16_d_a(void)19069 static void m68k_op_move_16_d_a(void)
19070 {
19071 	uint res = MASK_OUT_ABOVE_16(AY);
19072 	uint* r_dst = &DX;
19073 
19074 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19075 
19076 	FLAG_N = NFLAG_16(res);
19077 	FLAG_Z = res;
19078 	FLAG_V = VFLAG_CLEAR;
19079 	FLAG_C = CFLAG_CLEAR;
19080 }
19081 
19082 
m68k_op_move_16_d_ai(void)19083 static void m68k_op_move_16_d_ai(void)
19084 {
19085 	uint res = OPER_AY_AI_16();
19086 	uint* r_dst = &DX;
19087 
19088 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19089 
19090 	FLAG_N = NFLAG_16(res);
19091 	FLAG_Z = res;
19092 	FLAG_V = VFLAG_CLEAR;
19093 	FLAG_C = CFLAG_CLEAR;
19094 }
19095 
19096 
m68k_op_move_16_d_pi(void)19097 static void m68k_op_move_16_d_pi(void)
19098 {
19099 	uint res = OPER_AY_PI_16();
19100 	uint* r_dst = &DX;
19101 
19102 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19103 
19104 	FLAG_N = NFLAG_16(res);
19105 	FLAG_Z = res;
19106 	FLAG_V = VFLAG_CLEAR;
19107 	FLAG_C = CFLAG_CLEAR;
19108 }
19109 
19110 
m68k_op_move_16_d_pd(void)19111 static void m68k_op_move_16_d_pd(void)
19112 {
19113 	uint res = OPER_AY_PD_16();
19114 	uint* r_dst = &DX;
19115 
19116 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19117 
19118 	FLAG_N = NFLAG_16(res);
19119 	FLAG_Z = res;
19120 	FLAG_V = VFLAG_CLEAR;
19121 	FLAG_C = CFLAG_CLEAR;
19122 }
19123 
19124 
m68k_op_move_16_d_di(void)19125 static void m68k_op_move_16_d_di(void)
19126 {
19127 	uint res = OPER_AY_DI_16();
19128 	uint* r_dst = &DX;
19129 
19130 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19131 
19132 	FLAG_N = NFLAG_16(res);
19133 	FLAG_Z = res;
19134 	FLAG_V = VFLAG_CLEAR;
19135 	FLAG_C = CFLAG_CLEAR;
19136 }
19137 
19138 
m68k_op_move_16_d_ix(void)19139 static void m68k_op_move_16_d_ix(void)
19140 {
19141 	uint res = OPER_AY_IX_16();
19142 	uint* r_dst = &DX;
19143 
19144 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19145 
19146 	FLAG_N = NFLAG_16(res);
19147 	FLAG_Z = res;
19148 	FLAG_V = VFLAG_CLEAR;
19149 	FLAG_C = CFLAG_CLEAR;
19150 }
19151 
19152 
m68k_op_move_16_d_aw(void)19153 static void m68k_op_move_16_d_aw(void)
19154 {
19155 	uint res = OPER_AW_16();
19156 	uint* r_dst = &DX;
19157 
19158 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19159 
19160 	FLAG_N = NFLAG_16(res);
19161 	FLAG_Z = res;
19162 	FLAG_V = VFLAG_CLEAR;
19163 	FLAG_C = CFLAG_CLEAR;
19164 }
19165 
19166 
m68k_op_move_16_d_al(void)19167 static void m68k_op_move_16_d_al(void)
19168 {
19169 	uint res = OPER_AL_16();
19170 	uint* r_dst = &DX;
19171 
19172 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19173 
19174 	FLAG_N = NFLAG_16(res);
19175 	FLAG_Z = res;
19176 	FLAG_V = VFLAG_CLEAR;
19177 	FLAG_C = CFLAG_CLEAR;
19178 }
19179 
19180 
m68k_op_move_16_d_pcdi(void)19181 static void m68k_op_move_16_d_pcdi(void)
19182 {
19183 	uint res = OPER_PCDI_16();
19184 	uint* r_dst = &DX;
19185 
19186 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19187 
19188 	FLAG_N = NFLAG_16(res);
19189 	FLAG_Z = res;
19190 	FLAG_V = VFLAG_CLEAR;
19191 	FLAG_C = CFLAG_CLEAR;
19192 }
19193 
19194 
m68k_op_move_16_d_pcix(void)19195 static void m68k_op_move_16_d_pcix(void)
19196 {
19197 	uint res = OPER_PCIX_16();
19198 	uint* r_dst = &DX;
19199 
19200 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19201 
19202 	FLAG_N = NFLAG_16(res);
19203 	FLAG_Z = res;
19204 	FLAG_V = VFLAG_CLEAR;
19205 	FLAG_C = CFLAG_CLEAR;
19206 }
19207 
19208 
m68k_op_move_16_d_i(void)19209 static void m68k_op_move_16_d_i(void)
19210 {
19211 	uint res = OPER_I_16();
19212 	uint* r_dst = &DX;
19213 
19214 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
19215 
19216 	FLAG_N = NFLAG_16(res);
19217 	FLAG_Z = res;
19218 	FLAG_V = VFLAG_CLEAR;
19219 	FLAG_C = CFLAG_CLEAR;
19220 }
19221 
19222 
m68k_op_move_16_ai_d(void)19223 static void m68k_op_move_16_ai_d(void)
19224 {
19225 	uint res = MASK_OUT_ABOVE_16(DY);
19226 	uint ea = EA_AX_AI_16();
19227 
19228 	m68ki_write_16(ea, res);
19229 
19230 	FLAG_N = NFLAG_16(res);
19231 	FLAG_Z = res;
19232 	FLAG_V = VFLAG_CLEAR;
19233 	FLAG_C = CFLAG_CLEAR;
19234 }
19235 
19236 
m68k_op_move_16_ai_a(void)19237 static void m68k_op_move_16_ai_a(void)
19238 {
19239 	uint res = MASK_OUT_ABOVE_16(AY);
19240 	uint ea = EA_AX_AI_16();
19241 
19242 	m68ki_write_16(ea, res);
19243 
19244 	FLAG_N = NFLAG_16(res);
19245 	FLAG_Z = res;
19246 	FLAG_V = VFLAG_CLEAR;
19247 	FLAG_C = CFLAG_CLEAR;
19248 }
19249 
19250 
m68k_op_move_16_ai_ai(void)19251 static void m68k_op_move_16_ai_ai(void)
19252 {
19253 	uint res = OPER_AY_AI_16();
19254 	uint ea = EA_AX_AI_16();
19255 
19256 	m68ki_write_16(ea, res);
19257 
19258 	FLAG_N = NFLAG_16(res);
19259 	FLAG_Z = res;
19260 	FLAG_V = VFLAG_CLEAR;
19261 	FLAG_C = CFLAG_CLEAR;
19262 }
19263 
19264 
m68k_op_move_16_ai_pi(void)19265 static void m68k_op_move_16_ai_pi(void)
19266 {
19267 	uint res = OPER_AY_PI_16();
19268 	uint ea = EA_AX_AI_16();
19269 
19270 	m68ki_write_16(ea, res);
19271 
19272 	FLAG_N = NFLAG_16(res);
19273 	FLAG_Z = res;
19274 	FLAG_V = VFLAG_CLEAR;
19275 	FLAG_C = CFLAG_CLEAR;
19276 }
19277 
19278 
m68k_op_move_16_ai_pd(void)19279 static void m68k_op_move_16_ai_pd(void)
19280 {
19281 	uint res = OPER_AY_PD_16();
19282 	uint ea = EA_AX_AI_16();
19283 
19284 	m68ki_write_16(ea, res);
19285 
19286 	FLAG_N = NFLAG_16(res);
19287 	FLAG_Z = res;
19288 	FLAG_V = VFLAG_CLEAR;
19289 	FLAG_C = CFLAG_CLEAR;
19290 }
19291 
19292 
m68k_op_move_16_ai_di(void)19293 static void m68k_op_move_16_ai_di(void)
19294 {
19295 	uint res = OPER_AY_DI_16();
19296 	uint ea = EA_AX_AI_16();
19297 
19298 	m68ki_write_16(ea, res);
19299 
19300 	FLAG_N = NFLAG_16(res);
19301 	FLAG_Z = res;
19302 	FLAG_V = VFLAG_CLEAR;
19303 	FLAG_C = CFLAG_CLEAR;
19304 }
19305 
19306 
m68k_op_move_16_ai_ix(void)19307 static void m68k_op_move_16_ai_ix(void)
19308 {
19309 	uint res = OPER_AY_IX_16();
19310 	uint ea = EA_AX_AI_16();
19311 
19312 	m68ki_write_16(ea, res);
19313 
19314 	FLAG_N = NFLAG_16(res);
19315 	FLAG_Z = res;
19316 	FLAG_V = VFLAG_CLEAR;
19317 	FLAG_C = CFLAG_CLEAR;
19318 }
19319 
19320 
m68k_op_move_16_ai_aw(void)19321 static void m68k_op_move_16_ai_aw(void)
19322 {
19323 	uint res = OPER_AW_16();
19324 	uint ea = EA_AX_AI_16();
19325 
19326 	m68ki_write_16(ea, res);
19327 
19328 	FLAG_N = NFLAG_16(res);
19329 	FLAG_Z = res;
19330 	FLAG_V = VFLAG_CLEAR;
19331 	FLAG_C = CFLAG_CLEAR;
19332 }
19333 
19334 
m68k_op_move_16_ai_al(void)19335 static void m68k_op_move_16_ai_al(void)
19336 {
19337 	uint res = OPER_AL_16();
19338 	uint ea = EA_AX_AI_16();
19339 
19340 	m68ki_write_16(ea, res);
19341 
19342 	FLAG_N = NFLAG_16(res);
19343 	FLAG_Z = res;
19344 	FLAG_V = VFLAG_CLEAR;
19345 	FLAG_C = CFLAG_CLEAR;
19346 }
19347 
19348 
m68k_op_move_16_ai_pcdi(void)19349 static void m68k_op_move_16_ai_pcdi(void)
19350 {
19351 	uint res = OPER_PCDI_16();
19352 	uint ea = EA_AX_AI_16();
19353 
19354 	m68ki_write_16(ea, res);
19355 
19356 	FLAG_N = NFLAG_16(res);
19357 	FLAG_Z = res;
19358 	FLAG_V = VFLAG_CLEAR;
19359 	FLAG_C = CFLAG_CLEAR;
19360 }
19361 
19362 
m68k_op_move_16_ai_pcix(void)19363 static void m68k_op_move_16_ai_pcix(void)
19364 {
19365 	uint res = OPER_PCIX_16();
19366 	uint ea = EA_AX_AI_16();
19367 
19368 	m68ki_write_16(ea, res);
19369 
19370 	FLAG_N = NFLAG_16(res);
19371 	FLAG_Z = res;
19372 	FLAG_V = VFLAG_CLEAR;
19373 	FLAG_C = CFLAG_CLEAR;
19374 }
19375 
19376 
m68k_op_move_16_ai_i(void)19377 static void m68k_op_move_16_ai_i(void)
19378 {
19379 	uint res = OPER_I_16();
19380 	uint ea = EA_AX_AI_16();
19381 
19382 	m68ki_write_16(ea, res);
19383 
19384 	FLAG_N = NFLAG_16(res);
19385 	FLAG_Z = res;
19386 	FLAG_V = VFLAG_CLEAR;
19387 	FLAG_C = CFLAG_CLEAR;
19388 }
19389 
19390 
m68k_op_move_16_pi_d(void)19391 static void m68k_op_move_16_pi_d(void)
19392 {
19393 	uint res = MASK_OUT_ABOVE_16(DY);
19394 	uint ea = EA_AX_PI_16();
19395 
19396 	m68ki_write_16(ea, res);
19397 
19398 	FLAG_N = NFLAG_16(res);
19399 	FLAG_Z = res;
19400 	FLAG_V = VFLAG_CLEAR;
19401 	FLAG_C = CFLAG_CLEAR;
19402 }
19403 
19404 
m68k_op_move_16_pi_a(void)19405 static void m68k_op_move_16_pi_a(void)
19406 {
19407 	uint res = MASK_OUT_ABOVE_16(AY);
19408 	uint ea = EA_AX_PI_16();
19409 
19410 	m68ki_write_16(ea, res);
19411 
19412 	FLAG_N = NFLAG_16(res);
19413 	FLAG_Z = res;
19414 	FLAG_V = VFLAG_CLEAR;
19415 	FLAG_C = CFLAG_CLEAR;
19416 }
19417 
19418 
m68k_op_move_16_pi_ai(void)19419 static void m68k_op_move_16_pi_ai(void)
19420 {
19421 	uint res = OPER_AY_AI_16();
19422 	uint ea = EA_AX_PI_16();
19423 
19424 	m68ki_write_16(ea, res);
19425 
19426 	FLAG_N = NFLAG_16(res);
19427 	FLAG_Z = res;
19428 	FLAG_V = VFLAG_CLEAR;
19429 	FLAG_C = CFLAG_CLEAR;
19430 }
19431 
19432 
m68k_op_move_16_pi_pi(void)19433 static void m68k_op_move_16_pi_pi(void)
19434 {
19435 	uint res = OPER_AY_PI_16();
19436 	uint ea = EA_AX_PI_16();
19437 
19438 	m68ki_write_16(ea, res);
19439 
19440 	FLAG_N = NFLAG_16(res);
19441 	FLAG_Z = res;
19442 	FLAG_V = VFLAG_CLEAR;
19443 	FLAG_C = CFLAG_CLEAR;
19444 }
19445 
19446 
m68k_op_move_16_pi_pd(void)19447 static void m68k_op_move_16_pi_pd(void)
19448 {
19449 	uint res = OPER_AY_PD_16();
19450 	uint ea = EA_AX_PI_16();
19451 
19452 	m68ki_write_16(ea, res);
19453 
19454 	FLAG_N = NFLAG_16(res);
19455 	FLAG_Z = res;
19456 	FLAG_V = VFLAG_CLEAR;
19457 	FLAG_C = CFLAG_CLEAR;
19458 }
19459 
19460 
m68k_op_move_16_pi_di(void)19461 static void m68k_op_move_16_pi_di(void)
19462 {
19463 	uint res = OPER_AY_DI_16();
19464 	uint ea = EA_AX_PI_16();
19465 
19466 	m68ki_write_16(ea, res);
19467 
19468 	FLAG_N = NFLAG_16(res);
19469 	FLAG_Z = res;
19470 	FLAG_V = VFLAG_CLEAR;
19471 	FLAG_C = CFLAG_CLEAR;
19472 }
19473 
19474 
m68k_op_move_16_pi_ix(void)19475 static void m68k_op_move_16_pi_ix(void)
19476 {
19477 	uint res = OPER_AY_IX_16();
19478 	uint ea = EA_AX_PI_16();
19479 
19480 	m68ki_write_16(ea, res);
19481 
19482 	FLAG_N = NFLAG_16(res);
19483 	FLAG_Z = res;
19484 	FLAG_V = VFLAG_CLEAR;
19485 	FLAG_C = CFLAG_CLEAR;
19486 }
19487 
19488 
m68k_op_move_16_pi_aw(void)19489 static void m68k_op_move_16_pi_aw(void)
19490 {
19491 	uint res = OPER_AW_16();
19492 	uint ea = EA_AX_PI_16();
19493 
19494 	m68ki_write_16(ea, res);
19495 
19496 	FLAG_N = NFLAG_16(res);
19497 	FLAG_Z = res;
19498 	FLAG_V = VFLAG_CLEAR;
19499 	FLAG_C = CFLAG_CLEAR;
19500 }
19501 
19502 
m68k_op_move_16_pi_al(void)19503 static void m68k_op_move_16_pi_al(void)
19504 {
19505 	uint res = OPER_AL_16();
19506 	uint ea = EA_AX_PI_16();
19507 
19508 	m68ki_write_16(ea, res);
19509 
19510 	FLAG_N = NFLAG_16(res);
19511 	FLAG_Z = res;
19512 	FLAG_V = VFLAG_CLEAR;
19513 	FLAG_C = CFLAG_CLEAR;
19514 }
19515 
19516 
m68k_op_move_16_pi_pcdi(void)19517 static void m68k_op_move_16_pi_pcdi(void)
19518 {
19519 	uint res = OPER_PCDI_16();
19520 	uint ea = EA_AX_PI_16();
19521 
19522 	m68ki_write_16(ea, res);
19523 
19524 	FLAG_N = NFLAG_16(res);
19525 	FLAG_Z = res;
19526 	FLAG_V = VFLAG_CLEAR;
19527 	FLAG_C = CFLAG_CLEAR;
19528 }
19529 
19530 
m68k_op_move_16_pi_pcix(void)19531 static void m68k_op_move_16_pi_pcix(void)
19532 {
19533 	uint res = OPER_PCIX_16();
19534 	uint ea = EA_AX_PI_16();
19535 
19536 	m68ki_write_16(ea, res);
19537 
19538 	FLAG_N = NFLAG_16(res);
19539 	FLAG_Z = res;
19540 	FLAG_V = VFLAG_CLEAR;
19541 	FLAG_C = CFLAG_CLEAR;
19542 }
19543 
19544 
m68k_op_move_16_pi_i(void)19545 static void m68k_op_move_16_pi_i(void)
19546 {
19547 	uint res = OPER_I_16();
19548 	uint ea = EA_AX_PI_16();
19549 
19550 	m68ki_write_16(ea, res);
19551 
19552 	FLAG_N = NFLAG_16(res);
19553 	FLAG_Z = res;
19554 	FLAG_V = VFLAG_CLEAR;
19555 	FLAG_C = CFLAG_CLEAR;
19556 }
19557 
19558 
m68k_op_move_16_pd_d(void)19559 static void m68k_op_move_16_pd_d(void)
19560 {
19561 	uint res = MASK_OUT_ABOVE_16(DY);
19562 	uint ea = EA_AX_PD_16();
19563 
19564 	m68ki_write_16(ea, res);
19565 
19566 	FLAG_N = NFLAG_16(res);
19567 	FLAG_Z = res;
19568 	FLAG_V = VFLAG_CLEAR;
19569 	FLAG_C = CFLAG_CLEAR;
19570 }
19571 
19572 
m68k_op_move_16_pd_a(void)19573 static void m68k_op_move_16_pd_a(void)
19574 {
19575 	uint res = MASK_OUT_ABOVE_16(AY);
19576 	uint ea = EA_AX_PD_16();
19577 
19578 	m68ki_write_16(ea, res);
19579 
19580 	FLAG_N = NFLAG_16(res);
19581 	FLAG_Z = res;
19582 	FLAG_V = VFLAG_CLEAR;
19583 	FLAG_C = CFLAG_CLEAR;
19584 }
19585 
19586 
m68k_op_move_16_pd_ai(void)19587 static void m68k_op_move_16_pd_ai(void)
19588 {
19589 	uint res = OPER_AY_AI_16();
19590 	uint ea = EA_AX_PD_16();
19591 
19592 	m68ki_write_16(ea, res);
19593 
19594 	FLAG_N = NFLAG_16(res);
19595 	FLAG_Z = res;
19596 	FLAG_V = VFLAG_CLEAR;
19597 	FLAG_C = CFLAG_CLEAR;
19598 }
19599 
19600 
m68k_op_move_16_pd_pi(void)19601 static void m68k_op_move_16_pd_pi(void)
19602 {
19603 	uint res = OPER_AY_PI_16();
19604 	uint ea = EA_AX_PD_16();
19605 
19606 	m68ki_write_16(ea, res);
19607 
19608 	FLAG_N = NFLAG_16(res);
19609 	FLAG_Z = res;
19610 	FLAG_V = VFLAG_CLEAR;
19611 	FLAG_C = CFLAG_CLEAR;
19612 }
19613 
19614 
m68k_op_move_16_pd_pd(void)19615 static void m68k_op_move_16_pd_pd(void)
19616 {
19617 	uint res = OPER_AY_PD_16();
19618 	uint ea = EA_AX_PD_16();
19619 
19620 	m68ki_write_16(ea, res);
19621 
19622 	FLAG_N = NFLAG_16(res);
19623 	FLAG_Z = res;
19624 	FLAG_V = VFLAG_CLEAR;
19625 	FLAG_C = CFLAG_CLEAR;
19626 }
19627 
19628 
m68k_op_move_16_pd_di(void)19629 static void m68k_op_move_16_pd_di(void)
19630 {
19631 	uint res = OPER_AY_DI_16();
19632 	uint ea = EA_AX_PD_16();
19633 
19634 	m68ki_write_16(ea, res);
19635 
19636 	FLAG_N = NFLAG_16(res);
19637 	FLAG_Z = res;
19638 	FLAG_V = VFLAG_CLEAR;
19639 	FLAG_C = CFLAG_CLEAR;
19640 }
19641 
19642 
m68k_op_move_16_pd_ix(void)19643 static void m68k_op_move_16_pd_ix(void)
19644 {
19645 	uint res = OPER_AY_IX_16();
19646 	uint ea = EA_AX_PD_16();
19647 
19648 	m68ki_write_16(ea, res);
19649 
19650 	FLAG_N = NFLAG_16(res);
19651 	FLAG_Z = res;
19652 	FLAG_V = VFLAG_CLEAR;
19653 	FLAG_C = CFLAG_CLEAR;
19654 }
19655 
19656 
m68k_op_move_16_pd_aw(void)19657 static void m68k_op_move_16_pd_aw(void)
19658 {
19659 	uint res = OPER_AW_16();
19660 	uint ea = EA_AX_PD_16();
19661 
19662 	m68ki_write_16(ea, res);
19663 
19664 	FLAG_N = NFLAG_16(res);
19665 	FLAG_Z = res;
19666 	FLAG_V = VFLAG_CLEAR;
19667 	FLAG_C = CFLAG_CLEAR;
19668 }
19669 
19670 
m68k_op_move_16_pd_al(void)19671 static void m68k_op_move_16_pd_al(void)
19672 {
19673 	uint res = OPER_AL_16();
19674 	uint ea = EA_AX_PD_16();
19675 
19676 	m68ki_write_16(ea, res);
19677 
19678 	FLAG_N = NFLAG_16(res);
19679 	FLAG_Z = res;
19680 	FLAG_V = VFLAG_CLEAR;
19681 	FLAG_C = CFLAG_CLEAR;
19682 }
19683 
19684 
m68k_op_move_16_pd_pcdi(void)19685 static void m68k_op_move_16_pd_pcdi(void)
19686 {
19687 	uint res = OPER_PCDI_16();
19688 	uint ea = EA_AX_PD_16();
19689 
19690 	m68ki_write_16(ea, res);
19691 
19692 	FLAG_N = NFLAG_16(res);
19693 	FLAG_Z = res;
19694 	FLAG_V = VFLAG_CLEAR;
19695 	FLAG_C = CFLAG_CLEAR;
19696 }
19697 
19698 
m68k_op_move_16_pd_pcix(void)19699 static void m68k_op_move_16_pd_pcix(void)
19700 {
19701 	uint res = OPER_PCIX_16();
19702 	uint ea = EA_AX_PD_16();
19703 
19704 	m68ki_write_16(ea, res);
19705 
19706 	FLAG_N = NFLAG_16(res);
19707 	FLAG_Z = res;
19708 	FLAG_V = VFLAG_CLEAR;
19709 	FLAG_C = CFLAG_CLEAR;
19710 }
19711 
19712 
m68k_op_move_16_pd_i(void)19713 static void m68k_op_move_16_pd_i(void)
19714 {
19715 	uint res = OPER_I_16();
19716 	uint ea = EA_AX_PD_16();
19717 
19718 	m68ki_write_16(ea, res);
19719 
19720 	FLAG_N = NFLAG_16(res);
19721 	FLAG_Z = res;
19722 	FLAG_V = VFLAG_CLEAR;
19723 	FLAG_C = CFLAG_CLEAR;
19724 }
19725 
19726 
m68k_op_move_16_di_d(void)19727 static void m68k_op_move_16_di_d(void)
19728 {
19729 	uint res = MASK_OUT_ABOVE_16(DY);
19730 	uint ea = EA_AX_DI_16();
19731 
19732 	m68ki_write_16(ea, res);
19733 
19734 	FLAG_N = NFLAG_16(res);
19735 	FLAG_Z = res;
19736 	FLAG_V = VFLAG_CLEAR;
19737 	FLAG_C = CFLAG_CLEAR;
19738 }
19739 
19740 
m68k_op_move_16_di_a(void)19741 static void m68k_op_move_16_di_a(void)
19742 {
19743 	uint res = MASK_OUT_ABOVE_16(AY);
19744 	uint ea = EA_AX_DI_16();
19745 
19746 	m68ki_write_16(ea, res);
19747 
19748 	FLAG_N = NFLAG_16(res);
19749 	FLAG_Z = res;
19750 	FLAG_V = VFLAG_CLEAR;
19751 	FLAG_C = CFLAG_CLEAR;
19752 }
19753 
19754 
m68k_op_move_16_di_ai(void)19755 static void m68k_op_move_16_di_ai(void)
19756 {
19757 	uint res = OPER_AY_AI_16();
19758 	uint ea = EA_AX_DI_16();
19759 
19760 	m68ki_write_16(ea, res);
19761 
19762 	FLAG_N = NFLAG_16(res);
19763 	FLAG_Z = res;
19764 	FLAG_V = VFLAG_CLEAR;
19765 	FLAG_C = CFLAG_CLEAR;
19766 }
19767 
19768 
m68k_op_move_16_di_pi(void)19769 static void m68k_op_move_16_di_pi(void)
19770 {
19771 	uint res = OPER_AY_PI_16();
19772 	uint ea = EA_AX_DI_16();
19773 
19774 	m68ki_write_16(ea, res);
19775 
19776 	FLAG_N = NFLAG_16(res);
19777 	FLAG_Z = res;
19778 	FLAG_V = VFLAG_CLEAR;
19779 	FLAG_C = CFLAG_CLEAR;
19780 }
19781 
19782 
m68k_op_move_16_di_pd(void)19783 static void m68k_op_move_16_di_pd(void)
19784 {
19785 	uint res = OPER_AY_PD_16();
19786 	uint ea = EA_AX_DI_16();
19787 
19788 	m68ki_write_16(ea, res);
19789 
19790 	FLAG_N = NFLAG_16(res);
19791 	FLAG_Z = res;
19792 	FLAG_V = VFLAG_CLEAR;
19793 	FLAG_C = CFLAG_CLEAR;
19794 }
19795 
19796 
m68k_op_move_16_di_di(void)19797 static void m68k_op_move_16_di_di(void)
19798 {
19799 	uint res = OPER_AY_DI_16();
19800 	uint ea = EA_AX_DI_16();
19801 
19802 	m68ki_write_16(ea, res);
19803 
19804 	FLAG_N = NFLAG_16(res);
19805 	FLAG_Z = res;
19806 	FLAG_V = VFLAG_CLEAR;
19807 	FLAG_C = CFLAG_CLEAR;
19808 }
19809 
19810 
m68k_op_move_16_di_ix(void)19811 static void m68k_op_move_16_di_ix(void)
19812 {
19813 	uint res = OPER_AY_IX_16();
19814 	uint ea = EA_AX_DI_16();
19815 
19816 	m68ki_write_16(ea, res);
19817 
19818 	FLAG_N = NFLAG_16(res);
19819 	FLAG_Z = res;
19820 	FLAG_V = VFLAG_CLEAR;
19821 	FLAG_C = CFLAG_CLEAR;
19822 }
19823 
19824 
m68k_op_move_16_di_aw(void)19825 static void m68k_op_move_16_di_aw(void)
19826 {
19827 	uint res = OPER_AW_16();
19828 	uint ea = EA_AX_DI_16();
19829 
19830 	m68ki_write_16(ea, res);
19831 
19832 	FLAG_N = NFLAG_16(res);
19833 	FLAG_Z = res;
19834 	FLAG_V = VFLAG_CLEAR;
19835 	FLAG_C = CFLAG_CLEAR;
19836 }
19837 
19838 
m68k_op_move_16_di_al(void)19839 static void m68k_op_move_16_di_al(void)
19840 {
19841 	uint res = OPER_AL_16();
19842 	uint ea = EA_AX_DI_16();
19843 
19844 	m68ki_write_16(ea, res);
19845 
19846 	FLAG_N = NFLAG_16(res);
19847 	FLAG_Z = res;
19848 	FLAG_V = VFLAG_CLEAR;
19849 	FLAG_C = CFLAG_CLEAR;
19850 }
19851 
19852 
m68k_op_move_16_di_pcdi(void)19853 static void m68k_op_move_16_di_pcdi(void)
19854 {
19855 	uint res = OPER_PCDI_16();
19856 	uint ea = EA_AX_DI_16();
19857 
19858 	m68ki_write_16(ea, res);
19859 
19860 	FLAG_N = NFLAG_16(res);
19861 	FLAG_Z = res;
19862 	FLAG_V = VFLAG_CLEAR;
19863 	FLAG_C = CFLAG_CLEAR;
19864 }
19865 
19866 
m68k_op_move_16_di_pcix(void)19867 static void m68k_op_move_16_di_pcix(void)
19868 {
19869 	uint res = OPER_PCIX_16();
19870 	uint ea = EA_AX_DI_16();
19871 
19872 	m68ki_write_16(ea, res);
19873 
19874 	FLAG_N = NFLAG_16(res);
19875 	FLAG_Z = res;
19876 	FLAG_V = VFLAG_CLEAR;
19877 	FLAG_C = CFLAG_CLEAR;
19878 }
19879 
19880 
m68k_op_move_16_di_i(void)19881 static void m68k_op_move_16_di_i(void)
19882 {
19883 	uint res = OPER_I_16();
19884 	uint ea = EA_AX_DI_16();
19885 
19886 	m68ki_write_16(ea, res);
19887 
19888 	FLAG_N = NFLAG_16(res);
19889 	FLAG_Z = res;
19890 	FLAG_V = VFLAG_CLEAR;
19891 	FLAG_C = CFLAG_CLEAR;
19892 }
19893 
19894 
m68k_op_move_16_ix_d(void)19895 static void m68k_op_move_16_ix_d(void)
19896 {
19897 	uint res = MASK_OUT_ABOVE_16(DY);
19898 	uint ea = EA_AX_IX_16();
19899 
19900 	m68ki_write_16(ea, res);
19901 
19902 	FLAG_N = NFLAG_16(res);
19903 	FLAG_Z = res;
19904 	FLAG_V = VFLAG_CLEAR;
19905 	FLAG_C = CFLAG_CLEAR;
19906 }
19907 
19908 
m68k_op_move_16_ix_a(void)19909 static void m68k_op_move_16_ix_a(void)
19910 {
19911 	uint res = MASK_OUT_ABOVE_16(AY);
19912 	uint ea = EA_AX_IX_16();
19913 
19914 	m68ki_write_16(ea, res);
19915 
19916 	FLAG_N = NFLAG_16(res);
19917 	FLAG_Z = res;
19918 	FLAG_V = VFLAG_CLEAR;
19919 	FLAG_C = CFLAG_CLEAR;
19920 }
19921 
19922 
m68k_op_move_16_ix_ai(void)19923 static void m68k_op_move_16_ix_ai(void)
19924 {
19925 	uint res = OPER_AY_AI_16();
19926 	uint ea = EA_AX_IX_16();
19927 
19928 	m68ki_write_16(ea, res);
19929 
19930 	FLAG_N = NFLAG_16(res);
19931 	FLAG_Z = res;
19932 	FLAG_V = VFLAG_CLEAR;
19933 	FLAG_C = CFLAG_CLEAR;
19934 }
19935 
19936 
m68k_op_move_16_ix_pi(void)19937 static void m68k_op_move_16_ix_pi(void)
19938 {
19939 	uint res = OPER_AY_PI_16();
19940 	uint ea = EA_AX_IX_16();
19941 
19942 	m68ki_write_16(ea, res);
19943 
19944 	FLAG_N = NFLAG_16(res);
19945 	FLAG_Z = res;
19946 	FLAG_V = VFLAG_CLEAR;
19947 	FLAG_C = CFLAG_CLEAR;
19948 }
19949 
19950 
m68k_op_move_16_ix_pd(void)19951 static void m68k_op_move_16_ix_pd(void)
19952 {
19953 	uint res = OPER_AY_PD_16();
19954 	uint ea = EA_AX_IX_16();
19955 
19956 	m68ki_write_16(ea, res);
19957 
19958 	FLAG_N = NFLAG_16(res);
19959 	FLAG_Z = res;
19960 	FLAG_V = VFLAG_CLEAR;
19961 	FLAG_C = CFLAG_CLEAR;
19962 }
19963 
19964 
m68k_op_move_16_ix_di(void)19965 static void m68k_op_move_16_ix_di(void)
19966 {
19967 	uint res = OPER_AY_DI_16();
19968 	uint ea = EA_AX_IX_16();
19969 
19970 	m68ki_write_16(ea, res);
19971 
19972 	FLAG_N = NFLAG_16(res);
19973 	FLAG_Z = res;
19974 	FLAG_V = VFLAG_CLEAR;
19975 	FLAG_C = CFLAG_CLEAR;
19976 }
19977 
19978 
m68k_op_move_16_ix_ix(void)19979 static void m68k_op_move_16_ix_ix(void)
19980 {
19981 	uint res = OPER_AY_IX_16();
19982 	uint ea = EA_AX_IX_16();
19983 
19984 	m68ki_write_16(ea, res);
19985 
19986 	FLAG_N = NFLAG_16(res);
19987 	FLAG_Z = res;
19988 	FLAG_V = VFLAG_CLEAR;
19989 	FLAG_C = CFLAG_CLEAR;
19990 }
19991 
19992 
m68k_op_move_16_ix_aw(void)19993 static void m68k_op_move_16_ix_aw(void)
19994 {
19995 	uint res = OPER_AW_16();
19996 	uint ea = EA_AX_IX_16();
19997 
19998 	m68ki_write_16(ea, res);
19999 
20000 	FLAG_N = NFLAG_16(res);
20001 	FLAG_Z = res;
20002 	FLAG_V = VFLAG_CLEAR;
20003 	FLAG_C = CFLAG_CLEAR;
20004 }
20005 
20006 
m68k_op_move_16_ix_al(void)20007 static void m68k_op_move_16_ix_al(void)
20008 {
20009 	uint res = OPER_AL_16();
20010 	uint ea = EA_AX_IX_16();
20011 
20012 	m68ki_write_16(ea, res);
20013 
20014 	FLAG_N = NFLAG_16(res);
20015 	FLAG_Z = res;
20016 	FLAG_V = VFLAG_CLEAR;
20017 	FLAG_C = CFLAG_CLEAR;
20018 }
20019 
20020 
m68k_op_move_16_ix_pcdi(void)20021 static void m68k_op_move_16_ix_pcdi(void)
20022 {
20023 	uint res = OPER_PCDI_16();
20024 	uint ea = EA_AX_IX_16();
20025 
20026 	m68ki_write_16(ea, res);
20027 
20028 	FLAG_N = NFLAG_16(res);
20029 	FLAG_Z = res;
20030 	FLAG_V = VFLAG_CLEAR;
20031 	FLAG_C = CFLAG_CLEAR;
20032 }
20033 
20034 
m68k_op_move_16_ix_pcix(void)20035 static void m68k_op_move_16_ix_pcix(void)
20036 {
20037 	uint res = OPER_PCIX_16();
20038 	uint ea = EA_AX_IX_16();
20039 
20040 	m68ki_write_16(ea, res);
20041 
20042 	FLAG_N = NFLAG_16(res);
20043 	FLAG_Z = res;
20044 	FLAG_V = VFLAG_CLEAR;
20045 	FLAG_C = CFLAG_CLEAR;
20046 }
20047 
20048 
m68k_op_move_16_ix_i(void)20049 static void m68k_op_move_16_ix_i(void)
20050 {
20051 	uint res = OPER_I_16();
20052 	uint ea = EA_AX_IX_16();
20053 
20054 	m68ki_write_16(ea, res);
20055 
20056 	FLAG_N = NFLAG_16(res);
20057 	FLAG_Z = res;
20058 	FLAG_V = VFLAG_CLEAR;
20059 	FLAG_C = CFLAG_CLEAR;
20060 }
20061 
20062 
m68k_op_move_16_aw_d(void)20063 static void m68k_op_move_16_aw_d(void)
20064 {
20065 	uint res = MASK_OUT_ABOVE_16(DY);
20066 	uint ea = EA_AW_16();
20067 
20068 	m68ki_write_16(ea, res);
20069 
20070 	FLAG_N = NFLAG_16(res);
20071 	FLAG_Z = res;
20072 	FLAG_V = VFLAG_CLEAR;
20073 	FLAG_C = CFLAG_CLEAR;
20074 }
20075 
20076 
m68k_op_move_16_aw_a(void)20077 static void m68k_op_move_16_aw_a(void)
20078 {
20079 	uint res = MASK_OUT_ABOVE_16(AY);
20080 	uint ea = EA_AW_16();
20081 
20082 	m68ki_write_16(ea, res);
20083 
20084 	FLAG_N = NFLAG_16(res);
20085 	FLAG_Z = res;
20086 	FLAG_V = VFLAG_CLEAR;
20087 	FLAG_C = CFLAG_CLEAR;
20088 }
20089 
20090 
m68k_op_move_16_aw_ai(void)20091 static void m68k_op_move_16_aw_ai(void)
20092 {
20093 	uint res = OPER_AY_AI_16();
20094 	uint ea = EA_AW_16();
20095 
20096 	m68ki_write_16(ea, res);
20097 
20098 	FLAG_N = NFLAG_16(res);
20099 	FLAG_Z = res;
20100 	FLAG_V = VFLAG_CLEAR;
20101 	FLAG_C = CFLAG_CLEAR;
20102 }
20103 
20104 
m68k_op_move_16_aw_pi(void)20105 static void m68k_op_move_16_aw_pi(void)
20106 {
20107 	uint res = OPER_AY_PI_16();
20108 	uint ea = EA_AW_16();
20109 
20110 	m68ki_write_16(ea, res);
20111 
20112 	FLAG_N = NFLAG_16(res);
20113 	FLAG_Z = res;
20114 	FLAG_V = VFLAG_CLEAR;
20115 	FLAG_C = CFLAG_CLEAR;
20116 }
20117 
20118 
m68k_op_move_16_aw_pd(void)20119 static void m68k_op_move_16_aw_pd(void)
20120 {
20121 	uint res = OPER_AY_PD_16();
20122 	uint ea = EA_AW_16();
20123 
20124 	m68ki_write_16(ea, res);
20125 
20126 	FLAG_N = NFLAG_16(res);
20127 	FLAG_Z = res;
20128 	FLAG_V = VFLAG_CLEAR;
20129 	FLAG_C = CFLAG_CLEAR;
20130 }
20131 
20132 
m68k_op_move_16_aw_di(void)20133 static void m68k_op_move_16_aw_di(void)
20134 {
20135 	uint res = OPER_AY_DI_16();
20136 	uint ea = EA_AW_16();
20137 
20138 	m68ki_write_16(ea, res);
20139 
20140 	FLAG_N = NFLAG_16(res);
20141 	FLAG_Z = res;
20142 	FLAG_V = VFLAG_CLEAR;
20143 	FLAG_C = CFLAG_CLEAR;
20144 }
20145 
20146 
m68k_op_move_16_aw_ix(void)20147 static void m68k_op_move_16_aw_ix(void)
20148 {
20149 	uint res = OPER_AY_IX_16();
20150 	uint ea = EA_AW_16();
20151 
20152 	m68ki_write_16(ea, res);
20153 
20154 	FLAG_N = NFLAG_16(res);
20155 	FLAG_Z = res;
20156 	FLAG_V = VFLAG_CLEAR;
20157 	FLAG_C = CFLAG_CLEAR;
20158 }
20159 
20160 
m68k_op_move_16_aw_aw(void)20161 static void m68k_op_move_16_aw_aw(void)
20162 {
20163 	uint res = OPER_AW_16();
20164 	uint ea = EA_AW_16();
20165 
20166 	m68ki_write_16(ea, res);
20167 
20168 	FLAG_N = NFLAG_16(res);
20169 	FLAG_Z = res;
20170 	FLAG_V = VFLAG_CLEAR;
20171 	FLAG_C = CFLAG_CLEAR;
20172 }
20173 
20174 
m68k_op_move_16_aw_al(void)20175 static void m68k_op_move_16_aw_al(void)
20176 {
20177 	uint res = OPER_AL_16();
20178 	uint ea = EA_AW_16();
20179 
20180 	m68ki_write_16(ea, res);
20181 
20182 	FLAG_N = NFLAG_16(res);
20183 	FLAG_Z = res;
20184 	FLAG_V = VFLAG_CLEAR;
20185 	FLAG_C = CFLAG_CLEAR;
20186 }
20187 
20188 
m68k_op_move_16_aw_pcdi(void)20189 static void m68k_op_move_16_aw_pcdi(void)
20190 {
20191 	uint res = OPER_PCDI_16();
20192 	uint ea = EA_AW_16();
20193 
20194 	m68ki_write_16(ea, res);
20195 
20196 	FLAG_N = NFLAG_16(res);
20197 	FLAG_Z = res;
20198 	FLAG_V = VFLAG_CLEAR;
20199 	FLAG_C = CFLAG_CLEAR;
20200 }
20201 
20202 
m68k_op_move_16_aw_pcix(void)20203 static void m68k_op_move_16_aw_pcix(void)
20204 {
20205 	uint res = OPER_PCIX_16();
20206 	uint ea = EA_AW_16();
20207 
20208 	m68ki_write_16(ea, res);
20209 
20210 	FLAG_N = NFLAG_16(res);
20211 	FLAG_Z = res;
20212 	FLAG_V = VFLAG_CLEAR;
20213 	FLAG_C = CFLAG_CLEAR;
20214 }
20215 
20216 
m68k_op_move_16_aw_i(void)20217 static void m68k_op_move_16_aw_i(void)
20218 {
20219 	uint res = OPER_I_16();
20220 	uint ea = EA_AW_16();
20221 
20222 	m68ki_write_16(ea, res);
20223 
20224 	FLAG_N = NFLAG_16(res);
20225 	FLAG_Z = res;
20226 	FLAG_V = VFLAG_CLEAR;
20227 	FLAG_C = CFLAG_CLEAR;
20228 }
20229 
20230 
m68k_op_move_16_al_d(void)20231 static void m68k_op_move_16_al_d(void)
20232 {
20233 	uint res = MASK_OUT_ABOVE_16(DY);
20234 	uint ea = EA_AL_16();
20235 
20236 	m68ki_write_16(ea, res);
20237 
20238 	FLAG_N = NFLAG_16(res);
20239 	FLAG_Z = res;
20240 	FLAG_V = VFLAG_CLEAR;
20241 	FLAG_C = CFLAG_CLEAR;
20242 }
20243 
20244 
m68k_op_move_16_al_a(void)20245 static void m68k_op_move_16_al_a(void)
20246 {
20247 	uint res = MASK_OUT_ABOVE_16(AY);
20248 	uint ea = EA_AL_16();
20249 
20250 	m68ki_write_16(ea, res);
20251 
20252 	FLAG_N = NFLAG_16(res);
20253 	FLAG_Z = res;
20254 	FLAG_V = VFLAG_CLEAR;
20255 	FLAG_C = CFLAG_CLEAR;
20256 }
20257 
20258 
m68k_op_move_16_al_ai(void)20259 static void m68k_op_move_16_al_ai(void)
20260 {
20261 	uint res = OPER_AY_AI_16();
20262 	uint ea = EA_AL_16();
20263 
20264 	m68ki_write_16(ea, res);
20265 
20266 	FLAG_N = NFLAG_16(res);
20267 	FLAG_Z = res;
20268 	FLAG_V = VFLAG_CLEAR;
20269 	FLAG_C = CFLAG_CLEAR;
20270 }
20271 
20272 
m68k_op_move_16_al_pi(void)20273 static void m68k_op_move_16_al_pi(void)
20274 {
20275 	uint res = OPER_AY_PI_16();
20276 	uint ea = EA_AL_16();
20277 
20278 	m68ki_write_16(ea, res);
20279 
20280 	FLAG_N = NFLAG_16(res);
20281 	FLAG_Z = res;
20282 	FLAG_V = VFLAG_CLEAR;
20283 	FLAG_C = CFLAG_CLEAR;
20284 }
20285 
20286 
m68k_op_move_16_al_pd(void)20287 static void m68k_op_move_16_al_pd(void)
20288 {
20289 	uint res = OPER_AY_PD_16();
20290 	uint ea = EA_AL_16();
20291 
20292 	m68ki_write_16(ea, res);
20293 
20294 	FLAG_N = NFLAG_16(res);
20295 	FLAG_Z = res;
20296 	FLAG_V = VFLAG_CLEAR;
20297 	FLAG_C = CFLAG_CLEAR;
20298 }
20299 
20300 
m68k_op_move_16_al_di(void)20301 static void m68k_op_move_16_al_di(void)
20302 {
20303 	uint res = OPER_AY_DI_16();
20304 	uint ea = EA_AL_16();
20305 
20306 	m68ki_write_16(ea, res);
20307 
20308 	FLAG_N = NFLAG_16(res);
20309 	FLAG_Z = res;
20310 	FLAG_V = VFLAG_CLEAR;
20311 	FLAG_C = CFLAG_CLEAR;
20312 }
20313 
20314 
m68k_op_move_16_al_ix(void)20315 static void m68k_op_move_16_al_ix(void)
20316 {
20317 	uint res = OPER_AY_IX_16();
20318 	uint ea = EA_AL_16();
20319 
20320 	m68ki_write_16(ea, res);
20321 
20322 	FLAG_N = NFLAG_16(res);
20323 	FLAG_Z = res;
20324 	FLAG_V = VFLAG_CLEAR;
20325 	FLAG_C = CFLAG_CLEAR;
20326 }
20327 
20328 
m68k_op_move_16_al_aw(void)20329 static void m68k_op_move_16_al_aw(void)
20330 {
20331 	uint res = OPER_AW_16();
20332 	uint ea = EA_AL_16();
20333 
20334 	m68ki_write_16(ea, res);
20335 
20336 	FLAG_N = NFLAG_16(res);
20337 	FLAG_Z = res;
20338 	FLAG_V = VFLAG_CLEAR;
20339 	FLAG_C = CFLAG_CLEAR;
20340 }
20341 
20342 
m68k_op_move_16_al_al(void)20343 static void m68k_op_move_16_al_al(void)
20344 {
20345 	uint res = OPER_AL_16();
20346 	uint ea = EA_AL_16();
20347 
20348 	m68ki_write_16(ea, res);
20349 
20350 	FLAG_N = NFLAG_16(res);
20351 	FLAG_Z = res;
20352 	FLAG_V = VFLAG_CLEAR;
20353 	FLAG_C = CFLAG_CLEAR;
20354 }
20355 
20356 
m68k_op_move_16_al_pcdi(void)20357 static void m68k_op_move_16_al_pcdi(void)
20358 {
20359 	uint res = OPER_PCDI_16();
20360 	uint ea = EA_AL_16();
20361 
20362 	m68ki_write_16(ea, res);
20363 
20364 	FLAG_N = NFLAG_16(res);
20365 	FLAG_Z = res;
20366 	FLAG_V = VFLAG_CLEAR;
20367 	FLAG_C = CFLAG_CLEAR;
20368 }
20369 
20370 
m68k_op_move_16_al_pcix(void)20371 static void m68k_op_move_16_al_pcix(void)
20372 {
20373 	uint res = OPER_PCIX_16();
20374 	uint ea = EA_AL_16();
20375 
20376 	m68ki_write_16(ea, res);
20377 
20378 	FLAG_N = NFLAG_16(res);
20379 	FLAG_Z = res;
20380 	FLAG_V = VFLAG_CLEAR;
20381 	FLAG_C = CFLAG_CLEAR;
20382 }
20383 
20384 
m68k_op_move_16_al_i(void)20385 static void m68k_op_move_16_al_i(void)
20386 {
20387 	uint res = OPER_I_16();
20388 	uint ea = EA_AL_16();
20389 
20390 	m68ki_write_16(ea, res);
20391 
20392 	FLAG_N = NFLAG_16(res);
20393 	FLAG_Z = res;
20394 	FLAG_V = VFLAG_CLEAR;
20395 	FLAG_C = CFLAG_CLEAR;
20396 }
20397 
20398 
m68k_op_move_32_d_d(void)20399 static void m68k_op_move_32_d_d(void)
20400 {
20401 	uint res = DY;
20402 	uint* r_dst = &DX;
20403 
20404 	*r_dst = res;
20405 
20406 	FLAG_N = NFLAG_32(res);
20407 	FLAG_Z = res;
20408 	FLAG_V = VFLAG_CLEAR;
20409 	FLAG_C = CFLAG_CLEAR;
20410 }
20411 
20412 
m68k_op_move_32_d_a(void)20413 static void m68k_op_move_32_d_a(void)
20414 {
20415 	uint res = AY;
20416 	uint* r_dst = &DX;
20417 
20418 	*r_dst = res;
20419 
20420 	FLAG_N = NFLAG_32(res);
20421 	FLAG_Z = res;
20422 	FLAG_V = VFLAG_CLEAR;
20423 	FLAG_C = CFLAG_CLEAR;
20424 }
20425 
20426 
m68k_op_move_32_d_ai(void)20427 static void m68k_op_move_32_d_ai(void)
20428 {
20429 	uint res = OPER_AY_AI_32();
20430 	uint* r_dst = &DX;
20431 
20432 	*r_dst = res;
20433 
20434 	FLAG_N = NFLAG_32(res);
20435 	FLAG_Z = res;
20436 	FLAG_V = VFLAG_CLEAR;
20437 	FLAG_C = CFLAG_CLEAR;
20438 }
20439 
20440 
m68k_op_move_32_d_pi(void)20441 static void m68k_op_move_32_d_pi(void)
20442 {
20443 	uint res = OPER_AY_PI_32();
20444 	uint* r_dst = &DX;
20445 
20446 	*r_dst = res;
20447 
20448 	FLAG_N = NFLAG_32(res);
20449 	FLAG_Z = res;
20450 	FLAG_V = VFLAG_CLEAR;
20451 	FLAG_C = CFLAG_CLEAR;
20452 }
20453 
20454 
m68k_op_move_32_d_pd(void)20455 static void m68k_op_move_32_d_pd(void)
20456 {
20457 	uint res = OPER_AY_PD_32();
20458 	uint* r_dst = &DX;
20459 
20460 	*r_dst = res;
20461 
20462 	FLAG_N = NFLAG_32(res);
20463 	FLAG_Z = res;
20464 	FLAG_V = VFLAG_CLEAR;
20465 	FLAG_C = CFLAG_CLEAR;
20466 }
20467 
20468 
m68k_op_move_32_d_di(void)20469 static void m68k_op_move_32_d_di(void)
20470 {
20471 	uint res = OPER_AY_DI_32();
20472 	uint* r_dst = &DX;
20473 
20474 	*r_dst = res;
20475 
20476 	FLAG_N = NFLAG_32(res);
20477 	FLAG_Z = res;
20478 	FLAG_V = VFLAG_CLEAR;
20479 	FLAG_C = CFLAG_CLEAR;
20480 }
20481 
20482 
m68k_op_move_32_d_ix(void)20483 static void m68k_op_move_32_d_ix(void)
20484 {
20485 	uint res = OPER_AY_IX_32();
20486 	uint* r_dst = &DX;
20487 
20488 	*r_dst = res;
20489 
20490 	FLAG_N = NFLAG_32(res);
20491 	FLAG_Z = res;
20492 	FLAG_V = VFLAG_CLEAR;
20493 	FLAG_C = CFLAG_CLEAR;
20494 }
20495 
20496 
m68k_op_move_32_d_aw(void)20497 static void m68k_op_move_32_d_aw(void)
20498 {
20499 	uint res = OPER_AW_32();
20500 	uint* r_dst = &DX;
20501 
20502 	*r_dst = res;
20503 
20504 	FLAG_N = NFLAG_32(res);
20505 	FLAG_Z = res;
20506 	FLAG_V = VFLAG_CLEAR;
20507 	FLAG_C = CFLAG_CLEAR;
20508 }
20509 
20510 
m68k_op_move_32_d_al(void)20511 static void m68k_op_move_32_d_al(void)
20512 {
20513 	uint res = OPER_AL_32();
20514 	uint* r_dst = &DX;
20515 
20516 	*r_dst = res;
20517 
20518 	FLAG_N = NFLAG_32(res);
20519 	FLAG_Z = res;
20520 	FLAG_V = VFLAG_CLEAR;
20521 	FLAG_C = CFLAG_CLEAR;
20522 }
20523 
20524 
m68k_op_move_32_d_pcdi(void)20525 static void m68k_op_move_32_d_pcdi(void)
20526 {
20527 	uint res = OPER_PCDI_32();
20528 	uint* r_dst = &DX;
20529 
20530 	*r_dst = res;
20531 
20532 	FLAG_N = NFLAG_32(res);
20533 	FLAG_Z = res;
20534 	FLAG_V = VFLAG_CLEAR;
20535 	FLAG_C = CFLAG_CLEAR;
20536 }
20537 
20538 
m68k_op_move_32_d_pcix(void)20539 static void m68k_op_move_32_d_pcix(void)
20540 {
20541 	uint res = OPER_PCIX_32();
20542 	uint* r_dst = &DX;
20543 
20544 	*r_dst = res;
20545 
20546 	FLAG_N = NFLAG_32(res);
20547 	FLAG_Z = res;
20548 	FLAG_V = VFLAG_CLEAR;
20549 	FLAG_C = CFLAG_CLEAR;
20550 }
20551 
20552 
m68k_op_move_32_d_i(void)20553 static void m68k_op_move_32_d_i(void)
20554 {
20555 	uint res = OPER_I_32();
20556 	uint* r_dst = &DX;
20557 
20558 	*r_dst = res;
20559 
20560 	FLAG_N = NFLAG_32(res);
20561 	FLAG_Z = res;
20562 	FLAG_V = VFLAG_CLEAR;
20563 	FLAG_C = CFLAG_CLEAR;
20564 }
20565 
20566 
m68k_op_move_32_ai_d(void)20567 static void m68k_op_move_32_ai_d(void)
20568 {
20569 	uint res = DY;
20570 	uint ea = EA_AX_AI_32();
20571 
20572 	m68ki_write_32(ea, res);
20573 
20574 	FLAG_N = NFLAG_32(res);
20575 	FLAG_Z = res;
20576 	FLAG_V = VFLAG_CLEAR;
20577 	FLAG_C = CFLAG_CLEAR;
20578 }
20579 
20580 
m68k_op_move_32_ai_a(void)20581 static void m68k_op_move_32_ai_a(void)
20582 {
20583 	uint res = AY;
20584 	uint ea = EA_AX_AI_32();
20585 
20586 	m68ki_write_32(ea, res);
20587 
20588 	FLAG_N = NFLAG_32(res);
20589 	FLAG_Z = res;
20590 	FLAG_V = VFLAG_CLEAR;
20591 	FLAG_C = CFLAG_CLEAR;
20592 }
20593 
20594 
m68k_op_move_32_ai_ai(void)20595 static void m68k_op_move_32_ai_ai(void)
20596 {
20597 	uint res = OPER_AY_AI_32();
20598 	uint ea = EA_AX_AI_32();
20599 
20600 	m68ki_write_32(ea, res);
20601 
20602 	FLAG_N = NFLAG_32(res);
20603 	FLAG_Z = res;
20604 	FLAG_V = VFLAG_CLEAR;
20605 	FLAG_C = CFLAG_CLEAR;
20606 }
20607 
20608 
m68k_op_move_32_ai_pi(void)20609 static void m68k_op_move_32_ai_pi(void)
20610 {
20611 	uint res = OPER_AY_PI_32();
20612 	uint ea = EA_AX_AI_32();
20613 
20614 	m68ki_write_32(ea, res);
20615 
20616 	FLAG_N = NFLAG_32(res);
20617 	FLAG_Z = res;
20618 	FLAG_V = VFLAG_CLEAR;
20619 	FLAG_C = CFLAG_CLEAR;
20620 }
20621 
20622 
m68k_op_move_32_ai_pd(void)20623 static void m68k_op_move_32_ai_pd(void)
20624 {
20625 	uint res = OPER_AY_PD_32();
20626 	uint ea = EA_AX_AI_32();
20627 
20628 	m68ki_write_32(ea, res);
20629 
20630 	FLAG_N = NFLAG_32(res);
20631 	FLAG_Z = res;
20632 	FLAG_V = VFLAG_CLEAR;
20633 	FLAG_C = CFLAG_CLEAR;
20634 }
20635 
20636 
m68k_op_move_32_ai_di(void)20637 static void m68k_op_move_32_ai_di(void)
20638 {
20639 	uint res = OPER_AY_DI_32();
20640 	uint ea = EA_AX_AI_32();
20641 
20642 	m68ki_write_32(ea, res);
20643 
20644 	FLAG_N = NFLAG_32(res);
20645 	FLAG_Z = res;
20646 	FLAG_V = VFLAG_CLEAR;
20647 	FLAG_C = CFLAG_CLEAR;
20648 }
20649 
20650 
m68k_op_move_32_ai_ix(void)20651 static void m68k_op_move_32_ai_ix(void)
20652 {
20653 	uint res = OPER_AY_IX_32();
20654 	uint ea = EA_AX_AI_32();
20655 
20656 	m68ki_write_32(ea, res);
20657 
20658 	FLAG_N = NFLAG_32(res);
20659 	FLAG_Z = res;
20660 	FLAG_V = VFLAG_CLEAR;
20661 	FLAG_C = CFLAG_CLEAR;
20662 }
20663 
20664 
m68k_op_move_32_ai_aw(void)20665 static void m68k_op_move_32_ai_aw(void)
20666 {
20667 	uint res = OPER_AW_32();
20668 	uint ea = EA_AX_AI_32();
20669 
20670 	m68ki_write_32(ea, res);
20671 
20672 	FLAG_N = NFLAG_32(res);
20673 	FLAG_Z = res;
20674 	FLAG_V = VFLAG_CLEAR;
20675 	FLAG_C = CFLAG_CLEAR;
20676 }
20677 
20678 
m68k_op_move_32_ai_al(void)20679 static void m68k_op_move_32_ai_al(void)
20680 {
20681 	uint res = OPER_AL_32();
20682 	uint ea = EA_AX_AI_32();
20683 
20684 	m68ki_write_32(ea, res);
20685 
20686 	FLAG_N = NFLAG_32(res);
20687 	FLAG_Z = res;
20688 	FLAG_V = VFLAG_CLEAR;
20689 	FLAG_C = CFLAG_CLEAR;
20690 }
20691 
20692 
m68k_op_move_32_ai_pcdi(void)20693 static void m68k_op_move_32_ai_pcdi(void)
20694 {
20695 	uint res = OPER_PCDI_32();
20696 	uint ea = EA_AX_AI_32();
20697 
20698 	m68ki_write_32(ea, res);
20699 
20700 	FLAG_N = NFLAG_32(res);
20701 	FLAG_Z = res;
20702 	FLAG_V = VFLAG_CLEAR;
20703 	FLAG_C = CFLAG_CLEAR;
20704 }
20705 
20706 
m68k_op_move_32_ai_pcix(void)20707 static void m68k_op_move_32_ai_pcix(void)
20708 {
20709 	uint res = OPER_PCIX_32();
20710 	uint ea = EA_AX_AI_32();
20711 
20712 	m68ki_write_32(ea, res);
20713 
20714 	FLAG_N = NFLAG_32(res);
20715 	FLAG_Z = res;
20716 	FLAG_V = VFLAG_CLEAR;
20717 	FLAG_C = CFLAG_CLEAR;
20718 }
20719 
20720 
m68k_op_move_32_ai_i(void)20721 static void m68k_op_move_32_ai_i(void)
20722 {
20723 	uint res = OPER_I_32();
20724 	uint ea = EA_AX_AI_32();
20725 
20726 	m68ki_write_32(ea, res);
20727 
20728 	FLAG_N = NFLAG_32(res);
20729 	FLAG_Z = res;
20730 	FLAG_V = VFLAG_CLEAR;
20731 	FLAG_C = CFLAG_CLEAR;
20732 }
20733 
20734 
m68k_op_move_32_pi_d(void)20735 static void m68k_op_move_32_pi_d(void)
20736 {
20737 	uint res = DY;
20738 	uint ea = EA_AX_PI_32();
20739 
20740 	m68ki_write_32(ea, res);
20741 
20742 	FLAG_N = NFLAG_32(res);
20743 	FLAG_Z = res;
20744 	FLAG_V = VFLAG_CLEAR;
20745 	FLAG_C = CFLAG_CLEAR;
20746 }
20747 
20748 
m68k_op_move_32_pi_a(void)20749 static void m68k_op_move_32_pi_a(void)
20750 {
20751 	uint res = AY;
20752 	uint ea = EA_AX_PI_32();
20753 
20754 	m68ki_write_32(ea, res);
20755 
20756 	FLAG_N = NFLAG_32(res);
20757 	FLAG_Z = res;
20758 	FLAG_V = VFLAG_CLEAR;
20759 	FLAG_C = CFLAG_CLEAR;
20760 }
20761 
20762 
m68k_op_move_32_pi_ai(void)20763 static void m68k_op_move_32_pi_ai(void)
20764 {
20765 	uint res = OPER_AY_AI_32();
20766 	uint ea = EA_AX_PI_32();
20767 
20768 	m68ki_write_32(ea, res);
20769 
20770 	FLAG_N = NFLAG_32(res);
20771 	FLAG_Z = res;
20772 	FLAG_V = VFLAG_CLEAR;
20773 	FLAG_C = CFLAG_CLEAR;
20774 }
20775 
20776 
m68k_op_move_32_pi_pi(void)20777 static void m68k_op_move_32_pi_pi(void)
20778 {
20779 	uint res = OPER_AY_PI_32();
20780 	uint ea = EA_AX_PI_32();
20781 
20782 	m68ki_write_32(ea, res);
20783 
20784 	FLAG_N = NFLAG_32(res);
20785 	FLAG_Z = res;
20786 	FLAG_V = VFLAG_CLEAR;
20787 	FLAG_C = CFLAG_CLEAR;
20788 }
20789 
20790 
m68k_op_move_32_pi_pd(void)20791 static void m68k_op_move_32_pi_pd(void)
20792 {
20793 	uint res = OPER_AY_PD_32();
20794 	uint ea = EA_AX_PI_32();
20795 
20796 	m68ki_write_32(ea, res);
20797 
20798 	FLAG_N = NFLAG_32(res);
20799 	FLAG_Z = res;
20800 	FLAG_V = VFLAG_CLEAR;
20801 	FLAG_C = CFLAG_CLEAR;
20802 }
20803 
20804 
m68k_op_move_32_pi_di(void)20805 static void m68k_op_move_32_pi_di(void)
20806 {
20807 	uint res = OPER_AY_DI_32();
20808 	uint ea = EA_AX_PI_32();
20809 
20810 	m68ki_write_32(ea, res);
20811 
20812 	FLAG_N = NFLAG_32(res);
20813 	FLAG_Z = res;
20814 	FLAG_V = VFLAG_CLEAR;
20815 	FLAG_C = CFLAG_CLEAR;
20816 }
20817 
20818 
m68k_op_move_32_pi_ix(void)20819 static void m68k_op_move_32_pi_ix(void)
20820 {
20821 	uint res = OPER_AY_IX_32();
20822 	uint ea = EA_AX_PI_32();
20823 
20824 	m68ki_write_32(ea, res);
20825 
20826 	FLAG_N = NFLAG_32(res);
20827 	FLAG_Z = res;
20828 	FLAG_V = VFLAG_CLEAR;
20829 	FLAG_C = CFLAG_CLEAR;
20830 }
20831 
20832 
m68k_op_move_32_pi_aw(void)20833 static void m68k_op_move_32_pi_aw(void)
20834 {
20835 	uint res = OPER_AW_32();
20836 	uint ea = EA_AX_PI_32();
20837 
20838 	m68ki_write_32(ea, res);
20839 
20840 	FLAG_N = NFLAG_32(res);
20841 	FLAG_Z = res;
20842 	FLAG_V = VFLAG_CLEAR;
20843 	FLAG_C = CFLAG_CLEAR;
20844 }
20845 
20846 
m68k_op_move_32_pi_al(void)20847 static void m68k_op_move_32_pi_al(void)
20848 {
20849 	uint res = OPER_AL_32();
20850 	uint ea = EA_AX_PI_32();
20851 
20852 	m68ki_write_32(ea, res);
20853 
20854 	FLAG_N = NFLAG_32(res);
20855 	FLAG_Z = res;
20856 	FLAG_V = VFLAG_CLEAR;
20857 	FLAG_C = CFLAG_CLEAR;
20858 }
20859 
20860 
m68k_op_move_32_pi_pcdi(void)20861 static void m68k_op_move_32_pi_pcdi(void)
20862 {
20863 	uint res = OPER_PCDI_32();
20864 	uint ea = EA_AX_PI_32();
20865 
20866 	m68ki_write_32(ea, res);
20867 
20868 	FLAG_N = NFLAG_32(res);
20869 	FLAG_Z = res;
20870 	FLAG_V = VFLAG_CLEAR;
20871 	FLAG_C = CFLAG_CLEAR;
20872 }
20873 
20874 
m68k_op_move_32_pi_pcix(void)20875 static void m68k_op_move_32_pi_pcix(void)
20876 {
20877 	uint res = OPER_PCIX_32();
20878 	uint ea = EA_AX_PI_32();
20879 
20880 	m68ki_write_32(ea, res);
20881 
20882 	FLAG_N = NFLAG_32(res);
20883 	FLAG_Z = res;
20884 	FLAG_V = VFLAG_CLEAR;
20885 	FLAG_C = CFLAG_CLEAR;
20886 }
20887 
20888 
m68k_op_move_32_pi_i(void)20889 static void m68k_op_move_32_pi_i(void)
20890 {
20891 	uint res = OPER_I_32();
20892 	uint ea = EA_AX_PI_32();
20893 
20894 	m68ki_write_32(ea, res);
20895 
20896 	FLAG_N = NFLAG_32(res);
20897 	FLAG_Z = res;
20898 	FLAG_V = VFLAG_CLEAR;
20899 	FLAG_C = CFLAG_CLEAR;
20900 }
20901 
20902 
m68k_op_move_32_pd_d(void)20903 static void m68k_op_move_32_pd_d(void)
20904 {
20905 	uint res = DY;
20906 	uint ea = EA_AX_PD_32();
20907 
20908 	m68ki_write_16(ea+2, res & 0xFFFF );
20909 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
20910 
20911 	FLAG_N = NFLAG_32(res);
20912 	FLAG_Z = res;
20913 	FLAG_V = VFLAG_CLEAR;
20914 	FLAG_C = CFLAG_CLEAR;
20915 }
20916 
20917 
m68k_op_move_32_pd_a(void)20918 static void m68k_op_move_32_pd_a(void)
20919 {
20920 	uint res = AY;
20921 	uint ea = EA_AX_PD_32();
20922 
20923 	m68ki_write_16(ea+2, res & 0xFFFF );
20924 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
20925 
20926 	FLAG_N = NFLAG_32(res);
20927 	FLAG_Z = res;
20928 	FLAG_V = VFLAG_CLEAR;
20929 	FLAG_C = CFLAG_CLEAR;
20930 }
20931 
20932 
m68k_op_move_32_pd_ai(void)20933 static void m68k_op_move_32_pd_ai(void)
20934 {
20935 	uint res = OPER_AY_AI_32();
20936 	uint ea = EA_AX_PD_32();
20937 
20938 	m68ki_write_16(ea+2, res & 0xFFFF );
20939 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
20940 
20941 	FLAG_N = NFLAG_32(res);
20942 	FLAG_Z = res;
20943 	FLAG_V = VFLAG_CLEAR;
20944 	FLAG_C = CFLAG_CLEAR;
20945 }
20946 
20947 
m68k_op_move_32_pd_pi(void)20948 static void m68k_op_move_32_pd_pi(void)
20949 {
20950 	uint res = OPER_AY_PI_32();
20951 	uint ea = EA_AX_PD_32();
20952 
20953 	m68ki_write_16(ea+2, res & 0xFFFF );
20954 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
20955 
20956 	FLAG_N = NFLAG_32(res);
20957 	FLAG_Z = res;
20958 	FLAG_V = VFLAG_CLEAR;
20959 	FLAG_C = CFLAG_CLEAR;
20960 }
20961 
20962 
m68k_op_move_32_pd_pd(void)20963 static void m68k_op_move_32_pd_pd(void)
20964 {
20965 	uint res = OPER_AY_PD_32();
20966 	uint ea = EA_AX_PD_32();
20967 
20968 	m68ki_write_16(ea+2, res & 0xFFFF );
20969 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
20970 
20971 	FLAG_N = NFLAG_32(res);
20972 	FLAG_Z = res;
20973 	FLAG_V = VFLAG_CLEAR;
20974 	FLAG_C = CFLAG_CLEAR;
20975 }
20976 
20977 
m68k_op_move_32_pd_di(void)20978 static void m68k_op_move_32_pd_di(void)
20979 {
20980 	uint res = OPER_AY_DI_32();
20981 	uint ea = EA_AX_PD_32();
20982 
20983 	m68ki_write_16(ea+2, res & 0xFFFF );
20984 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
20985 
20986 	FLAG_N = NFLAG_32(res);
20987 	FLAG_Z = res;
20988 	FLAG_V = VFLAG_CLEAR;
20989 	FLAG_C = CFLAG_CLEAR;
20990 }
20991 
20992 
m68k_op_move_32_pd_ix(void)20993 static void m68k_op_move_32_pd_ix(void)
20994 {
20995 	uint res = OPER_AY_IX_32();
20996 	uint ea = EA_AX_PD_32();
20997 
20998 	m68ki_write_16(ea+2, res & 0xFFFF );
20999 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
21000 
21001 	FLAG_N = NFLAG_32(res);
21002 	FLAG_Z = res;
21003 	FLAG_V = VFLAG_CLEAR;
21004 	FLAG_C = CFLAG_CLEAR;
21005 }
21006 
21007 
m68k_op_move_32_pd_aw(void)21008 static void m68k_op_move_32_pd_aw(void)
21009 {
21010 	uint res = OPER_AW_32();
21011 	uint ea = EA_AX_PD_32();
21012 
21013 	m68ki_write_16(ea+2, res & 0xFFFF );
21014 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
21015 
21016 	FLAG_N = NFLAG_32(res);
21017 	FLAG_Z = res;
21018 	FLAG_V = VFLAG_CLEAR;
21019 	FLAG_C = CFLAG_CLEAR;
21020 }
21021 
21022 
m68k_op_move_32_pd_al(void)21023 static void m68k_op_move_32_pd_al(void)
21024 {
21025 	uint res = OPER_AL_32();
21026 	uint ea = EA_AX_PD_32();
21027 
21028 	m68ki_write_16(ea+2, res & 0xFFFF );
21029 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
21030 
21031 	FLAG_N = NFLAG_32(res);
21032 	FLAG_Z = res;
21033 	FLAG_V = VFLAG_CLEAR;
21034 	FLAG_C = CFLAG_CLEAR;
21035 }
21036 
21037 
m68k_op_move_32_pd_pcdi(void)21038 static void m68k_op_move_32_pd_pcdi(void)
21039 {
21040 	uint res = OPER_PCDI_32();
21041 	uint ea = EA_AX_PD_32();
21042 
21043 	m68ki_write_16(ea+2, res & 0xFFFF );
21044 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
21045 
21046 	FLAG_N = NFLAG_32(res);
21047 	FLAG_Z = res;
21048 	FLAG_V = VFLAG_CLEAR;
21049 	FLAG_C = CFLAG_CLEAR;
21050 }
21051 
21052 
m68k_op_move_32_pd_pcix(void)21053 static void m68k_op_move_32_pd_pcix(void)
21054 {
21055 	uint res = OPER_PCIX_32();
21056 	uint ea = EA_AX_PD_32();
21057 
21058 	m68ki_write_16(ea+2, res & 0xFFFF );
21059 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
21060 
21061 	FLAG_N = NFLAG_32(res);
21062 	FLAG_Z = res;
21063 	FLAG_V = VFLAG_CLEAR;
21064 	FLAG_C = CFLAG_CLEAR;
21065 }
21066 
21067 
m68k_op_move_32_pd_i(void)21068 static void m68k_op_move_32_pd_i(void)
21069 {
21070 	uint res = OPER_I_32();
21071 	uint ea = EA_AX_PD_32();
21072 
21073 	m68ki_write_16(ea+2, res & 0xFFFF );
21074 	m68ki_write_16(ea, (res >> 16) & 0xFFFF );
21075 
21076 	FLAG_N = NFLAG_32(res);
21077 	FLAG_Z = res;
21078 	FLAG_V = VFLAG_CLEAR;
21079 	FLAG_C = CFLAG_CLEAR;
21080 }
21081 
21082 
m68k_op_move_32_di_d(void)21083 static void m68k_op_move_32_di_d(void)
21084 {
21085 	uint res = DY;
21086 	uint ea = EA_AX_DI_32();
21087 
21088 	m68ki_write_32(ea, res);
21089 
21090 	FLAG_N = NFLAG_32(res);
21091 	FLAG_Z = res;
21092 	FLAG_V = VFLAG_CLEAR;
21093 	FLAG_C = CFLAG_CLEAR;
21094 }
21095 
21096 
m68k_op_move_32_di_a(void)21097 static void m68k_op_move_32_di_a(void)
21098 {
21099 	uint res = AY;
21100 	uint ea = EA_AX_DI_32();
21101 
21102 	m68ki_write_32(ea, res);
21103 
21104 	FLAG_N = NFLAG_32(res);
21105 	FLAG_Z = res;
21106 	FLAG_V = VFLAG_CLEAR;
21107 	FLAG_C = CFLAG_CLEAR;
21108 }
21109 
21110 
m68k_op_move_32_di_ai(void)21111 static void m68k_op_move_32_di_ai(void)
21112 {
21113 	uint res = OPER_AY_AI_32();
21114 	uint ea = EA_AX_DI_32();
21115 
21116 	m68ki_write_32(ea, res);
21117 
21118 	FLAG_N = NFLAG_32(res);
21119 	FLAG_Z = res;
21120 	FLAG_V = VFLAG_CLEAR;
21121 	FLAG_C = CFLAG_CLEAR;
21122 }
21123 
21124 
m68k_op_move_32_di_pi(void)21125 static void m68k_op_move_32_di_pi(void)
21126 {
21127 	uint res = OPER_AY_PI_32();
21128 	uint ea = EA_AX_DI_32();
21129 
21130 	m68ki_write_32(ea, res);
21131 
21132 	FLAG_N = NFLAG_32(res);
21133 	FLAG_Z = res;
21134 	FLAG_V = VFLAG_CLEAR;
21135 	FLAG_C = CFLAG_CLEAR;
21136 }
21137 
21138 
m68k_op_move_32_di_pd(void)21139 static void m68k_op_move_32_di_pd(void)
21140 {
21141 	uint res = OPER_AY_PD_32();
21142 	uint ea = EA_AX_DI_32();
21143 
21144 	m68ki_write_32(ea, res);
21145 
21146 	FLAG_N = NFLAG_32(res);
21147 	FLAG_Z = res;
21148 	FLAG_V = VFLAG_CLEAR;
21149 	FLAG_C = CFLAG_CLEAR;
21150 }
21151 
21152 
m68k_op_move_32_di_di(void)21153 static void m68k_op_move_32_di_di(void)
21154 {
21155 	uint res = OPER_AY_DI_32();
21156 	uint ea = EA_AX_DI_32();
21157 
21158 	m68ki_write_32(ea, res);
21159 
21160 	FLAG_N = NFLAG_32(res);
21161 	FLAG_Z = res;
21162 	FLAG_V = VFLAG_CLEAR;
21163 	FLAG_C = CFLAG_CLEAR;
21164 }
21165 
21166 
m68k_op_move_32_di_ix(void)21167 static void m68k_op_move_32_di_ix(void)
21168 {
21169 	uint res = OPER_AY_IX_32();
21170 	uint ea = EA_AX_DI_32();
21171 
21172 	m68ki_write_32(ea, res);
21173 
21174 	FLAG_N = NFLAG_32(res);
21175 	FLAG_Z = res;
21176 	FLAG_V = VFLAG_CLEAR;
21177 	FLAG_C = CFLAG_CLEAR;
21178 }
21179 
21180 
m68k_op_move_32_di_aw(void)21181 static void m68k_op_move_32_di_aw(void)
21182 {
21183 	uint res = OPER_AW_32();
21184 	uint ea = EA_AX_DI_32();
21185 
21186 	m68ki_write_32(ea, res);
21187 
21188 	FLAG_N = NFLAG_32(res);
21189 	FLAG_Z = res;
21190 	FLAG_V = VFLAG_CLEAR;
21191 	FLAG_C = CFLAG_CLEAR;
21192 }
21193 
21194 
m68k_op_move_32_di_al(void)21195 static void m68k_op_move_32_di_al(void)
21196 {
21197 	uint res = OPER_AL_32();
21198 	uint ea = EA_AX_DI_32();
21199 
21200 	m68ki_write_32(ea, res);
21201 
21202 	FLAG_N = NFLAG_32(res);
21203 	FLAG_Z = res;
21204 	FLAG_V = VFLAG_CLEAR;
21205 	FLAG_C = CFLAG_CLEAR;
21206 }
21207 
21208 
m68k_op_move_32_di_pcdi(void)21209 static void m68k_op_move_32_di_pcdi(void)
21210 {
21211 	uint res = OPER_PCDI_32();
21212 	uint ea = EA_AX_DI_32();
21213 
21214 	m68ki_write_32(ea, res);
21215 
21216 	FLAG_N = NFLAG_32(res);
21217 	FLAG_Z = res;
21218 	FLAG_V = VFLAG_CLEAR;
21219 	FLAG_C = CFLAG_CLEAR;
21220 }
21221 
21222 
m68k_op_move_32_di_pcix(void)21223 static void m68k_op_move_32_di_pcix(void)
21224 {
21225 	uint res = OPER_PCIX_32();
21226 	uint ea = EA_AX_DI_32();
21227 
21228 	m68ki_write_32(ea, res);
21229 
21230 	FLAG_N = NFLAG_32(res);
21231 	FLAG_Z = res;
21232 	FLAG_V = VFLAG_CLEAR;
21233 	FLAG_C = CFLAG_CLEAR;
21234 }
21235 
21236 
m68k_op_move_32_di_i(void)21237 static void m68k_op_move_32_di_i(void)
21238 {
21239 	uint res = OPER_I_32();
21240 	uint ea = EA_AX_DI_32();
21241 
21242 	m68ki_write_32(ea, res);
21243 
21244 	FLAG_N = NFLAG_32(res);
21245 	FLAG_Z = res;
21246 	FLAG_V = VFLAG_CLEAR;
21247 	FLAG_C = CFLAG_CLEAR;
21248 }
21249 
21250 
m68k_op_move_32_ix_d(void)21251 static void m68k_op_move_32_ix_d(void)
21252 {
21253 	uint res = DY;
21254 	uint ea = EA_AX_IX_32();
21255 
21256 	m68ki_write_32(ea, res);
21257 
21258 	FLAG_N = NFLAG_32(res);
21259 	FLAG_Z = res;
21260 	FLAG_V = VFLAG_CLEAR;
21261 	FLAG_C = CFLAG_CLEAR;
21262 }
21263 
21264 
m68k_op_move_32_ix_a(void)21265 static void m68k_op_move_32_ix_a(void)
21266 {
21267 	uint res = AY;
21268 	uint ea = EA_AX_IX_32();
21269 
21270 	m68ki_write_32(ea, res);
21271 
21272 	FLAG_N = NFLAG_32(res);
21273 	FLAG_Z = res;
21274 	FLAG_V = VFLAG_CLEAR;
21275 	FLAG_C = CFLAG_CLEAR;
21276 }
21277 
21278 
m68k_op_move_32_ix_ai(void)21279 static void m68k_op_move_32_ix_ai(void)
21280 {
21281 	uint res = OPER_AY_AI_32();
21282 	uint ea = EA_AX_IX_32();
21283 
21284 	m68ki_write_32(ea, res);
21285 
21286 	FLAG_N = NFLAG_32(res);
21287 	FLAG_Z = res;
21288 	FLAG_V = VFLAG_CLEAR;
21289 	FLAG_C = CFLAG_CLEAR;
21290 }
21291 
21292 
m68k_op_move_32_ix_pi(void)21293 static void m68k_op_move_32_ix_pi(void)
21294 {
21295 	uint res = OPER_AY_PI_32();
21296 	uint ea = EA_AX_IX_32();
21297 
21298 	m68ki_write_32(ea, res);
21299 
21300 	FLAG_N = NFLAG_32(res);
21301 	FLAG_Z = res;
21302 	FLAG_V = VFLAG_CLEAR;
21303 	FLAG_C = CFLAG_CLEAR;
21304 }
21305 
21306 
m68k_op_move_32_ix_pd(void)21307 static void m68k_op_move_32_ix_pd(void)
21308 {
21309 	uint res = OPER_AY_PD_32();
21310 	uint ea = EA_AX_IX_32();
21311 
21312 	m68ki_write_32(ea, res);
21313 
21314 	FLAG_N = NFLAG_32(res);
21315 	FLAG_Z = res;
21316 	FLAG_V = VFLAG_CLEAR;
21317 	FLAG_C = CFLAG_CLEAR;
21318 }
21319 
21320 
m68k_op_move_32_ix_di(void)21321 static void m68k_op_move_32_ix_di(void)
21322 {
21323 	uint res = OPER_AY_DI_32();
21324 	uint ea = EA_AX_IX_32();
21325 
21326 	m68ki_write_32(ea, res);
21327 
21328 	FLAG_N = NFLAG_32(res);
21329 	FLAG_Z = res;
21330 	FLAG_V = VFLAG_CLEAR;
21331 	FLAG_C = CFLAG_CLEAR;
21332 }
21333 
21334 
m68k_op_move_32_ix_ix(void)21335 static void m68k_op_move_32_ix_ix(void)
21336 {
21337 	uint res = OPER_AY_IX_32();
21338 	uint ea = EA_AX_IX_32();
21339 
21340 	m68ki_write_32(ea, res);
21341 
21342 	FLAG_N = NFLAG_32(res);
21343 	FLAG_Z = res;
21344 	FLAG_V = VFLAG_CLEAR;
21345 	FLAG_C = CFLAG_CLEAR;
21346 }
21347 
21348 
m68k_op_move_32_ix_aw(void)21349 static void m68k_op_move_32_ix_aw(void)
21350 {
21351 	uint res = OPER_AW_32();
21352 	uint ea = EA_AX_IX_32();
21353 
21354 	m68ki_write_32(ea, res);
21355 
21356 	FLAG_N = NFLAG_32(res);
21357 	FLAG_Z = res;
21358 	FLAG_V = VFLAG_CLEAR;
21359 	FLAG_C = CFLAG_CLEAR;
21360 }
21361 
21362 
m68k_op_move_32_ix_al(void)21363 static void m68k_op_move_32_ix_al(void)
21364 {
21365 	uint res = OPER_AL_32();
21366 	uint ea = EA_AX_IX_32();
21367 
21368 	m68ki_write_32(ea, res);
21369 
21370 	FLAG_N = NFLAG_32(res);
21371 	FLAG_Z = res;
21372 	FLAG_V = VFLAG_CLEAR;
21373 	FLAG_C = CFLAG_CLEAR;
21374 }
21375 
21376 
m68k_op_move_32_ix_pcdi(void)21377 static void m68k_op_move_32_ix_pcdi(void)
21378 {
21379 	uint res = OPER_PCDI_32();
21380 	uint ea = EA_AX_IX_32();
21381 
21382 	m68ki_write_32(ea, res);
21383 
21384 	FLAG_N = NFLAG_32(res);
21385 	FLAG_Z = res;
21386 	FLAG_V = VFLAG_CLEAR;
21387 	FLAG_C = CFLAG_CLEAR;
21388 }
21389 
21390 
m68k_op_move_32_ix_pcix(void)21391 static void m68k_op_move_32_ix_pcix(void)
21392 {
21393 	uint res = OPER_PCIX_32();
21394 	uint ea = EA_AX_IX_32();
21395 
21396 	m68ki_write_32(ea, res);
21397 
21398 	FLAG_N = NFLAG_32(res);
21399 	FLAG_Z = res;
21400 	FLAG_V = VFLAG_CLEAR;
21401 	FLAG_C = CFLAG_CLEAR;
21402 }
21403 
21404 
m68k_op_move_32_ix_i(void)21405 static void m68k_op_move_32_ix_i(void)
21406 {
21407 	uint res = OPER_I_32();
21408 	uint ea = EA_AX_IX_32();
21409 
21410 	m68ki_write_32(ea, res);
21411 
21412 	FLAG_N = NFLAG_32(res);
21413 	FLAG_Z = res;
21414 	FLAG_V = VFLAG_CLEAR;
21415 	FLAG_C = CFLAG_CLEAR;
21416 }
21417 
21418 
m68k_op_move_32_aw_d(void)21419 static void m68k_op_move_32_aw_d(void)
21420 {
21421 	uint res = DY;
21422 	uint ea = EA_AW_32();
21423 
21424 	m68ki_write_32(ea, res);
21425 
21426 	FLAG_N = NFLAG_32(res);
21427 	FLAG_Z = res;
21428 	FLAG_V = VFLAG_CLEAR;
21429 	FLAG_C = CFLAG_CLEAR;
21430 }
21431 
21432 
m68k_op_move_32_aw_a(void)21433 static void m68k_op_move_32_aw_a(void)
21434 {
21435 	uint res = AY;
21436 	uint ea = EA_AW_32();
21437 
21438 	m68ki_write_32(ea, res);
21439 
21440 	FLAG_N = NFLAG_32(res);
21441 	FLAG_Z = res;
21442 	FLAG_V = VFLAG_CLEAR;
21443 	FLAG_C = CFLAG_CLEAR;
21444 }
21445 
21446 
m68k_op_move_32_aw_ai(void)21447 static void m68k_op_move_32_aw_ai(void)
21448 {
21449 	uint res = OPER_AY_AI_32();
21450 	uint ea = EA_AW_32();
21451 
21452 	m68ki_write_32(ea, res);
21453 
21454 	FLAG_N = NFLAG_32(res);
21455 	FLAG_Z = res;
21456 	FLAG_V = VFLAG_CLEAR;
21457 	FLAG_C = CFLAG_CLEAR;
21458 }
21459 
21460 
m68k_op_move_32_aw_pi(void)21461 static void m68k_op_move_32_aw_pi(void)
21462 {
21463 	uint res = OPER_AY_PI_32();
21464 	uint ea = EA_AW_32();
21465 
21466 	m68ki_write_32(ea, res);
21467 
21468 	FLAG_N = NFLAG_32(res);
21469 	FLAG_Z = res;
21470 	FLAG_V = VFLAG_CLEAR;
21471 	FLAG_C = CFLAG_CLEAR;
21472 }
21473 
21474 
m68k_op_move_32_aw_pd(void)21475 static void m68k_op_move_32_aw_pd(void)
21476 {
21477 	uint res = OPER_AY_PD_32();
21478 	uint ea = EA_AW_32();
21479 
21480 	m68ki_write_32(ea, res);
21481 
21482 	FLAG_N = NFLAG_32(res);
21483 	FLAG_Z = res;
21484 	FLAG_V = VFLAG_CLEAR;
21485 	FLAG_C = CFLAG_CLEAR;
21486 }
21487 
21488 
m68k_op_move_32_aw_di(void)21489 static void m68k_op_move_32_aw_di(void)
21490 {
21491 	uint res = OPER_AY_DI_32();
21492 	uint ea = EA_AW_32();
21493 
21494 	m68ki_write_32(ea, res);
21495 
21496 	FLAG_N = NFLAG_32(res);
21497 	FLAG_Z = res;
21498 	FLAG_V = VFLAG_CLEAR;
21499 	FLAG_C = CFLAG_CLEAR;
21500 }
21501 
21502 
m68k_op_move_32_aw_ix(void)21503 static void m68k_op_move_32_aw_ix(void)
21504 {
21505 	uint res = OPER_AY_IX_32();
21506 	uint ea = EA_AW_32();
21507 
21508 	m68ki_write_32(ea, res);
21509 
21510 	FLAG_N = NFLAG_32(res);
21511 	FLAG_Z = res;
21512 	FLAG_V = VFLAG_CLEAR;
21513 	FLAG_C = CFLAG_CLEAR;
21514 }
21515 
21516 
m68k_op_move_32_aw_aw(void)21517 static void m68k_op_move_32_aw_aw(void)
21518 {
21519 	uint res = OPER_AW_32();
21520 	uint ea = EA_AW_32();
21521 
21522 	m68ki_write_32(ea, res);
21523 
21524 	FLAG_N = NFLAG_32(res);
21525 	FLAG_Z = res;
21526 	FLAG_V = VFLAG_CLEAR;
21527 	FLAG_C = CFLAG_CLEAR;
21528 }
21529 
21530 
m68k_op_move_32_aw_al(void)21531 static void m68k_op_move_32_aw_al(void)
21532 {
21533 	uint res = OPER_AL_32();
21534 	uint ea = EA_AW_32();
21535 
21536 	m68ki_write_32(ea, res);
21537 
21538 	FLAG_N = NFLAG_32(res);
21539 	FLAG_Z = res;
21540 	FLAG_V = VFLAG_CLEAR;
21541 	FLAG_C = CFLAG_CLEAR;
21542 }
21543 
21544 
m68k_op_move_32_aw_pcdi(void)21545 static void m68k_op_move_32_aw_pcdi(void)
21546 {
21547 	uint res = OPER_PCDI_32();
21548 	uint ea = EA_AW_32();
21549 
21550 	m68ki_write_32(ea, res);
21551 
21552 	FLAG_N = NFLAG_32(res);
21553 	FLAG_Z = res;
21554 	FLAG_V = VFLAG_CLEAR;
21555 	FLAG_C = CFLAG_CLEAR;
21556 }
21557 
21558 
m68k_op_move_32_aw_pcix(void)21559 static void m68k_op_move_32_aw_pcix(void)
21560 {
21561 	uint res = OPER_PCIX_32();
21562 	uint ea = EA_AW_32();
21563 
21564 	m68ki_write_32(ea, res);
21565 
21566 	FLAG_N = NFLAG_32(res);
21567 	FLAG_Z = res;
21568 	FLAG_V = VFLAG_CLEAR;
21569 	FLAG_C = CFLAG_CLEAR;
21570 }
21571 
21572 
m68k_op_move_32_aw_i(void)21573 static void m68k_op_move_32_aw_i(void)
21574 {
21575 	uint res = OPER_I_32();
21576 	uint ea = EA_AW_32();
21577 
21578 	m68ki_write_32(ea, res);
21579 
21580 	FLAG_N = NFLAG_32(res);
21581 	FLAG_Z = res;
21582 	FLAG_V = VFLAG_CLEAR;
21583 	FLAG_C = CFLAG_CLEAR;
21584 }
21585 
21586 
m68k_op_move_32_al_d(void)21587 static void m68k_op_move_32_al_d(void)
21588 {
21589 	uint res = DY;
21590 	uint ea = EA_AL_32();
21591 
21592 	m68ki_write_32(ea, res);
21593 
21594 	FLAG_N = NFLAG_32(res);
21595 	FLAG_Z = res;
21596 	FLAG_V = VFLAG_CLEAR;
21597 	FLAG_C = CFLAG_CLEAR;
21598 }
21599 
21600 
m68k_op_move_32_al_a(void)21601 static void m68k_op_move_32_al_a(void)
21602 {
21603 	uint res = AY;
21604 	uint ea = EA_AL_32();
21605 
21606 	m68ki_write_32(ea, res);
21607 
21608 	FLAG_N = NFLAG_32(res);
21609 	FLAG_Z = res;
21610 	FLAG_V = VFLAG_CLEAR;
21611 	FLAG_C = CFLAG_CLEAR;
21612 }
21613 
21614 
m68k_op_move_32_al_ai(void)21615 static void m68k_op_move_32_al_ai(void)
21616 {
21617 	uint res = OPER_AY_AI_32();
21618 	uint ea = EA_AL_32();
21619 
21620 	m68ki_write_32(ea, res);
21621 
21622 	FLAG_N = NFLAG_32(res);
21623 	FLAG_Z = res;
21624 	FLAG_V = VFLAG_CLEAR;
21625 	FLAG_C = CFLAG_CLEAR;
21626 }
21627 
21628 
m68k_op_move_32_al_pi(void)21629 static void m68k_op_move_32_al_pi(void)
21630 {
21631 	uint res = OPER_AY_PI_32();
21632 	uint ea = EA_AL_32();
21633 
21634 	m68ki_write_32(ea, res);
21635 
21636 	FLAG_N = NFLAG_32(res);
21637 	FLAG_Z = res;
21638 	FLAG_V = VFLAG_CLEAR;
21639 	FLAG_C = CFLAG_CLEAR;
21640 }
21641 
21642 
m68k_op_move_32_al_pd(void)21643 static void m68k_op_move_32_al_pd(void)
21644 {
21645 	uint res = OPER_AY_PD_32();
21646 	uint ea = EA_AL_32();
21647 
21648 	m68ki_write_32(ea, res);
21649 
21650 	FLAG_N = NFLAG_32(res);
21651 	FLAG_Z = res;
21652 	FLAG_V = VFLAG_CLEAR;
21653 	FLAG_C = CFLAG_CLEAR;
21654 }
21655 
21656 
m68k_op_move_32_al_di(void)21657 static void m68k_op_move_32_al_di(void)
21658 {
21659 	uint res = OPER_AY_DI_32();
21660 	uint ea = EA_AL_32();
21661 
21662 	m68ki_write_32(ea, res);
21663 
21664 	FLAG_N = NFLAG_32(res);
21665 	FLAG_Z = res;
21666 	FLAG_V = VFLAG_CLEAR;
21667 	FLAG_C = CFLAG_CLEAR;
21668 }
21669 
21670 
m68k_op_move_32_al_ix(void)21671 static void m68k_op_move_32_al_ix(void)
21672 {
21673 	uint res = OPER_AY_IX_32();
21674 	uint ea = EA_AL_32();
21675 
21676 	m68ki_write_32(ea, res);
21677 
21678 	FLAG_N = NFLAG_32(res);
21679 	FLAG_Z = res;
21680 	FLAG_V = VFLAG_CLEAR;
21681 	FLAG_C = CFLAG_CLEAR;
21682 }
21683 
21684 
m68k_op_move_32_al_aw(void)21685 static void m68k_op_move_32_al_aw(void)
21686 {
21687 	uint res = OPER_AW_32();
21688 	uint ea = EA_AL_32();
21689 
21690 	m68ki_write_32(ea, res);
21691 
21692 	FLAG_N = NFLAG_32(res);
21693 	FLAG_Z = res;
21694 	FLAG_V = VFLAG_CLEAR;
21695 	FLAG_C = CFLAG_CLEAR;
21696 }
21697 
21698 
m68k_op_move_32_al_al(void)21699 static void m68k_op_move_32_al_al(void)
21700 {
21701 	uint res = OPER_AL_32();
21702 	uint ea = EA_AL_32();
21703 
21704 	m68ki_write_32(ea, res);
21705 
21706 	FLAG_N = NFLAG_32(res);
21707 	FLAG_Z = res;
21708 	FLAG_V = VFLAG_CLEAR;
21709 	FLAG_C = CFLAG_CLEAR;
21710 }
21711 
21712 
m68k_op_move_32_al_pcdi(void)21713 static void m68k_op_move_32_al_pcdi(void)
21714 {
21715 	uint res = OPER_PCDI_32();
21716 	uint ea = EA_AL_32();
21717 
21718 	m68ki_write_32(ea, res);
21719 
21720 	FLAG_N = NFLAG_32(res);
21721 	FLAG_Z = res;
21722 	FLAG_V = VFLAG_CLEAR;
21723 	FLAG_C = CFLAG_CLEAR;
21724 }
21725 
21726 
m68k_op_move_32_al_pcix(void)21727 static void m68k_op_move_32_al_pcix(void)
21728 {
21729 	uint res = OPER_PCIX_32();
21730 	uint ea = EA_AL_32();
21731 
21732 	m68ki_write_32(ea, res);
21733 
21734 	FLAG_N = NFLAG_32(res);
21735 	FLAG_Z = res;
21736 	FLAG_V = VFLAG_CLEAR;
21737 	FLAG_C = CFLAG_CLEAR;
21738 }
21739 
21740 
m68k_op_move_32_al_i(void)21741 static void m68k_op_move_32_al_i(void)
21742 {
21743 	uint res = OPER_I_32();
21744 	uint ea = EA_AL_32();
21745 
21746 	m68ki_write_32(ea, res);
21747 
21748 	FLAG_N = NFLAG_32(res);
21749 	FLAG_Z = res;
21750 	FLAG_V = VFLAG_CLEAR;
21751 	FLAG_C = CFLAG_CLEAR;
21752 }
21753 
21754 
m68k_op_movea_16_d(void)21755 static void m68k_op_movea_16_d(void)
21756 {
21757 	AX = MAKE_INT_16(DY);
21758 }
21759 
21760 
m68k_op_movea_16_a(void)21761 static void m68k_op_movea_16_a(void)
21762 {
21763 	AX = MAKE_INT_16(AY);
21764 }
21765 
21766 
m68k_op_movea_16_ai(void)21767 static void m68k_op_movea_16_ai(void)
21768 {
21769 	AX = MAKE_INT_16(OPER_AY_AI_16());
21770 }
21771 
21772 
m68k_op_movea_16_pi(void)21773 static void m68k_op_movea_16_pi(void)
21774 {
21775 	AX = MAKE_INT_16(OPER_AY_PI_16());
21776 }
21777 
21778 
m68k_op_movea_16_pd(void)21779 static void m68k_op_movea_16_pd(void)
21780 {
21781 	AX = MAKE_INT_16(OPER_AY_PD_16());
21782 }
21783 
21784 
m68k_op_movea_16_di(void)21785 static void m68k_op_movea_16_di(void)
21786 {
21787 	AX = MAKE_INT_16(OPER_AY_DI_16());
21788 }
21789 
21790 
m68k_op_movea_16_ix(void)21791 static void m68k_op_movea_16_ix(void)
21792 {
21793 	AX = MAKE_INT_16(OPER_AY_IX_16());
21794 }
21795 
21796 
m68k_op_movea_16_aw(void)21797 static void m68k_op_movea_16_aw(void)
21798 {
21799 	AX = MAKE_INT_16(OPER_AW_16());
21800 }
21801 
21802 
m68k_op_movea_16_al(void)21803 static void m68k_op_movea_16_al(void)
21804 {
21805 	AX = MAKE_INT_16(OPER_AL_16());
21806 }
21807 
21808 
m68k_op_movea_16_pcdi(void)21809 static void m68k_op_movea_16_pcdi(void)
21810 {
21811 	AX = MAKE_INT_16(OPER_PCDI_16());
21812 }
21813 
21814 
m68k_op_movea_16_pcix(void)21815 static void m68k_op_movea_16_pcix(void)
21816 {
21817 	AX = MAKE_INT_16(OPER_PCIX_16());
21818 }
21819 
21820 
m68k_op_movea_16_i(void)21821 static void m68k_op_movea_16_i(void)
21822 {
21823 	AX = MAKE_INT_16(OPER_I_16());
21824 }
21825 
21826 
m68k_op_movea_32_d(void)21827 static void m68k_op_movea_32_d(void)
21828 {
21829 	AX = DY;
21830 }
21831 
21832 
m68k_op_movea_32_a(void)21833 static void m68k_op_movea_32_a(void)
21834 {
21835 	AX = AY;
21836 }
21837 
21838 
m68k_op_movea_32_ai(void)21839 static void m68k_op_movea_32_ai(void)
21840 {
21841 	AX = OPER_AY_AI_32();
21842 }
21843 
21844 
m68k_op_movea_32_pi(void)21845 static void m68k_op_movea_32_pi(void)
21846 {
21847 	AX = OPER_AY_PI_32();
21848 }
21849 
21850 
m68k_op_movea_32_pd(void)21851 static void m68k_op_movea_32_pd(void)
21852 {
21853 	AX = OPER_AY_PD_32();
21854 }
21855 
21856 
m68k_op_movea_32_di(void)21857 static void m68k_op_movea_32_di(void)
21858 {
21859 	AX = OPER_AY_DI_32();
21860 }
21861 
21862 
m68k_op_movea_32_ix(void)21863 static void m68k_op_movea_32_ix(void)
21864 {
21865 	AX = OPER_AY_IX_32();
21866 }
21867 
21868 
m68k_op_movea_32_aw(void)21869 static void m68k_op_movea_32_aw(void)
21870 {
21871 	AX = OPER_AW_32();
21872 }
21873 
21874 
m68k_op_movea_32_al(void)21875 static void m68k_op_movea_32_al(void)
21876 {
21877 	AX = OPER_AL_32();
21878 }
21879 
21880 
m68k_op_movea_32_pcdi(void)21881 static void m68k_op_movea_32_pcdi(void)
21882 {
21883 	AX = OPER_PCDI_32();
21884 }
21885 
21886 
m68k_op_movea_32_pcix(void)21887 static void m68k_op_movea_32_pcix(void)
21888 {
21889 	AX = OPER_PCIX_32();
21890 }
21891 
21892 
m68k_op_movea_32_i(void)21893 static void m68k_op_movea_32_i(void)
21894 {
21895 	AX = OPER_I_32();
21896 }
21897 
21898 
m68k_op_move_16_frc_d(void)21899 static void m68k_op_move_16_frc_d(void)
21900 {
21901 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
21902 	{
21903 		DY = MASK_OUT_BELOW_16(DY) | m68ki_get_ccr();
21904 		return;
21905 	}
21906 	m68ki_exception_illegal();
21907 }
21908 
21909 
m68k_op_move_16_frc_ai(void)21910 static void m68k_op_move_16_frc_ai(void)
21911 {
21912 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
21913 	{
21914 		m68ki_write_16(EA_AY_AI_16(), m68ki_get_ccr());
21915 		return;
21916 	}
21917 	m68ki_exception_illegal();
21918 }
21919 
21920 
m68k_op_move_16_frc_pi(void)21921 static void m68k_op_move_16_frc_pi(void)
21922 {
21923 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
21924 	{
21925 		m68ki_write_16(EA_AY_PI_16(), m68ki_get_ccr());
21926 		return;
21927 	}
21928 	m68ki_exception_illegal();
21929 }
21930 
21931 
m68k_op_move_16_frc_pd(void)21932 static void m68k_op_move_16_frc_pd(void)
21933 {
21934 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
21935 	{
21936 		m68ki_write_16(EA_AY_PD_16(), m68ki_get_ccr());
21937 		return;
21938 	}
21939 	m68ki_exception_illegal();
21940 }
21941 
21942 
m68k_op_move_16_frc_di(void)21943 static void m68k_op_move_16_frc_di(void)
21944 {
21945 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
21946 	{
21947 		m68ki_write_16(EA_AY_DI_16(), m68ki_get_ccr());
21948 		return;
21949 	}
21950 	m68ki_exception_illegal();
21951 }
21952 
21953 
m68k_op_move_16_frc_ix(void)21954 static void m68k_op_move_16_frc_ix(void)
21955 {
21956 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
21957 	{
21958 		m68ki_write_16(EA_AY_IX_16(), m68ki_get_ccr());
21959 		return;
21960 	}
21961 	m68ki_exception_illegal();
21962 }
21963 
21964 
m68k_op_move_16_frc_aw(void)21965 static void m68k_op_move_16_frc_aw(void)
21966 {
21967 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
21968 	{
21969 		m68ki_write_16(EA_AW_16(), m68ki_get_ccr());
21970 		return;
21971 	}
21972 	m68ki_exception_illegal();
21973 }
21974 
21975 
m68k_op_move_16_frc_al(void)21976 static void m68k_op_move_16_frc_al(void)
21977 {
21978 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
21979 	{
21980 		m68ki_write_16(EA_AL_16(), m68ki_get_ccr());
21981 		return;
21982 	}
21983 	m68ki_exception_illegal();
21984 }
21985 
21986 
m68k_op_move_16_toc_d(void)21987 static void m68k_op_move_16_toc_d(void)
21988 {
21989 	m68ki_set_ccr(DY);
21990 }
21991 
21992 
m68k_op_move_16_toc_ai(void)21993 static void m68k_op_move_16_toc_ai(void)
21994 {
21995 	m68ki_set_ccr(OPER_AY_AI_16());
21996 }
21997 
21998 
m68k_op_move_16_toc_pi(void)21999 static void m68k_op_move_16_toc_pi(void)
22000 {
22001 	m68ki_set_ccr(OPER_AY_PI_16());
22002 }
22003 
22004 
m68k_op_move_16_toc_pd(void)22005 static void m68k_op_move_16_toc_pd(void)
22006 {
22007 	m68ki_set_ccr(OPER_AY_PD_16());
22008 }
22009 
22010 
m68k_op_move_16_toc_di(void)22011 static void m68k_op_move_16_toc_di(void)
22012 {
22013 	m68ki_set_ccr(OPER_AY_DI_16());
22014 }
22015 
22016 
m68k_op_move_16_toc_ix(void)22017 static void m68k_op_move_16_toc_ix(void)
22018 {
22019 	m68ki_set_ccr(OPER_AY_IX_16());
22020 }
22021 
22022 
m68k_op_move_16_toc_aw(void)22023 static void m68k_op_move_16_toc_aw(void)
22024 {
22025 	m68ki_set_ccr(OPER_AW_16());
22026 }
22027 
22028 
m68k_op_move_16_toc_al(void)22029 static void m68k_op_move_16_toc_al(void)
22030 {
22031 	m68ki_set_ccr(OPER_AL_16());
22032 }
22033 
22034 
m68k_op_move_16_toc_pcdi(void)22035 static void m68k_op_move_16_toc_pcdi(void)
22036 {
22037 	m68ki_set_ccr(OPER_PCDI_16());
22038 }
22039 
22040 
m68k_op_move_16_toc_pcix(void)22041 static void m68k_op_move_16_toc_pcix(void)
22042 {
22043 	m68ki_set_ccr(OPER_PCIX_16());
22044 }
22045 
22046 
m68k_op_move_16_toc_i(void)22047 static void m68k_op_move_16_toc_i(void)
22048 {
22049 	m68ki_set_ccr(OPER_I_16());
22050 }
22051 
22052 
m68k_op_move_16_frs_d(void)22053 static void m68k_op_move_16_frs_d(void)
22054 {
22055 	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
22056 	{
22057 		DY = MASK_OUT_BELOW_16(DY) | m68ki_get_sr();
22058 		return;
22059 	}
22060 	m68ki_exception_privilege_violation();
22061 }
22062 
22063 
m68k_op_move_16_frs_ai(void)22064 static void m68k_op_move_16_frs_ai(void)
22065 {
22066 	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
22067 	{
22068 		uint ea = EA_AY_AI_16();
22069 		m68ki_write_16(ea, m68ki_get_sr());
22070 		return;
22071 	}
22072 	m68ki_exception_privilege_violation();
22073 }
22074 
22075 
m68k_op_move_16_frs_pi(void)22076 static void m68k_op_move_16_frs_pi(void)
22077 {
22078 	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
22079 	{
22080 		uint ea = EA_AY_PI_16();
22081 		m68ki_write_16(ea, m68ki_get_sr());
22082 		return;
22083 	}
22084 	m68ki_exception_privilege_violation();
22085 }
22086 
22087 
m68k_op_move_16_frs_pd(void)22088 static void m68k_op_move_16_frs_pd(void)
22089 {
22090 	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
22091 	{
22092 		uint ea = EA_AY_PD_16();
22093 		m68ki_write_16(ea, m68ki_get_sr());
22094 		return;
22095 	}
22096 	m68ki_exception_privilege_violation();
22097 }
22098 
22099 
m68k_op_move_16_frs_di(void)22100 static void m68k_op_move_16_frs_di(void)
22101 {
22102 	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
22103 	{
22104 		uint ea = EA_AY_DI_16();
22105 		m68ki_write_16(ea, m68ki_get_sr());
22106 		return;
22107 	}
22108 	m68ki_exception_privilege_violation();
22109 }
22110 
22111 
m68k_op_move_16_frs_ix(void)22112 static void m68k_op_move_16_frs_ix(void)
22113 {
22114 	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
22115 	{
22116 		uint ea = EA_AY_IX_16();
22117 		m68ki_write_16(ea, m68ki_get_sr());
22118 		return;
22119 	}
22120 	m68ki_exception_privilege_violation();
22121 }
22122 
22123 
m68k_op_move_16_frs_aw(void)22124 static void m68k_op_move_16_frs_aw(void)
22125 {
22126 	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
22127 	{
22128 		uint ea = EA_AW_16();
22129 		m68ki_write_16(ea, m68ki_get_sr());
22130 		return;
22131 	}
22132 	m68ki_exception_privilege_violation();
22133 }
22134 
22135 
m68k_op_move_16_frs_al(void)22136 static void m68k_op_move_16_frs_al(void)
22137 {
22138 	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
22139 	{
22140 		uint ea = EA_AL_16();
22141 		m68ki_write_16(ea, m68ki_get_sr());
22142 		return;
22143 	}
22144 	m68ki_exception_privilege_violation();
22145 }
22146 
22147 
m68k_op_move_16_tos_d(void)22148 static void m68k_op_move_16_tos_d(void)
22149 {
22150 	if(FLAG_S)
22151 	{
22152 		m68ki_set_sr(DY);
22153 		return;
22154 	}
22155 	m68ki_exception_privilege_violation();
22156 }
22157 
22158 
m68k_op_move_16_tos_ai(void)22159 static void m68k_op_move_16_tos_ai(void)
22160 {
22161 	if(FLAG_S)
22162 	{
22163 		uint new_sr = OPER_AY_AI_16();
22164 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22165 		m68ki_set_sr(new_sr);
22166 		return;
22167 	}
22168 	m68ki_exception_privilege_violation();
22169 }
22170 
22171 
m68k_op_move_16_tos_pi(void)22172 static void m68k_op_move_16_tos_pi(void)
22173 {
22174 	if(FLAG_S)
22175 	{
22176 		uint new_sr = OPER_AY_PI_16();
22177 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22178 		m68ki_set_sr(new_sr);
22179 		return;
22180 	}
22181 	m68ki_exception_privilege_violation();
22182 }
22183 
22184 
m68k_op_move_16_tos_pd(void)22185 static void m68k_op_move_16_tos_pd(void)
22186 {
22187 	if(FLAG_S)
22188 	{
22189 		uint new_sr = OPER_AY_PD_16();
22190 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22191 		m68ki_set_sr(new_sr);
22192 		return;
22193 	}
22194 	m68ki_exception_privilege_violation();
22195 }
22196 
22197 
m68k_op_move_16_tos_di(void)22198 static void m68k_op_move_16_tos_di(void)
22199 {
22200 	if(FLAG_S)
22201 	{
22202 		uint new_sr = OPER_AY_DI_16();
22203 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22204 		m68ki_set_sr(new_sr);
22205 		return;
22206 	}
22207 	m68ki_exception_privilege_violation();
22208 }
22209 
22210 
m68k_op_move_16_tos_ix(void)22211 static void m68k_op_move_16_tos_ix(void)
22212 {
22213 	if(FLAG_S)
22214 	{
22215 		uint new_sr = OPER_AY_IX_16();
22216 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22217 		m68ki_set_sr(new_sr);
22218 		return;
22219 	}
22220 	m68ki_exception_privilege_violation();
22221 }
22222 
22223 
m68k_op_move_16_tos_aw(void)22224 static void m68k_op_move_16_tos_aw(void)
22225 {
22226 	if(FLAG_S)
22227 	{
22228 		uint new_sr = OPER_AW_16();
22229 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22230 		m68ki_set_sr(new_sr);
22231 		return;
22232 	}
22233 	m68ki_exception_privilege_violation();
22234 }
22235 
22236 
m68k_op_move_16_tos_al(void)22237 static void m68k_op_move_16_tos_al(void)
22238 {
22239 	if(FLAG_S)
22240 	{
22241 		uint new_sr = OPER_AL_16();
22242 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22243 		m68ki_set_sr(new_sr);
22244 		return;
22245 	}
22246 	m68ki_exception_privilege_violation();
22247 }
22248 
22249 
m68k_op_move_16_tos_pcdi(void)22250 static void m68k_op_move_16_tos_pcdi(void)
22251 {
22252 	if(FLAG_S)
22253 	{
22254 		uint new_sr = OPER_PCDI_16();
22255 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22256 		m68ki_set_sr(new_sr);
22257 		return;
22258 	}
22259 	m68ki_exception_privilege_violation();
22260 }
22261 
22262 
m68k_op_move_16_tos_pcix(void)22263 static void m68k_op_move_16_tos_pcix(void)
22264 {
22265 	if(FLAG_S)
22266 	{
22267 		uint new_sr = OPER_PCIX_16();
22268 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22269 		m68ki_set_sr(new_sr);
22270 		return;
22271 	}
22272 	m68ki_exception_privilege_violation();
22273 }
22274 
22275 
m68k_op_move_16_tos_i(void)22276 static void m68k_op_move_16_tos_i(void)
22277 {
22278 	if(FLAG_S)
22279 	{
22280 		uint new_sr = OPER_I_16();
22281 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22282 		m68ki_set_sr(new_sr);
22283 		return;
22284 	}
22285 	m68ki_exception_privilege_violation();
22286 }
22287 
22288 
m68k_op_move_32_fru(void)22289 static void m68k_op_move_32_fru(void)
22290 {
22291 	if(FLAG_S)
22292 	{
22293 		AY = REG_USP;
22294 		return;
22295 	}
22296 	m68ki_exception_privilege_violation();
22297 }
22298 
22299 
m68k_op_move_32_tou(void)22300 static void m68k_op_move_32_tou(void)
22301 {
22302 	if(FLAG_S)
22303 	{
22304 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
22305 		REG_USP = AY;
22306 		return;
22307 	}
22308 	m68ki_exception_privilege_violation();
22309 }
22310 
22311 
m68k_op_movec_32_cr(void)22312 static void m68k_op_movec_32_cr(void)
22313 {
22314 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
22315 	{
22316 		if(FLAG_S)
22317 		{
22318 			uint word2 = OPER_I_16();
22319 
22320 			m68ki_trace_t0();		   /* auto-disable (see m68kcpu.h) */
22321 			switch (word2 & 0xfff)
22322 			{
22323 			case 0x000:			   /* SFC */
22324 				REG_DA[(word2 >> 12) & 15] = REG_SFC;
22325 				return;
22326 			case 0x001:			   /* DFC */
22327 				REG_DA[(word2 >> 12) & 15] = REG_DFC;
22328 				return;
22329 			case 0x002:			   /* CACR */
22330 				if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
22331 				{
22332 					REG_DA[(word2 >> 12) & 15] = REG_CACR;
22333 					return;
22334 				}
22335 				return;
22336 			case 0x800:			   /* USP */
22337 				REG_DA[(word2 >> 12) & 15] = REG_USP;
22338 				return;
22339 			case 0x801:			   /* VBR */
22340 				REG_DA[(word2 >> 12) & 15] = REG_VBR;
22341 				return;
22342 			case 0x802:			   /* CAAR */
22343 				if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
22344 				{
22345 					REG_DA[(word2 >> 12) & 15] = REG_CAAR;
22346 					return;
22347 				}
22348 				m68ki_exception_illegal();
22349 				break;
22350 			case 0x803:			   /* MSP */
22351 				if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
22352 				{
22353 					REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_SP : REG_MSP;
22354 					return;
22355 				}
22356 				m68ki_exception_illegal();
22357 				return;
22358 			case 0x804:			   /* ISP */
22359 				if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
22360 				{
22361 					REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_ISP : REG_SP;
22362 					return;
22363 				}
22364 				m68ki_exception_illegal();
22365 				return;
22366 			case 0x003:				/* TC */
22367 				if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22368 				{
22369 					/* TODO */
22370 					return;
22371 				}
22372 				m68ki_exception_illegal();
22373 				return;
22374 			case 0x004:				/* ITT0 */
22375 				if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22376 				{
22377 					/* TODO */
22378 					return;
22379 				}
22380 				m68ki_exception_illegal();
22381 				return;
22382 			case 0x005:				/* ITT1 */
22383 				if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22384 				{
22385 					/* TODO */
22386 					return;
22387 				}
22388 				m68ki_exception_illegal();
22389 				return;
22390 			case 0x006:				/* DTT0 */
22391 				if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22392 				{
22393 					/* TODO */
22394 					return;
22395 				}
22396 				m68ki_exception_illegal();
22397 				return;
22398 			case 0x007:				/* DTT1 */
22399 				if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22400 				{
22401 					/* TODO */
22402 					return;
22403 				}
22404 				m68ki_exception_illegal();
22405 				return;
22406 			case 0x805:				/* MMUSR */
22407 				if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22408 				{
22409 					/* TODO */
22410 					return;
22411 				}
22412 				m68ki_exception_illegal();
22413 				return;
22414 			case 0x806:				/* URP */
22415 				if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22416 				{
22417 					/* TODO */
22418 					return;
22419 				}
22420 				m68ki_exception_illegal();
22421 				return;
22422 			case 0x807:				/* SRP */
22423 				if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22424 				{
22425 					/* TODO */
22426 					return;
22427 				}
22428 				m68ki_exception_illegal();
22429 				return;
22430 			default:
22431 				m68ki_exception_illegal();
22432 				return;
22433 			}
22434 		}
22435 		m68ki_exception_privilege_violation();
22436 		return;
22437 	}
22438 	m68ki_exception_illegal();
22439 }
22440 
22441 
m68k_op_movec_32_rc(void)22442 static void m68k_op_movec_32_rc(void)
22443 {
22444 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
22445 	{
22446 		if(FLAG_S)
22447 		{
22448 			uint word2 = OPER_I_16();
22449 
22450 			m68ki_trace_t0();		   /* auto-disable (see m68kcpu.h) */
22451 			switch (word2 & 0xfff)
22452 			{
22453 			case 0x000:			   /* SFC */
22454 				REG_SFC = REG_DA[(word2 >> 12) & 15] & 7;
22455 				return;
22456 			case 0x001:			   /* DFC */
22457 				REG_DFC = REG_DA[(word2 >> 12) & 15] & 7;
22458 				return;
22459 			case 0x002:			   /* CACR */
22460 				if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
22461 				{
22462 					if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22463 					{
22464 						REG_CACR = REG_DA[(word2 >> 12) & 15];
22465 					}
22466 					else
22467 					{
22468 						/* non 68040 can only set the lower 4 bits (C,CE,F,E) */
22469 						REG_CACR = REG_DA[(word2 >> 12) & 15] & 0x0f;
22470 					}
22471 					return;
22472 				}
22473 				m68ki_exception_illegal();
22474 				return;
22475 			case 0x800:			   /* USP */
22476 				REG_USP = REG_DA[(word2 >> 12) & 15];
22477 				return;
22478 			case 0x801:			   /* VBR */
22479 				REG_VBR = REG_DA[(word2 >> 12) & 15];
22480 				return;
22481 			case 0x802:			   /* CAAR */
22482 				if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
22483 				{
22484 					REG_CAAR = REG_DA[(word2 >> 12) & 15];
22485 					return;
22486 				}
22487 				m68ki_exception_illegal();
22488 				return;
22489 			case 0x803:			   /* MSP */
22490 				if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
22491 				{
22492 					/* we are in supervisor mode so just check for M flag */
22493 					if(!FLAG_M)
22494 					{
22495 						REG_MSP = REG_DA[(word2 >> 12) & 15];
22496 						return;
22497 					}
22498 					REG_SP = REG_DA[(word2 >> 12) & 15];
22499 					return;
22500 				}
22501 				m68ki_exception_illegal();
22502 				return;
22503 			case 0x804:			   /* ISP */
22504 				if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
22505 				{
22506 					if(!FLAG_M)
22507 					{
22508 						REG_SP = REG_DA[(word2 >> 12) & 15];
22509 						return;
22510 					}
22511 					REG_ISP = REG_DA[(word2 >> 12) & 15];
22512 					return;
22513 				}
22514 				m68ki_exception_illegal();
22515 				return;
22516 			case 0x003:			/* TC */
22517 				if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22518 				{
22519 					/* TODO */
22520 					return;
22521 				}
22522 				m68ki_exception_illegal();
22523 				return;
22524 			case 0x004:			/* ITT0 */
22525 				if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22526 				{
22527 					/* TODO */
22528 					return;
22529 				}
22530 				m68ki_exception_illegal();
22531 				return;
22532 			case 0x005:			/* ITT1 */
22533 				if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22534 				{
22535 					/* TODO */
22536 					return;
22537 				}
22538 				m68ki_exception_illegal();
22539 				return;
22540 			case 0x006:			/* DTT0 */
22541 				if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22542 				{
22543 					/* TODO */
22544 					return;
22545 				}
22546 				m68ki_exception_illegal();
22547 				return;
22548 			case 0x007:			/* DTT1 */
22549 				if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22550 				{
22551 					/* TODO */
22552 					return;
22553 				}
22554 				m68ki_exception_illegal();
22555 				return;
22556 			case 0x805:			/* MMUSR */
22557 				if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22558 				{
22559 					/* TODO */
22560 					return;
22561 				}
22562 				m68ki_exception_illegal();
22563 				return;
22564 			case 0x806:			/* URP */
22565 				if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22566 				{
22567 					/* TODO */
22568 					return;
22569 				}
22570 				m68ki_exception_illegal();
22571 				return;
22572 			case 0x807:			/* SRP */
22573 				if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
22574 				{
22575 					/* TODO */
22576 					return;
22577 				}
22578 				m68ki_exception_illegal();
22579 				return;
22580 			default:
22581 				m68ki_exception_illegal();
22582 				return;
22583 			}
22584 		}
22585 		m68ki_exception_privilege_violation();
22586 		return;
22587 	}
22588 	m68ki_exception_illegal();
22589 }
22590 
22591 
m68k_op_movem_16_re_pd(void)22592 static void m68k_op_movem_16_re_pd(void)
22593 {
22594 	uint i = 0;
22595 	uint register_list = OPER_I_16();
22596 	uint ea = AY;
22597 	uint count = 0;
22598 
22599 	for(; i < 16; i++)
22600 		if(register_list & (1 << i))
22601 		{
22602 			ea -= 2;
22603 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[15-i]));
22604 			count++;
22605 		}
22606 	AY = ea;
22607 
22608 	USE_CYCLES(count<<CYC_MOVEM_W);
22609 }
22610 
22611 
m68k_op_movem_16_re_ai(void)22612 static void m68k_op_movem_16_re_ai(void)
22613 {
22614 	uint i = 0;
22615 	uint register_list = OPER_I_16();
22616 	uint ea = EA_AY_AI_16();
22617 	uint count = 0;
22618 
22619 	for(; i < 16; i++)
22620 		if(register_list & (1 << i))
22621 		{
22622 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
22623 			ea += 2;
22624 			count++;
22625 		}
22626 
22627 	USE_CYCLES(count<<CYC_MOVEM_W);
22628 }
22629 
22630 
m68k_op_movem_16_re_di(void)22631 static void m68k_op_movem_16_re_di(void)
22632 {
22633 	uint i = 0;
22634 	uint register_list = OPER_I_16();
22635 	uint ea = EA_AY_DI_16();
22636 	uint count = 0;
22637 
22638 	for(; i < 16; i++)
22639 		if(register_list & (1 << i))
22640 		{
22641 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
22642 			ea += 2;
22643 			count++;
22644 		}
22645 
22646 	USE_CYCLES(count<<CYC_MOVEM_W);
22647 }
22648 
22649 
m68k_op_movem_16_re_ix(void)22650 static void m68k_op_movem_16_re_ix(void)
22651 {
22652 	uint i = 0;
22653 	uint register_list = OPER_I_16();
22654 	uint ea = EA_AY_IX_16();
22655 	uint count = 0;
22656 
22657 	for(; i < 16; i++)
22658 		if(register_list & (1 << i))
22659 		{
22660 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
22661 			ea += 2;
22662 			count++;
22663 		}
22664 
22665 	USE_CYCLES(count<<CYC_MOVEM_W);
22666 }
22667 
22668 
m68k_op_movem_16_re_aw(void)22669 static void m68k_op_movem_16_re_aw(void)
22670 {
22671 	uint i = 0;
22672 	uint register_list = OPER_I_16();
22673 	uint ea = EA_AW_16();
22674 	uint count = 0;
22675 
22676 	for(; i < 16; i++)
22677 		if(register_list & (1 << i))
22678 		{
22679 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
22680 			ea += 2;
22681 			count++;
22682 		}
22683 
22684 	USE_CYCLES(count<<CYC_MOVEM_W);
22685 }
22686 
22687 
m68k_op_movem_16_re_al(void)22688 static void m68k_op_movem_16_re_al(void)
22689 {
22690 	uint i = 0;
22691 	uint register_list = OPER_I_16();
22692 	uint ea = EA_AL_16();
22693 	uint count = 0;
22694 
22695 	for(; i < 16; i++)
22696 		if(register_list & (1 << i))
22697 		{
22698 			m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
22699 			ea += 2;
22700 			count++;
22701 		}
22702 
22703 	USE_CYCLES(count<<CYC_MOVEM_W);
22704 }
22705 
22706 
m68k_op_movem_32_re_pd(void)22707 static void m68k_op_movem_32_re_pd(void)
22708 {
22709 	uint i = 0;
22710 	uint register_list = OPER_I_16();
22711 	uint ea = AY;
22712 	uint count = 0;
22713 
22714 	for(; i < 16; i++)
22715 		if(register_list & (1 << i))
22716 		{
22717 			ea -= 4;
22718 			m68ki_write_16(ea+2, REG_DA[15-i] & 0xFFFF );
22719 			m68ki_write_16(ea, (REG_DA[15-i] >> 16) & 0xFFFF );
22720 			count++;
22721 		}
22722 	AY = ea;
22723 
22724 	USE_CYCLES(count<<CYC_MOVEM_L);
22725 }
22726 
22727 
m68k_op_movem_32_re_ai(void)22728 static void m68k_op_movem_32_re_ai(void)
22729 {
22730 	uint i = 0;
22731 	uint register_list = OPER_I_16();
22732 	uint ea = EA_AY_AI_32();
22733 	uint count = 0;
22734 
22735 	for(; i < 16; i++)
22736 		if(register_list & (1 << i))
22737 		{
22738 			m68ki_write_32(ea, REG_DA[i]);
22739 			ea += 4;
22740 			count++;
22741 		}
22742 
22743 	USE_CYCLES(count<<CYC_MOVEM_L);
22744 }
22745 
22746 
m68k_op_movem_32_re_di(void)22747 static void m68k_op_movem_32_re_di(void)
22748 {
22749 	uint i = 0;
22750 	uint register_list = OPER_I_16();
22751 	uint ea = EA_AY_DI_32();
22752 	uint count = 0;
22753 
22754 	for(; i < 16; i++)
22755 		if(register_list & (1 << i))
22756 		{
22757 			m68ki_write_32(ea, REG_DA[i]);
22758 			ea += 4;
22759 			count++;
22760 		}
22761 
22762 	USE_CYCLES(count<<CYC_MOVEM_L);
22763 }
22764 
22765 
m68k_op_movem_32_re_ix(void)22766 static void m68k_op_movem_32_re_ix(void)
22767 {
22768 	uint i = 0;
22769 	uint register_list = OPER_I_16();
22770 	uint ea = EA_AY_IX_32();
22771 	uint count = 0;
22772 
22773 	for(; i < 16; i++)
22774 		if(register_list & (1 << i))
22775 		{
22776 			m68ki_write_32(ea, REG_DA[i]);
22777 			ea += 4;
22778 			count++;
22779 		}
22780 
22781 	USE_CYCLES(count<<CYC_MOVEM_L);
22782 }
22783 
22784 
m68k_op_movem_32_re_aw(void)22785 static void m68k_op_movem_32_re_aw(void)
22786 {
22787 	uint i = 0;
22788 	uint register_list = OPER_I_16();
22789 	uint ea = EA_AW_32();
22790 	uint count = 0;
22791 
22792 	for(; i < 16; i++)
22793 		if(register_list & (1 << i))
22794 		{
22795 			m68ki_write_32(ea, REG_DA[i]);
22796 			ea += 4;
22797 			count++;
22798 		}
22799 
22800 	USE_CYCLES(count<<CYC_MOVEM_L);
22801 }
22802 
22803 
m68k_op_movem_32_re_al(void)22804 static void m68k_op_movem_32_re_al(void)
22805 {
22806 	uint i = 0;
22807 	uint register_list = OPER_I_16();
22808 	uint ea = EA_AL_32();
22809 	uint count = 0;
22810 
22811 	for(; i < 16; i++)
22812 		if(register_list & (1 << i))
22813 		{
22814 			m68ki_write_32(ea, REG_DA[i]);
22815 			ea += 4;
22816 			count++;
22817 		}
22818 
22819 	USE_CYCLES(count<<CYC_MOVEM_L);
22820 }
22821 
22822 
m68k_op_movem_16_er_pi(void)22823 static void m68k_op_movem_16_er_pi(void)
22824 {
22825 	uint i = 0;
22826 	uint register_list = OPER_I_16();
22827 	uint ea = AY;
22828 	uint count = 0;
22829 
22830 	for(; i < 16; i++)
22831 		if(register_list & (1 << i))
22832 		{
22833 			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
22834 			ea += 2;
22835 			count++;
22836 		}
22837 	AY = ea;
22838 
22839 	USE_CYCLES(count<<CYC_MOVEM_W);
22840 }
22841 
22842 
m68k_op_movem_16_er_pcdi(void)22843 static void m68k_op_movem_16_er_pcdi(void)
22844 {
22845 	uint i = 0;
22846 	uint register_list = OPER_I_16();
22847 	uint ea = EA_PCDI_16();
22848 	uint count = 0;
22849 
22850 	for(; i < 16; i++)
22851 		if(register_list & (1 << i))
22852 		{
22853 			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea)));
22854 			ea += 2;
22855 			count++;
22856 		}
22857 
22858 	USE_CYCLES(count<<CYC_MOVEM_W);
22859 }
22860 
22861 
m68k_op_movem_16_er_pcix(void)22862 static void m68k_op_movem_16_er_pcix(void)
22863 {
22864 	uint i = 0;
22865 	uint register_list = OPER_I_16();
22866 	uint ea = EA_PCIX_16();
22867 	uint count = 0;
22868 
22869 	for(; i < 16; i++)
22870 		if(register_list & (1 << i))
22871 		{
22872 			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea)));
22873 			ea += 2;
22874 			count++;
22875 		}
22876 
22877 	USE_CYCLES(count<<CYC_MOVEM_W);
22878 }
22879 
22880 
m68k_op_movem_16_er_ai(void)22881 static void m68k_op_movem_16_er_ai(void)
22882 {
22883 	uint i = 0;
22884 	uint register_list = OPER_I_16();
22885 	uint ea = EA_AY_AI_16();
22886 	uint count = 0;
22887 
22888 	for(; i < 16; i++)
22889 		if(register_list & (1 << i))
22890 		{
22891 			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
22892 			ea += 2;
22893 			count++;
22894 		}
22895 
22896 	USE_CYCLES(count<<CYC_MOVEM_W);
22897 }
22898 
22899 
m68k_op_movem_16_er_di(void)22900 static void m68k_op_movem_16_er_di(void)
22901 {
22902 	uint i = 0;
22903 	uint register_list = OPER_I_16();
22904 	uint ea = EA_AY_DI_16();
22905 	uint count = 0;
22906 
22907 	for(; i < 16; i++)
22908 		if(register_list & (1 << i))
22909 		{
22910 			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
22911 			ea += 2;
22912 			count++;
22913 		}
22914 
22915 	USE_CYCLES(count<<CYC_MOVEM_W);
22916 }
22917 
22918 
m68k_op_movem_16_er_ix(void)22919 static void m68k_op_movem_16_er_ix(void)
22920 {
22921 	uint i = 0;
22922 	uint register_list = OPER_I_16();
22923 	uint ea = EA_AY_IX_16();
22924 	uint count = 0;
22925 
22926 	for(; i < 16; i++)
22927 		if(register_list & (1 << i))
22928 		{
22929 			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
22930 			ea += 2;
22931 			count++;
22932 		}
22933 
22934 	USE_CYCLES(count<<CYC_MOVEM_W);
22935 }
22936 
22937 
m68k_op_movem_16_er_aw(void)22938 static void m68k_op_movem_16_er_aw(void)
22939 {
22940 	uint i = 0;
22941 	uint register_list = OPER_I_16();
22942 	uint ea = EA_AW_16();
22943 	uint count = 0;
22944 
22945 	for(; i < 16; i++)
22946 		if(register_list & (1 << i))
22947 		{
22948 			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
22949 			ea += 2;
22950 			count++;
22951 		}
22952 
22953 	USE_CYCLES(count<<CYC_MOVEM_W);
22954 }
22955 
22956 
m68k_op_movem_16_er_al(void)22957 static void m68k_op_movem_16_er_al(void)
22958 {
22959 	uint i = 0;
22960 	uint register_list = OPER_I_16();
22961 	uint ea = EA_AL_16();
22962 	uint count = 0;
22963 
22964 	for(; i < 16; i++)
22965 		if(register_list & (1 << i))
22966 		{
22967 			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
22968 			ea += 2;
22969 			count++;
22970 		}
22971 
22972 	USE_CYCLES(count<<CYC_MOVEM_W);
22973 }
22974 
22975 
m68k_op_movem_32_er_pi(void)22976 static void m68k_op_movem_32_er_pi(void)
22977 {
22978 	uint i = 0;
22979 	uint register_list = OPER_I_16();
22980 	uint ea = AY;
22981 	uint count = 0;
22982 
22983 	for(; i < 16; i++)
22984 		if(register_list & (1 << i))
22985 		{
22986 			REG_DA[i] = m68ki_read_32(ea);
22987 			ea += 4;
22988 			count++;
22989 		}
22990 	AY = ea;
22991 
22992 	USE_CYCLES(count<<CYC_MOVEM_L);
22993 }
22994 
22995 
m68k_op_movem_32_er_pcdi(void)22996 static void m68k_op_movem_32_er_pcdi(void)
22997 {
22998 	uint i = 0;
22999 	uint register_list = OPER_I_16();
23000 	uint ea = EA_PCDI_32();
23001 	uint count = 0;
23002 
23003 	for(; i < 16; i++)
23004 		if(register_list & (1 << i))
23005 		{
23006 			REG_DA[i] = m68ki_read_pcrel_32(ea);
23007 			ea += 4;
23008 			count++;
23009 		}
23010 
23011 	USE_CYCLES(count<<CYC_MOVEM_L);
23012 }
23013 
23014 
m68k_op_movem_32_er_pcix(void)23015 static void m68k_op_movem_32_er_pcix(void)
23016 {
23017 	uint i = 0;
23018 	uint register_list = OPER_I_16();
23019 	uint ea = EA_PCIX_32();
23020 	uint count = 0;
23021 
23022 	for(; i < 16; i++)
23023 		if(register_list & (1 << i))
23024 		{
23025 			REG_DA[i] = m68ki_read_pcrel_32(ea);
23026 			ea += 4;
23027 			count++;
23028 		}
23029 
23030 	USE_CYCLES(count<<CYC_MOVEM_L);
23031 }
23032 
23033 
m68k_op_movem_32_er_ai(void)23034 static void m68k_op_movem_32_er_ai(void)
23035 {
23036 	uint i = 0;
23037 	uint register_list = OPER_I_16();
23038 	uint ea = EA_AY_AI_32();
23039 	uint count = 0;
23040 
23041 	for(; i < 16; i++)
23042 		if(register_list & (1 << i))
23043 		{
23044 			REG_DA[i] = m68ki_read_32(ea);
23045 			ea += 4;
23046 			count++;
23047 		}
23048 
23049 	USE_CYCLES(count<<CYC_MOVEM_L);
23050 }
23051 
23052 
m68k_op_movem_32_er_di(void)23053 static void m68k_op_movem_32_er_di(void)
23054 {
23055 	uint i = 0;
23056 	uint register_list = OPER_I_16();
23057 	uint ea = EA_AY_DI_32();
23058 	uint count = 0;
23059 
23060 	for(; i < 16; i++)
23061 		if(register_list & (1 << i))
23062 		{
23063 			REG_DA[i] = m68ki_read_32(ea);
23064 			ea += 4;
23065 			count++;
23066 		}
23067 
23068 	USE_CYCLES(count<<CYC_MOVEM_L);
23069 }
23070 
23071 
m68k_op_movem_32_er_ix(void)23072 static void m68k_op_movem_32_er_ix(void)
23073 {
23074 	uint i = 0;
23075 	uint register_list = OPER_I_16();
23076 	uint ea = EA_AY_IX_32();
23077 	uint count = 0;
23078 
23079 	for(; i < 16; i++)
23080 		if(register_list & (1 << i))
23081 		{
23082 			REG_DA[i] = m68ki_read_32(ea);
23083 			ea += 4;
23084 			count++;
23085 		}
23086 
23087 	USE_CYCLES(count<<CYC_MOVEM_L);
23088 }
23089 
23090 
m68k_op_movem_32_er_aw(void)23091 static void m68k_op_movem_32_er_aw(void)
23092 {
23093 	uint i = 0;
23094 	uint register_list = OPER_I_16();
23095 	uint ea = EA_AW_32();
23096 	uint count = 0;
23097 
23098 	for(; i < 16; i++)
23099 		if(register_list & (1 << i))
23100 		{
23101 			REG_DA[i] = m68ki_read_32(ea);
23102 			ea += 4;
23103 			count++;
23104 		}
23105 
23106 	USE_CYCLES(count<<CYC_MOVEM_L);
23107 }
23108 
23109 
m68k_op_movem_32_er_al(void)23110 static void m68k_op_movem_32_er_al(void)
23111 {
23112 	uint i = 0;
23113 	uint register_list = OPER_I_16();
23114 	uint ea = EA_AL_32();
23115 	uint count = 0;
23116 
23117 	for(; i < 16; i++)
23118 		if(register_list & (1 << i))
23119 		{
23120 			REG_DA[i] = m68ki_read_32(ea);
23121 			ea += 4;
23122 			count++;
23123 		}
23124 
23125 	USE_CYCLES(count<<CYC_MOVEM_L);
23126 }
23127 
23128 
m68k_op_movep_16_re(void)23129 static void m68k_op_movep_16_re(void)
23130 {
23131 	uint ea = EA_AY_DI_16();
23132 	uint src = DX;
23133 
23134 	m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 8));
23135 	m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src));
23136 }
23137 
23138 
m68k_op_movep_32_re(void)23139 static void m68k_op_movep_32_re(void)
23140 {
23141 	uint ea = EA_AY_DI_32();
23142 	uint src = DX;
23143 
23144 	m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 24));
23145 	m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 16));
23146 	m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 8));
23147 	m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src));
23148 }
23149 
23150 
m68k_op_movep_16_er(void)23151 static void m68k_op_movep_16_er(void)
23152 {
23153 	uint ea = EA_AY_DI_16();
23154 	uint* r_dst = &DX;
23155 
23156 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8(ea) << 8) + m68ki_read_8(ea + 2));
23157 }
23158 
23159 
m68k_op_movep_32_er(void)23160 static void m68k_op_movep_32_er(void)
23161 {
23162 	uint ea = EA_AY_DI_32();
23163 
23164 	DX = (m68ki_read_8(ea) << 24) + (m68ki_read_8(ea + 2) << 16)
23165 		+ (m68ki_read_8(ea + 4) << 8) + m68ki_read_8(ea + 6);
23166 }
23167 
23168 
m68k_op_moves_8_ai(void)23169 static void m68k_op_moves_8_ai(void)
23170 {
23171 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23172 	{
23173 		if(FLAG_S)
23174 		{
23175 			uint word2 = OPER_I_16();
23176 			uint ea = EA_AY_AI_8();
23177 
23178 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23179 			if(BIT_B(word2))		   /* Register to memory */
23180 			{
23181 				m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
23182 				return;
23183 			}
23184 			if(BIT_F(word2))		   /* Memory to address register */
23185 			{
23186 				REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
23187 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23188 					USE_CYCLES(2);
23189 				return;
23190 			}
23191 			/* Memory to data register */
23192 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
23193 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23194 				USE_CYCLES(2);
23195 			return;
23196 		}
23197 		m68ki_exception_privilege_violation();
23198 		return;
23199 	}
23200 	m68ki_exception_illegal();
23201 }
23202 
23203 
m68k_op_moves_8_pi(void)23204 static void m68k_op_moves_8_pi(void)
23205 {
23206 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23207 	{
23208 		if(FLAG_S)
23209 		{
23210 			uint word2 = OPER_I_16();
23211 			uint ea = EA_AY_PI_8();
23212 
23213 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23214 			if(BIT_B(word2))		   /* Register to memory */
23215 			{
23216 				m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
23217 				return;
23218 			}
23219 			if(BIT_F(word2))		   /* Memory to address register */
23220 			{
23221 				REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
23222 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23223 					USE_CYCLES(2);
23224 				return;
23225 			}
23226 			/* Memory to data register */
23227 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
23228 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23229 				USE_CYCLES(2);
23230 			return;
23231 		}
23232 		m68ki_exception_privilege_violation();
23233 		return;
23234 	}
23235 	m68ki_exception_illegal();
23236 }
23237 
23238 
m68k_op_moves_8_pi7(void)23239 static void m68k_op_moves_8_pi7(void)
23240 {
23241 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23242 	{
23243 		if(FLAG_S)
23244 		{
23245 			uint word2 = OPER_I_16();
23246 			uint ea = EA_A7_PI_8();
23247 
23248 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23249 			if(BIT_B(word2))		   /* Register to memory */
23250 			{
23251 				m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
23252 				return;
23253 			}
23254 			if(BIT_F(word2))		   /* Memory to address register */
23255 			{
23256 				REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
23257 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23258 					USE_CYCLES(2);
23259 				return;
23260 			}
23261 			/* Memory to data register */
23262 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
23263 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23264 				USE_CYCLES(2);
23265 			return;
23266 		}
23267 		m68ki_exception_privilege_violation();
23268 		return;
23269 	}
23270 	m68ki_exception_illegal();
23271 }
23272 
23273 
m68k_op_moves_8_pd(void)23274 static void m68k_op_moves_8_pd(void)
23275 {
23276 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23277 	{
23278 		if(FLAG_S)
23279 		{
23280 			uint word2 = OPER_I_16();
23281 			uint ea = EA_AY_PD_8();
23282 
23283 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23284 			if(BIT_B(word2))		   /* Register to memory */
23285 			{
23286 				m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
23287 				return;
23288 			}
23289 			if(BIT_F(word2))		   /* Memory to address register */
23290 			{
23291 				REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
23292 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23293 					USE_CYCLES(2);
23294 				return;
23295 			}
23296 			/* Memory to data register */
23297 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
23298 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23299 				USE_CYCLES(2);
23300 			return;
23301 		}
23302 		m68ki_exception_privilege_violation();
23303 		return;
23304 	}
23305 	m68ki_exception_illegal();
23306 }
23307 
23308 
m68k_op_moves_8_pd7(void)23309 static void m68k_op_moves_8_pd7(void)
23310 {
23311 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23312 	{
23313 		if(FLAG_S)
23314 		{
23315 			uint word2 = OPER_I_16();
23316 			uint ea = EA_A7_PD_8();
23317 
23318 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23319 			if(BIT_B(word2))		   /* Register to memory */
23320 			{
23321 				m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
23322 				return;
23323 			}
23324 			if(BIT_F(word2))		   /* Memory to address register */
23325 			{
23326 				REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
23327 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23328 					USE_CYCLES(2);
23329 				return;
23330 			}
23331 			/* Memory to data register */
23332 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
23333 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23334 				USE_CYCLES(2);
23335 			return;
23336 		}
23337 		m68ki_exception_privilege_violation();
23338 		return;
23339 	}
23340 	m68ki_exception_illegal();
23341 }
23342 
23343 
m68k_op_moves_8_di(void)23344 static void m68k_op_moves_8_di(void)
23345 {
23346 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23347 	{
23348 		if(FLAG_S)
23349 		{
23350 			uint word2 = OPER_I_16();
23351 			uint ea = EA_AY_DI_8();
23352 
23353 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23354 			if(BIT_B(word2))		   /* Register to memory */
23355 			{
23356 				m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
23357 				return;
23358 			}
23359 			if(BIT_F(word2))		   /* Memory to address register */
23360 			{
23361 				REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
23362 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23363 					USE_CYCLES(2);
23364 				return;
23365 			}
23366 			/* Memory to data register */
23367 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
23368 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23369 				USE_CYCLES(2);
23370 			return;
23371 		}
23372 		m68ki_exception_privilege_violation();
23373 		return;
23374 	}
23375 	m68ki_exception_illegal();
23376 }
23377 
23378 
m68k_op_moves_8_ix(void)23379 static void m68k_op_moves_8_ix(void)
23380 {
23381 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23382 	{
23383 		if(FLAG_S)
23384 		{
23385 			uint word2 = OPER_I_16();
23386 			uint ea = EA_AY_IX_8();
23387 
23388 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23389 			if(BIT_B(word2))		   /* Register to memory */
23390 			{
23391 				m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
23392 				return;
23393 			}
23394 			if(BIT_F(word2))		   /* Memory to address register */
23395 			{
23396 				REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
23397 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23398 					USE_CYCLES(2);
23399 				return;
23400 			}
23401 			/* Memory to data register */
23402 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
23403 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23404 				USE_CYCLES(2);
23405 			return;
23406 		}
23407 		m68ki_exception_privilege_violation();
23408 		return;
23409 	}
23410 	m68ki_exception_illegal();
23411 }
23412 
23413 
m68k_op_moves_8_aw(void)23414 static void m68k_op_moves_8_aw(void)
23415 {
23416 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23417 	{
23418 		if(FLAG_S)
23419 		{
23420 			uint word2 = OPER_I_16();
23421 			uint ea = EA_AW_8();
23422 
23423 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23424 			if(BIT_B(word2))		   /* Register to memory */
23425 			{
23426 				m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
23427 				return;
23428 			}
23429 			if(BIT_F(word2))		   /* Memory to address register */
23430 			{
23431 				REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
23432 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23433 					USE_CYCLES(2);
23434 				return;
23435 			}
23436 			/* Memory to data register */
23437 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
23438 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23439 				USE_CYCLES(2);
23440 			return;
23441 		}
23442 		m68ki_exception_privilege_violation();
23443 		return;
23444 	}
23445 	m68ki_exception_illegal();
23446 }
23447 
23448 
m68k_op_moves_8_al(void)23449 static void m68k_op_moves_8_al(void)
23450 {
23451 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23452 	{
23453 		if(FLAG_S)
23454 		{
23455 			uint word2 = OPER_I_16();
23456 			uint ea = EA_AL_8();
23457 
23458 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23459 			if(BIT_B(word2))		   /* Register to memory */
23460 			{
23461 				m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
23462 				return;
23463 			}
23464 			if(BIT_F(word2))		   /* Memory to address register */
23465 			{
23466 				REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
23467 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23468 					USE_CYCLES(2);
23469 				return;
23470 			}
23471 			/* Memory to data register */
23472 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
23473 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23474 				USE_CYCLES(2);
23475 			return;
23476 		}
23477 		m68ki_exception_privilege_violation();
23478 		return;
23479 	}
23480 	m68ki_exception_illegal();
23481 }
23482 
23483 
m68k_op_moves_16_ai(void)23484 static void m68k_op_moves_16_ai(void)
23485 {
23486 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23487 	{
23488 		if(FLAG_S)
23489 		{
23490 			uint word2 = OPER_I_16();
23491 			uint ea = EA_AY_AI_16();
23492 
23493 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23494 			if(BIT_B(word2))		   /* Register to memory */
23495 			{
23496 				m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
23497 				return;
23498 			}
23499 			if(BIT_F(word2))		   /* Memory to address register */
23500 			{
23501 				REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
23502 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23503 					USE_CYCLES(2);
23504 				return;
23505 			}
23506 			/* Memory to data register */
23507 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
23508 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23509 				USE_CYCLES(2);
23510 			return;
23511 		}
23512 		m68ki_exception_privilege_violation();
23513 		return;
23514 	}
23515 	m68ki_exception_illegal();
23516 }
23517 
23518 
m68k_op_moves_16_pi(void)23519 static void m68k_op_moves_16_pi(void)
23520 {
23521 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23522 	{
23523 		if(FLAG_S)
23524 		{
23525 			uint word2 = OPER_I_16();
23526 			uint ea = EA_AY_PI_16();
23527 
23528 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23529 			if(BIT_B(word2))		   /* Register to memory */
23530 			{
23531 				m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
23532 				return;
23533 			}
23534 			if(BIT_F(word2))		   /* Memory to address register */
23535 			{
23536 				REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
23537 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23538 					USE_CYCLES(2);
23539 				return;
23540 			}
23541 			/* Memory to data register */
23542 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
23543 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23544 				USE_CYCLES(2);
23545 			return;
23546 		}
23547 		m68ki_exception_privilege_violation();
23548 		return;
23549 	}
23550 	m68ki_exception_illegal();
23551 }
23552 
23553 
m68k_op_moves_16_pd(void)23554 static void m68k_op_moves_16_pd(void)
23555 {
23556 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23557 	{
23558 		if(FLAG_S)
23559 		{
23560 			uint word2 = OPER_I_16();
23561 			uint ea = EA_AY_PD_16();
23562 
23563 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23564 			if(BIT_B(word2))		   /* Register to memory */
23565 			{
23566 				m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
23567 				return;
23568 			}
23569 			if(BIT_F(word2))		   /* Memory to address register */
23570 			{
23571 				REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
23572 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23573 					USE_CYCLES(2);
23574 				return;
23575 			}
23576 			/* Memory to data register */
23577 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
23578 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23579 				USE_CYCLES(2);
23580 			return;
23581 		}
23582 		m68ki_exception_privilege_violation();
23583 		return;
23584 	}
23585 	m68ki_exception_illegal();
23586 }
23587 
23588 
m68k_op_moves_16_di(void)23589 static void m68k_op_moves_16_di(void)
23590 {
23591 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23592 	{
23593 		if(FLAG_S)
23594 		{
23595 			uint word2 = OPER_I_16();
23596 			uint ea = EA_AY_DI_16();
23597 
23598 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23599 			if(BIT_B(word2))		   /* Register to memory */
23600 			{
23601 				m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
23602 				return;
23603 			}
23604 			if(BIT_F(word2))		   /* Memory to address register */
23605 			{
23606 				REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
23607 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23608 					USE_CYCLES(2);
23609 				return;
23610 			}
23611 			/* Memory to data register */
23612 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
23613 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23614 				USE_CYCLES(2);
23615 			return;
23616 		}
23617 		m68ki_exception_privilege_violation();
23618 		return;
23619 	}
23620 	m68ki_exception_illegal();
23621 }
23622 
23623 
m68k_op_moves_16_ix(void)23624 static void m68k_op_moves_16_ix(void)
23625 {
23626 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23627 	{
23628 		if(FLAG_S)
23629 		{
23630 			uint word2 = OPER_I_16();
23631 			uint ea = EA_AY_IX_16();
23632 
23633 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23634 			if(BIT_B(word2))		   /* Register to memory */
23635 			{
23636 				m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
23637 				return;
23638 			}
23639 			if(BIT_F(word2))		   /* Memory to address register */
23640 			{
23641 				REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
23642 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23643 					USE_CYCLES(2);
23644 				return;
23645 			}
23646 			/* Memory to data register */
23647 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
23648 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23649 				USE_CYCLES(2);
23650 			return;
23651 		}
23652 		m68ki_exception_privilege_violation();
23653 		return;
23654 	}
23655 	m68ki_exception_illegal();
23656 }
23657 
23658 
m68k_op_moves_16_aw(void)23659 static void m68k_op_moves_16_aw(void)
23660 {
23661 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23662 	{
23663 		if(FLAG_S)
23664 		{
23665 			uint word2 = OPER_I_16();
23666 			uint ea = EA_AW_16();
23667 
23668 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23669 			if(BIT_B(word2))		   /* Register to memory */
23670 			{
23671 				m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
23672 				return;
23673 			}
23674 			if(BIT_F(word2))		   /* Memory to address register */
23675 			{
23676 				REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
23677 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23678 					USE_CYCLES(2);
23679 				return;
23680 			}
23681 			/* Memory to data register */
23682 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
23683 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23684 				USE_CYCLES(2);
23685 			return;
23686 		}
23687 		m68ki_exception_privilege_violation();
23688 		return;
23689 	}
23690 	m68ki_exception_illegal();
23691 }
23692 
23693 
m68k_op_moves_16_al(void)23694 static void m68k_op_moves_16_al(void)
23695 {
23696 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23697 	{
23698 		if(FLAG_S)
23699 		{
23700 			uint word2 = OPER_I_16();
23701 			uint ea = EA_AL_16();
23702 
23703 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23704 			if(BIT_B(word2))		   /* Register to memory */
23705 			{
23706 				m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
23707 				return;
23708 			}
23709 			if(BIT_F(word2))		   /* Memory to address register */
23710 			{
23711 				REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
23712 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23713 					USE_CYCLES(2);
23714 				return;
23715 			}
23716 			/* Memory to data register */
23717 			REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
23718 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23719 				USE_CYCLES(2);
23720 			return;
23721 		}
23722 		m68ki_exception_privilege_violation();
23723 		return;
23724 	}
23725 	m68ki_exception_illegal();
23726 }
23727 
23728 
m68k_op_moves_32_ai(void)23729 static void m68k_op_moves_32_ai(void)
23730 {
23731 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23732 	{
23733 		if(FLAG_S)
23734 		{
23735 			uint word2 = OPER_I_16();
23736 			uint ea = EA_AY_AI_32();
23737 
23738 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23739 			if(BIT_B(word2))		   /* Register to memory */
23740 			{
23741 				m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
23742 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23743 					USE_CYCLES(2);
23744 				return;
23745 			}
23746 			/* Memory to register */
23747 			REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
23748 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23749 				USE_CYCLES(2);
23750 			return;
23751 		}
23752 		m68ki_exception_privilege_violation();
23753 		return;
23754 	}
23755 	m68ki_exception_illegal();
23756 }
23757 
23758 
m68k_op_moves_32_pi(void)23759 static void m68k_op_moves_32_pi(void)
23760 {
23761 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23762 	{
23763 		if(FLAG_S)
23764 		{
23765 			uint word2 = OPER_I_16();
23766 			uint ea = EA_AY_PI_32();
23767 
23768 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23769 			if(BIT_B(word2))		   /* Register to memory */
23770 			{
23771 				m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
23772 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23773 					USE_CYCLES(2);
23774 				return;
23775 			}
23776 			/* Memory to register */
23777 			REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
23778 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23779 				USE_CYCLES(2);
23780 			return;
23781 		}
23782 		m68ki_exception_privilege_violation();
23783 		return;
23784 	}
23785 	m68ki_exception_illegal();
23786 }
23787 
23788 
m68k_op_moves_32_pd(void)23789 static void m68k_op_moves_32_pd(void)
23790 {
23791 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23792 	{
23793 		if(FLAG_S)
23794 		{
23795 			uint word2 = OPER_I_16();
23796 			uint ea = EA_AY_PD_32();
23797 
23798 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23799 			if(BIT_B(word2))		   /* Register to memory */
23800 			{
23801 				m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
23802 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23803 					USE_CYCLES(2);
23804 				return;
23805 			}
23806 			/* Memory to register */
23807 			REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
23808 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23809 				USE_CYCLES(2);
23810 			return;
23811 		}
23812 		m68ki_exception_privilege_violation();
23813 		return;
23814 	}
23815 	m68ki_exception_illegal();
23816 }
23817 
23818 
m68k_op_moves_32_di(void)23819 static void m68k_op_moves_32_di(void)
23820 {
23821 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23822 	{
23823 		if(FLAG_S)
23824 		{
23825 			uint word2 = OPER_I_16();
23826 			uint ea = EA_AY_DI_32();
23827 
23828 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23829 			if(BIT_B(word2))		   /* Register to memory */
23830 			{
23831 				m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
23832 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23833 					USE_CYCLES(2);
23834 				return;
23835 			}
23836 			/* Memory to register */
23837 			REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
23838 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23839 				USE_CYCLES(2);
23840 			return;
23841 		}
23842 		m68ki_exception_privilege_violation();
23843 		return;
23844 	}
23845 	m68ki_exception_illegal();
23846 }
23847 
23848 
m68k_op_moves_32_ix(void)23849 static void m68k_op_moves_32_ix(void)
23850 {
23851 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23852 	{
23853 		if(FLAG_S)
23854 		{
23855 			uint word2 = OPER_I_16();
23856 			uint ea = EA_AY_IX_32();
23857 
23858 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23859 			if(BIT_B(word2))		   /* Register to memory */
23860 			{
23861 				m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
23862 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23863 					USE_CYCLES(2);
23864 				return;
23865 			}
23866 			/* Memory to register */
23867 			REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
23868 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23869 				USE_CYCLES(2);
23870 			return;
23871 		}
23872 		m68ki_exception_privilege_violation();
23873 		return;
23874 	}
23875 	m68ki_exception_illegal();
23876 }
23877 
23878 
m68k_op_moves_32_aw(void)23879 static void m68k_op_moves_32_aw(void)
23880 {
23881 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23882 	{
23883 		if(FLAG_S)
23884 		{
23885 			uint word2 = OPER_I_16();
23886 			uint ea = EA_AW_32();
23887 
23888 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23889 			if(BIT_B(word2))		   /* Register to memory */
23890 			{
23891 				m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
23892 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23893 					USE_CYCLES(2);
23894 				return;
23895 			}
23896 			/* Memory to register */
23897 			REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
23898 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23899 				USE_CYCLES(2);
23900 			return;
23901 		}
23902 		m68ki_exception_privilege_violation();
23903 		return;
23904 	}
23905 	m68ki_exception_illegal();
23906 }
23907 
23908 
m68k_op_moves_32_al(void)23909 static void m68k_op_moves_32_al(void)
23910 {
23911 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
23912 	{
23913 		if(FLAG_S)
23914 		{
23915 			uint word2 = OPER_I_16();
23916 			uint ea = EA_AL_32();
23917 
23918 			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
23919 			if(BIT_B(word2))		   /* Register to memory */
23920 			{
23921 				m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
23922 				if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23923 					USE_CYCLES(2);
23924 				return;
23925 			}
23926 			/* Memory to register */
23927 			REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
23928 			if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
23929 				USE_CYCLES(2);
23930 			return;
23931 		}
23932 		m68ki_exception_privilege_violation();
23933 		return;
23934 	}
23935 	m68ki_exception_illegal();
23936 }
23937 
23938 
m68k_op_moveq_32(void)23939 static void m68k_op_moveq_32(void)
23940 {
23941 	uint res = DX = MAKE_INT_8(MASK_OUT_ABOVE_8(REG_IR));
23942 
23943 	FLAG_N = NFLAG_32(res);
23944 	FLAG_Z = res;
23945 	FLAG_V = VFLAG_CLEAR;
23946 	FLAG_C = CFLAG_CLEAR;
23947 }
23948 
23949 
m68k_op_move16_32(void)23950 static void m68k_op_move16_32(void)
23951 {
23952 	UINT16 w2 = OPER_I_16();
23953 	int ax = REG_IR & 7;
23954 	int ay = (w2 >> 12) & 7;
23955 
23956 	m68ki_write_32(REG_A[ay],    m68ki_read_32(REG_A[ax]));
23957 	m68ki_write_32(REG_A[ay]+4,  m68ki_read_32(REG_A[ax]+4));
23958 	m68ki_write_32(REG_A[ay]+8,  m68ki_read_32(REG_A[ax]+8));
23959 	m68ki_write_32(REG_A[ay]+12, m68ki_read_32(REG_A[ax]+12));
23960 
23961 	REG_A[ax] += 16;
23962 	REG_A[ay] += 16;
23963 }
23964 
23965 
m68k_op_muls_16_d(void)23966 static void m68k_op_muls_16_d(void)
23967 {
23968 	uint* r_dst = &DX;
23969 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(DY) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
23970 
23971 	*r_dst = res;
23972 
23973 	FLAG_Z = res;
23974 	FLAG_N = NFLAG_32(res);
23975 	FLAG_V = VFLAG_CLEAR;
23976 	FLAG_C = CFLAG_CLEAR;
23977 }
23978 
23979 
m68k_op_muls_16_ai(void)23980 static void m68k_op_muls_16_ai(void)
23981 {
23982 	uint* r_dst = &DX;
23983 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_AI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
23984 
23985 	*r_dst = res;
23986 
23987 	FLAG_Z = res;
23988 	FLAG_N = NFLAG_32(res);
23989 	FLAG_V = VFLAG_CLEAR;
23990 	FLAG_C = CFLAG_CLEAR;
23991 }
23992 
23993 
m68k_op_muls_16_pi(void)23994 static void m68k_op_muls_16_pi(void)
23995 {
23996 	uint* r_dst = &DX;
23997 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
23998 
23999 	*r_dst = res;
24000 
24001 	FLAG_Z = res;
24002 	FLAG_N = NFLAG_32(res);
24003 	FLAG_V = VFLAG_CLEAR;
24004 	FLAG_C = CFLAG_CLEAR;
24005 }
24006 
24007 
m68k_op_muls_16_pd(void)24008 static void m68k_op_muls_16_pd(void)
24009 {
24010 	uint* r_dst = &DX;
24011 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PD_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
24012 
24013 	*r_dst = res;
24014 
24015 	FLAG_Z = res;
24016 	FLAG_N = NFLAG_32(res);
24017 	FLAG_V = VFLAG_CLEAR;
24018 	FLAG_C = CFLAG_CLEAR;
24019 }
24020 
24021 
m68k_op_muls_16_di(void)24022 static void m68k_op_muls_16_di(void)
24023 {
24024 	uint* r_dst = &DX;
24025 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_DI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
24026 
24027 	*r_dst = res;
24028 
24029 	FLAG_Z = res;
24030 	FLAG_N = NFLAG_32(res);
24031 	FLAG_V = VFLAG_CLEAR;
24032 	FLAG_C = CFLAG_CLEAR;
24033 }
24034 
24035 
m68k_op_muls_16_ix(void)24036 static void m68k_op_muls_16_ix(void)
24037 {
24038 	uint* r_dst = &DX;
24039 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_IX_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
24040 
24041 	*r_dst = res;
24042 
24043 	FLAG_Z = res;
24044 	FLAG_N = NFLAG_32(res);
24045 	FLAG_V = VFLAG_CLEAR;
24046 	FLAG_C = CFLAG_CLEAR;
24047 }
24048 
24049 
m68k_op_muls_16_aw(void)24050 static void m68k_op_muls_16_aw(void)
24051 {
24052 	uint* r_dst = &DX;
24053 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AW_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
24054 
24055 	*r_dst = res;
24056 
24057 	FLAG_Z = res;
24058 	FLAG_N = NFLAG_32(res);
24059 	FLAG_V = VFLAG_CLEAR;
24060 	FLAG_C = CFLAG_CLEAR;
24061 }
24062 
24063 
m68k_op_muls_16_al(void)24064 static void m68k_op_muls_16_al(void)
24065 {
24066 	uint* r_dst = &DX;
24067 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AL_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
24068 
24069 	*r_dst = res;
24070 
24071 	FLAG_Z = res;
24072 	FLAG_N = NFLAG_32(res);
24073 	FLAG_V = VFLAG_CLEAR;
24074 	FLAG_C = CFLAG_CLEAR;
24075 }
24076 
24077 
m68k_op_muls_16_pcdi(void)24078 static void m68k_op_muls_16_pcdi(void)
24079 {
24080 	uint* r_dst = &DX;
24081 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCDI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
24082 
24083 	*r_dst = res;
24084 
24085 	FLAG_Z = res;
24086 	FLAG_N = NFLAG_32(res);
24087 	FLAG_V = VFLAG_CLEAR;
24088 	FLAG_C = CFLAG_CLEAR;
24089 }
24090 
24091 
m68k_op_muls_16_pcix(void)24092 static void m68k_op_muls_16_pcix(void)
24093 {
24094 	uint* r_dst = &DX;
24095 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCIX_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
24096 
24097 	*r_dst = res;
24098 
24099 	FLAG_Z = res;
24100 	FLAG_N = NFLAG_32(res);
24101 	FLAG_V = VFLAG_CLEAR;
24102 	FLAG_C = CFLAG_CLEAR;
24103 }
24104 
24105 
m68k_op_muls_16_i(void)24106 static void m68k_op_muls_16_i(void)
24107 {
24108 	uint* r_dst = &DX;
24109 	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_I_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
24110 
24111 	*r_dst = res;
24112 
24113 	FLAG_Z = res;
24114 	FLAG_N = NFLAG_32(res);
24115 	FLAG_V = VFLAG_CLEAR;
24116 	FLAG_C = CFLAG_CLEAR;
24117 }
24118 
24119 
m68k_op_mulu_16_d(void)24120 static void m68k_op_mulu_16_d(void)
24121 {
24122 	uint* r_dst = &DX;
24123 	uint res = MASK_OUT_ABOVE_16(DY) * MASK_OUT_ABOVE_16(*r_dst);
24124 
24125 	*r_dst = res;
24126 
24127 	FLAG_Z = res;
24128 	FLAG_N = NFLAG_32(res);
24129 	FLAG_V = VFLAG_CLEAR;
24130 	FLAG_C = CFLAG_CLEAR;
24131 }
24132 
24133 
m68k_op_mulu_16_ai(void)24134 static void m68k_op_mulu_16_ai(void)
24135 {
24136 	uint* r_dst = &DX;
24137 	uint res = OPER_AY_AI_16() * MASK_OUT_ABOVE_16(*r_dst);
24138 
24139 	*r_dst = res;
24140 
24141 	FLAG_Z = res;
24142 	FLAG_N = NFLAG_32(res);
24143 	FLAG_V = VFLAG_CLEAR;
24144 	FLAG_C = CFLAG_CLEAR;
24145 }
24146 
24147 
m68k_op_mulu_16_pi(void)24148 static void m68k_op_mulu_16_pi(void)
24149 {
24150 	uint* r_dst = &DX;
24151 	uint res = OPER_AY_PI_16() * MASK_OUT_ABOVE_16(*r_dst);
24152 
24153 	*r_dst = res;
24154 
24155 	FLAG_Z = res;
24156 	FLAG_N = NFLAG_32(res);
24157 	FLAG_V = VFLAG_CLEAR;
24158 	FLAG_C = CFLAG_CLEAR;
24159 }
24160 
24161 
m68k_op_mulu_16_pd(void)24162 static void m68k_op_mulu_16_pd(void)
24163 {
24164 	uint* r_dst = &DX;
24165 	uint res = OPER_AY_PD_16() * MASK_OUT_ABOVE_16(*r_dst);
24166 
24167 	*r_dst = res;
24168 
24169 	FLAG_Z = res;
24170 	FLAG_N = NFLAG_32(res);
24171 	FLAG_V = VFLAG_CLEAR;
24172 	FLAG_C = CFLAG_CLEAR;
24173 }
24174 
24175 
m68k_op_mulu_16_di(void)24176 static void m68k_op_mulu_16_di(void)
24177 {
24178 	uint* r_dst = &DX;
24179 	uint res = OPER_AY_DI_16() * MASK_OUT_ABOVE_16(*r_dst);
24180 
24181 	*r_dst = res;
24182 
24183 	FLAG_Z = res;
24184 	FLAG_N = NFLAG_32(res);
24185 	FLAG_V = VFLAG_CLEAR;
24186 	FLAG_C = CFLAG_CLEAR;
24187 }
24188 
24189 
m68k_op_mulu_16_ix(void)24190 static void m68k_op_mulu_16_ix(void)
24191 {
24192 	uint* r_dst = &DX;
24193 	uint res = OPER_AY_IX_16() * MASK_OUT_ABOVE_16(*r_dst);
24194 
24195 	*r_dst = res;
24196 
24197 	FLAG_Z = res;
24198 	FLAG_N = NFLAG_32(res);
24199 	FLAG_V = VFLAG_CLEAR;
24200 	FLAG_C = CFLAG_CLEAR;
24201 }
24202 
24203 
m68k_op_mulu_16_aw(void)24204 static void m68k_op_mulu_16_aw(void)
24205 {
24206 	uint* r_dst = &DX;
24207 	uint res = OPER_AW_16() * MASK_OUT_ABOVE_16(*r_dst);
24208 
24209 	*r_dst = res;
24210 
24211 	FLAG_Z = res;
24212 	FLAG_N = NFLAG_32(res);
24213 	FLAG_V = VFLAG_CLEAR;
24214 	FLAG_C = CFLAG_CLEAR;
24215 }
24216 
24217 
m68k_op_mulu_16_al(void)24218 static void m68k_op_mulu_16_al(void)
24219 {
24220 	uint* r_dst = &DX;
24221 	uint res = OPER_AL_16() * MASK_OUT_ABOVE_16(*r_dst);
24222 
24223 	*r_dst = res;
24224 
24225 	FLAG_Z = res;
24226 	FLAG_N = NFLAG_32(res);
24227 	FLAG_V = VFLAG_CLEAR;
24228 	FLAG_C = CFLAG_CLEAR;
24229 }
24230 
24231 
m68k_op_mulu_16_pcdi(void)24232 static void m68k_op_mulu_16_pcdi(void)
24233 {
24234 	uint* r_dst = &DX;
24235 	uint res = OPER_PCDI_16() * MASK_OUT_ABOVE_16(*r_dst);
24236 
24237 	*r_dst = res;
24238 
24239 	FLAG_Z = res;
24240 	FLAG_N = NFLAG_32(res);
24241 	FLAG_V = VFLAG_CLEAR;
24242 	FLAG_C = CFLAG_CLEAR;
24243 }
24244 
24245 
m68k_op_mulu_16_pcix(void)24246 static void m68k_op_mulu_16_pcix(void)
24247 {
24248 	uint* r_dst = &DX;
24249 	uint res = OPER_PCIX_16() * MASK_OUT_ABOVE_16(*r_dst);
24250 
24251 	*r_dst = res;
24252 
24253 	FLAG_Z = res;
24254 	FLAG_N = NFLAG_32(res);
24255 	FLAG_V = VFLAG_CLEAR;
24256 	FLAG_C = CFLAG_CLEAR;
24257 }
24258 
24259 
m68k_op_mulu_16_i(void)24260 static void m68k_op_mulu_16_i(void)
24261 {
24262 	uint* r_dst = &DX;
24263 	uint res = OPER_I_16() * MASK_OUT_ABOVE_16(*r_dst);
24264 
24265 	*r_dst = res;
24266 
24267 	FLAG_Z = res;
24268 	FLAG_N = NFLAG_32(res);
24269 	FLAG_V = VFLAG_CLEAR;
24270 	FLAG_C = CFLAG_CLEAR;
24271 }
24272 
24273 
m68k_op_mull_32_d(void)24274 static void m68k_op_mull_32_d(void)
24275 {
24276 #if M68K_USE_64_BIT
24277 
24278 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24279 	{
24280 		uint word2 = OPER_I_16();
24281 		uint64 src = DY;
24282 		uint64 dst = REG_D[(word2 >> 12) & 7];
24283 		uint64 res;
24284 
24285 		FLAG_C = CFLAG_CLEAR;
24286 
24287 		if(BIT_B(word2))			   /* signed */
24288 		{
24289 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
24290 			if(!BIT_A(word2))
24291 			{
24292 				FLAG_Z = MASK_OUT_ABOVE_32(res);
24293 				FLAG_N = NFLAG_32(res);
24294 				FLAG_V = ((sint64)res != (sint32)res)<<7;
24295 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
24296 				return;
24297 			}
24298 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24299 			FLAG_N = NFLAG_64(res);
24300 			FLAG_V = VFLAG_CLEAR;
24301 			REG_D[word2 & 7] = (res >> 32);
24302 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24303 			return;
24304 		}
24305 
24306 		res = src * dst;
24307 		if(!BIT_A(word2))
24308 		{
24309 			FLAG_Z = MASK_OUT_ABOVE_32(res);
24310 			FLAG_N = NFLAG_32(res);
24311 			FLAG_V = (res > 0xffffffff)<<7;
24312 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
24313 			return;
24314 		}
24315 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24316 		FLAG_N = NFLAG_64(res);
24317 		FLAG_V = VFLAG_CLEAR;
24318 		REG_D[word2 & 7] = (res >> 32);
24319 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24320 		return;
24321 	}
24322 	m68ki_exception_illegal();
24323 
24324 #else
24325 
24326 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24327 	{
24328 		uint word2 = OPER_I_16();
24329 		uint src = DY;
24330 		uint dst = REG_D[(word2 >> 12) & 7];
24331 		uint neg = GET_MSB_32(src ^ dst);
24332 		uint src1;
24333 		uint src2;
24334 		uint dst1;
24335 		uint dst2;
24336 		uint r1;
24337 		uint r2;
24338 		uint r3;
24339 		uint r4;
24340 		uint lo;
24341 		uint hi;
24342 
24343 		FLAG_C = CFLAG_CLEAR;
24344 
24345 		if(BIT_B(word2))			   /* signed */
24346 		{
24347 			if(GET_MSB_32(src))
24348 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
24349 			if(GET_MSB_32(dst))
24350 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
24351 		}
24352 
24353 		src1 = MASK_OUT_ABOVE_16(src);
24354 		src2 = src>>16;
24355 		dst1 = MASK_OUT_ABOVE_16(dst);
24356 		dst2 = dst>>16;
24357 
24358 
24359 		r1 = src1 * dst1;
24360 		r2 = src1 * dst2;
24361 		r3 = src2 * dst1;
24362 		r4 = src2 * dst2;
24363 
24364 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
24365 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
24366 
24367 		if(BIT_B(word2) && neg)
24368 		{
24369 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
24370 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
24371 		}
24372 
24373 		if(BIT_A(word2))
24374 		{
24375 			REG_D[word2 & 7] = hi;
24376 			REG_D[(word2 >> 12) & 7] = lo;
24377 			FLAG_N = NFLAG_32(hi);
24378 			FLAG_Z = hi | lo;
24379 			FLAG_V = VFLAG_CLEAR;
24380 			return;
24381 		}
24382 
24383 		REG_D[(word2 >> 12) & 7] = lo;
24384 		FLAG_N = NFLAG_32(lo);
24385 		FLAG_Z = lo;
24386 		if(BIT_B(word2))
24387 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
24388 		else
24389 			FLAG_V = (hi != 0) << 7;
24390 		return;
24391 	}
24392 	m68ki_exception_illegal();
24393 
24394 #endif
24395 }
24396 
24397 
m68k_op_mull_32_ai(void)24398 static void m68k_op_mull_32_ai(void)
24399 {
24400 #if M68K_USE_64_BIT
24401 
24402 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24403 	{
24404 		uint word2 = OPER_I_16();
24405 		uint64 src = OPER_AY_AI_32();
24406 		uint64 dst = REG_D[(word2 >> 12) & 7];
24407 		uint64 res;
24408 
24409 		FLAG_C = CFLAG_CLEAR;
24410 
24411 		if(BIT_B(word2))			   /* signed */
24412 		{
24413 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
24414 			if(!BIT_A(word2))
24415 			{
24416 				FLAG_Z = MASK_OUT_ABOVE_32(res);
24417 				FLAG_N = NFLAG_32(res);
24418 				FLAG_V = ((sint64)res != (sint32)res)<<7;
24419 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
24420 				return;
24421 			}
24422 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24423 			FLAG_N = NFLAG_64(res);
24424 			FLAG_V = VFLAG_CLEAR;
24425 			REG_D[word2 & 7] = (res >> 32);
24426 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24427 			return;
24428 		}
24429 
24430 		res = src * dst;
24431 		if(!BIT_A(word2))
24432 		{
24433 			FLAG_Z = MASK_OUT_ABOVE_32(res);
24434 			FLAG_N = NFLAG_32(res);
24435 			FLAG_V = (res > 0xffffffff)<<7;
24436 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
24437 			return;
24438 		}
24439 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24440 		FLAG_N = NFLAG_64(res);
24441 		FLAG_V = VFLAG_CLEAR;
24442 		REG_D[word2 & 7] = (res >> 32);
24443 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24444 		return;
24445 	}
24446 	m68ki_exception_illegal();
24447 
24448 #else
24449 
24450 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24451 	{
24452 		uint word2 = OPER_I_16();
24453 		uint src = OPER_AY_AI_32();
24454 		uint dst = REG_D[(word2 >> 12) & 7];
24455 		uint neg = GET_MSB_32(src ^ dst);
24456 		uint src1;
24457 		uint src2;
24458 		uint dst1;
24459 		uint dst2;
24460 		uint r1;
24461 		uint r2;
24462 		uint r3;
24463 		uint r4;
24464 		uint lo;
24465 		uint hi;
24466 
24467 		FLAG_C = CFLAG_CLEAR;
24468 
24469 		if(BIT_B(word2))			   /* signed */
24470 		{
24471 			if(GET_MSB_32(src))
24472 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
24473 			if(GET_MSB_32(dst))
24474 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
24475 		}
24476 
24477 		src1 = MASK_OUT_ABOVE_16(src);
24478 		src2 = src>>16;
24479 		dst1 = MASK_OUT_ABOVE_16(dst);
24480 		dst2 = dst>>16;
24481 
24482 
24483 		r1 = src1 * dst1;
24484 		r2 = src1 * dst2;
24485 		r3 = src2 * dst1;
24486 		r4 = src2 * dst2;
24487 
24488 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
24489 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
24490 
24491 		if(BIT_B(word2) && neg)
24492 		{
24493 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
24494 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
24495 		}
24496 
24497 		if(BIT_A(word2))
24498 		{
24499 			REG_D[word2 & 7] = hi;
24500 			REG_D[(word2 >> 12) & 7] = lo;
24501 			FLAG_N = NFLAG_32(hi);
24502 			FLAG_Z = hi | lo;
24503 			FLAG_V = VFLAG_CLEAR;
24504 			return;
24505 		}
24506 
24507 		REG_D[(word2 >> 12) & 7] = lo;
24508 		FLAG_N = NFLAG_32(lo);
24509 		FLAG_Z = lo;
24510 		if(BIT_B(word2))
24511 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
24512 		else
24513 			FLAG_V = (hi != 0) << 7;
24514 		return;
24515 	}
24516 	m68ki_exception_illegal();
24517 
24518 #endif
24519 }
24520 
24521 
m68k_op_mull_32_pi(void)24522 static void m68k_op_mull_32_pi(void)
24523 {
24524 #if M68K_USE_64_BIT
24525 
24526 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24527 	{
24528 		uint word2 = OPER_I_16();
24529 		uint64 src = OPER_AY_PI_32();
24530 		uint64 dst = REG_D[(word2 >> 12) & 7];
24531 		uint64 res;
24532 
24533 		FLAG_C = CFLAG_CLEAR;
24534 
24535 		if(BIT_B(word2))			   /* signed */
24536 		{
24537 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
24538 			if(!BIT_A(word2))
24539 			{
24540 				FLAG_Z = MASK_OUT_ABOVE_32(res);
24541 				FLAG_N = NFLAG_32(res);
24542 				FLAG_V = ((sint64)res != (sint32)res)<<7;
24543 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
24544 				return;
24545 			}
24546 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24547 			FLAG_N = NFLAG_64(res);
24548 			FLAG_V = VFLAG_CLEAR;
24549 			REG_D[word2 & 7] = (res >> 32);
24550 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24551 			return;
24552 		}
24553 
24554 		res = src * dst;
24555 		if(!BIT_A(word2))
24556 		{
24557 			FLAG_Z = MASK_OUT_ABOVE_32(res);
24558 			FLAG_N = NFLAG_32(res);
24559 			FLAG_V = (res > 0xffffffff)<<7;
24560 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
24561 			return;
24562 		}
24563 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24564 		FLAG_N = NFLAG_64(res);
24565 		FLAG_V = VFLAG_CLEAR;
24566 		REG_D[word2 & 7] = (res >> 32);
24567 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24568 		return;
24569 	}
24570 	m68ki_exception_illegal();
24571 
24572 #else
24573 
24574 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24575 	{
24576 		uint word2 = OPER_I_16();
24577 		uint src = OPER_AY_PI_32();
24578 		uint dst = REG_D[(word2 >> 12) & 7];
24579 		uint neg = GET_MSB_32(src ^ dst);
24580 		uint src1;
24581 		uint src2;
24582 		uint dst1;
24583 		uint dst2;
24584 		uint r1;
24585 		uint r2;
24586 		uint r3;
24587 		uint r4;
24588 		uint lo;
24589 		uint hi;
24590 
24591 		FLAG_C = CFLAG_CLEAR;
24592 
24593 		if(BIT_B(word2))			   /* signed */
24594 		{
24595 			if(GET_MSB_32(src))
24596 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
24597 			if(GET_MSB_32(dst))
24598 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
24599 		}
24600 
24601 		src1 = MASK_OUT_ABOVE_16(src);
24602 		src2 = src>>16;
24603 		dst1 = MASK_OUT_ABOVE_16(dst);
24604 		dst2 = dst>>16;
24605 
24606 
24607 		r1 = src1 * dst1;
24608 		r2 = src1 * dst2;
24609 		r3 = src2 * dst1;
24610 		r4 = src2 * dst2;
24611 
24612 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
24613 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
24614 
24615 		if(BIT_B(word2) && neg)
24616 		{
24617 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
24618 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
24619 		}
24620 
24621 		if(BIT_A(word2))
24622 		{
24623 			REG_D[word2 & 7] = hi;
24624 			REG_D[(word2 >> 12) & 7] = lo;
24625 			FLAG_N = NFLAG_32(hi);
24626 			FLAG_Z = hi | lo;
24627 			FLAG_V = VFLAG_CLEAR;
24628 			return;
24629 		}
24630 
24631 		REG_D[(word2 >> 12) & 7] = lo;
24632 		FLAG_N = NFLAG_32(lo);
24633 		FLAG_Z = lo;
24634 		if(BIT_B(word2))
24635 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
24636 		else
24637 			FLAG_V = (hi != 0) << 7;
24638 		return;
24639 	}
24640 	m68ki_exception_illegal();
24641 
24642 #endif
24643 }
24644 
24645 
m68k_op_mull_32_pd(void)24646 static void m68k_op_mull_32_pd(void)
24647 {
24648 #if M68K_USE_64_BIT
24649 
24650 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24651 	{
24652 		uint word2 = OPER_I_16();
24653 		uint64 src = OPER_AY_PD_32();
24654 		uint64 dst = REG_D[(word2 >> 12) & 7];
24655 		uint64 res;
24656 
24657 		FLAG_C = CFLAG_CLEAR;
24658 
24659 		if(BIT_B(word2))			   /* signed */
24660 		{
24661 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
24662 			if(!BIT_A(word2))
24663 			{
24664 				FLAG_Z = MASK_OUT_ABOVE_32(res);
24665 				FLAG_N = NFLAG_32(res);
24666 				FLAG_V = ((sint64)res != (sint32)res)<<7;
24667 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
24668 				return;
24669 			}
24670 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24671 			FLAG_N = NFLAG_64(res);
24672 			FLAG_V = VFLAG_CLEAR;
24673 			REG_D[word2 & 7] = (res >> 32);
24674 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24675 			return;
24676 		}
24677 
24678 		res = src * dst;
24679 		if(!BIT_A(word2))
24680 		{
24681 			FLAG_Z = MASK_OUT_ABOVE_32(res);
24682 			FLAG_N = NFLAG_32(res);
24683 			FLAG_V = (res > 0xffffffff)<<7;
24684 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
24685 			return;
24686 		}
24687 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24688 		FLAG_N = NFLAG_64(res);
24689 		FLAG_V = VFLAG_CLEAR;
24690 		REG_D[word2 & 7] = (res >> 32);
24691 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24692 		return;
24693 	}
24694 	m68ki_exception_illegal();
24695 
24696 #else
24697 
24698 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24699 	{
24700 		uint word2 = OPER_I_16();
24701 		uint src = OPER_AY_PD_32();
24702 		uint dst = REG_D[(word2 >> 12) & 7];
24703 		uint neg = GET_MSB_32(src ^ dst);
24704 		uint src1;
24705 		uint src2;
24706 		uint dst1;
24707 		uint dst2;
24708 		uint r1;
24709 		uint r2;
24710 		uint r3;
24711 		uint r4;
24712 		uint lo;
24713 		uint hi;
24714 
24715 		FLAG_C = CFLAG_CLEAR;
24716 
24717 		if(BIT_B(word2))			   /* signed */
24718 		{
24719 			if(GET_MSB_32(src))
24720 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
24721 			if(GET_MSB_32(dst))
24722 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
24723 		}
24724 
24725 		src1 = MASK_OUT_ABOVE_16(src);
24726 		src2 = src>>16;
24727 		dst1 = MASK_OUT_ABOVE_16(dst);
24728 		dst2 = dst>>16;
24729 
24730 
24731 		r1 = src1 * dst1;
24732 		r2 = src1 * dst2;
24733 		r3 = src2 * dst1;
24734 		r4 = src2 * dst2;
24735 
24736 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
24737 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
24738 
24739 		if(BIT_B(word2) && neg)
24740 		{
24741 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
24742 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
24743 		}
24744 
24745 		if(BIT_A(word2))
24746 		{
24747 			REG_D[word2 & 7] = hi;
24748 			REG_D[(word2 >> 12) & 7] = lo;
24749 			FLAG_N = NFLAG_32(hi);
24750 			FLAG_Z = hi | lo;
24751 			FLAG_V = VFLAG_CLEAR;
24752 			return;
24753 		}
24754 
24755 		REG_D[(word2 >> 12) & 7] = lo;
24756 		FLAG_N = NFLAG_32(lo);
24757 		FLAG_Z = lo;
24758 		if(BIT_B(word2))
24759 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
24760 		else
24761 			FLAG_V = (hi != 0) << 7;
24762 		return;
24763 	}
24764 	m68ki_exception_illegal();
24765 
24766 #endif
24767 }
24768 
24769 
m68k_op_mull_32_di(void)24770 static void m68k_op_mull_32_di(void)
24771 {
24772 #if M68K_USE_64_BIT
24773 
24774 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24775 	{
24776 		uint word2 = OPER_I_16();
24777 		uint64 src = OPER_AY_DI_32();
24778 		uint64 dst = REG_D[(word2 >> 12) & 7];
24779 		uint64 res;
24780 
24781 		FLAG_C = CFLAG_CLEAR;
24782 
24783 		if(BIT_B(word2))			   /* signed */
24784 		{
24785 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
24786 			if(!BIT_A(word2))
24787 			{
24788 				FLAG_Z = MASK_OUT_ABOVE_32(res);
24789 				FLAG_N = NFLAG_32(res);
24790 				FLAG_V = ((sint64)res != (sint32)res)<<7;
24791 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
24792 				return;
24793 			}
24794 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24795 			FLAG_N = NFLAG_64(res);
24796 			FLAG_V = VFLAG_CLEAR;
24797 			REG_D[word2 & 7] = (res >> 32);
24798 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24799 			return;
24800 		}
24801 
24802 		res = src * dst;
24803 		if(!BIT_A(word2))
24804 		{
24805 			FLAG_Z = MASK_OUT_ABOVE_32(res);
24806 			FLAG_N = NFLAG_32(res);
24807 			FLAG_V = (res > 0xffffffff)<<7;
24808 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
24809 			return;
24810 		}
24811 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24812 		FLAG_N = NFLAG_64(res);
24813 		FLAG_V = VFLAG_CLEAR;
24814 		REG_D[word2 & 7] = (res >> 32);
24815 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24816 		return;
24817 	}
24818 	m68ki_exception_illegal();
24819 
24820 #else
24821 
24822 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24823 	{
24824 		uint word2 = OPER_I_16();
24825 		uint src = OPER_AY_DI_32();
24826 		uint dst = REG_D[(word2 >> 12) & 7];
24827 		uint neg = GET_MSB_32(src ^ dst);
24828 		uint src1;
24829 		uint src2;
24830 		uint dst1;
24831 		uint dst2;
24832 		uint r1;
24833 		uint r2;
24834 		uint r3;
24835 		uint r4;
24836 		uint lo;
24837 		uint hi;
24838 
24839 		FLAG_C = CFLAG_CLEAR;
24840 
24841 		if(BIT_B(word2))			   /* signed */
24842 		{
24843 			if(GET_MSB_32(src))
24844 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
24845 			if(GET_MSB_32(dst))
24846 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
24847 		}
24848 
24849 		src1 = MASK_OUT_ABOVE_16(src);
24850 		src2 = src>>16;
24851 		dst1 = MASK_OUT_ABOVE_16(dst);
24852 		dst2 = dst>>16;
24853 
24854 
24855 		r1 = src1 * dst1;
24856 		r2 = src1 * dst2;
24857 		r3 = src2 * dst1;
24858 		r4 = src2 * dst2;
24859 
24860 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
24861 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
24862 
24863 		if(BIT_B(word2) && neg)
24864 		{
24865 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
24866 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
24867 		}
24868 
24869 		if(BIT_A(word2))
24870 		{
24871 			REG_D[word2 & 7] = hi;
24872 			REG_D[(word2 >> 12) & 7] = lo;
24873 			FLAG_N = NFLAG_32(hi);
24874 			FLAG_Z = hi | lo;
24875 			FLAG_V = VFLAG_CLEAR;
24876 			return;
24877 		}
24878 
24879 		REG_D[(word2 >> 12) & 7] = lo;
24880 		FLAG_N = NFLAG_32(lo);
24881 		FLAG_Z = lo;
24882 		if(BIT_B(word2))
24883 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
24884 		else
24885 			FLAG_V = (hi != 0) << 7;
24886 		return;
24887 	}
24888 	m68ki_exception_illegal();
24889 
24890 #endif
24891 }
24892 
24893 
m68k_op_mull_32_ix(void)24894 static void m68k_op_mull_32_ix(void)
24895 {
24896 #if M68K_USE_64_BIT
24897 
24898 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24899 	{
24900 		uint word2 = OPER_I_16();
24901 		uint64 src = OPER_AY_IX_32();
24902 		uint64 dst = REG_D[(word2 >> 12) & 7];
24903 		uint64 res;
24904 
24905 		FLAG_C = CFLAG_CLEAR;
24906 
24907 		if(BIT_B(word2))			   /* signed */
24908 		{
24909 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
24910 			if(!BIT_A(word2))
24911 			{
24912 				FLAG_Z = MASK_OUT_ABOVE_32(res);
24913 				FLAG_N = NFLAG_32(res);
24914 				FLAG_V = ((sint64)res != (sint32)res)<<7;
24915 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
24916 				return;
24917 			}
24918 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24919 			FLAG_N = NFLAG_64(res);
24920 			FLAG_V = VFLAG_CLEAR;
24921 			REG_D[word2 & 7] = (res >> 32);
24922 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24923 			return;
24924 		}
24925 
24926 		res = src * dst;
24927 		if(!BIT_A(word2))
24928 		{
24929 			FLAG_Z = MASK_OUT_ABOVE_32(res);
24930 			FLAG_N = NFLAG_32(res);
24931 			FLAG_V = (res > 0xffffffff)<<7;
24932 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
24933 			return;
24934 		}
24935 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
24936 		FLAG_N = NFLAG_64(res);
24937 		FLAG_V = VFLAG_CLEAR;
24938 		REG_D[word2 & 7] = (res >> 32);
24939 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
24940 		return;
24941 	}
24942 	m68ki_exception_illegal();
24943 
24944 #else
24945 
24946 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
24947 	{
24948 		uint word2 = OPER_I_16();
24949 		uint src = OPER_AY_IX_32();
24950 		uint dst = REG_D[(word2 >> 12) & 7];
24951 		uint neg = GET_MSB_32(src ^ dst);
24952 		uint src1;
24953 		uint src2;
24954 		uint dst1;
24955 		uint dst2;
24956 		uint r1;
24957 		uint r2;
24958 		uint r3;
24959 		uint r4;
24960 		uint lo;
24961 		uint hi;
24962 
24963 		FLAG_C = CFLAG_CLEAR;
24964 
24965 		if(BIT_B(word2))			   /* signed */
24966 		{
24967 			if(GET_MSB_32(src))
24968 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
24969 			if(GET_MSB_32(dst))
24970 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
24971 		}
24972 
24973 		src1 = MASK_OUT_ABOVE_16(src);
24974 		src2 = src>>16;
24975 		dst1 = MASK_OUT_ABOVE_16(dst);
24976 		dst2 = dst>>16;
24977 
24978 
24979 		r1 = src1 * dst1;
24980 		r2 = src1 * dst2;
24981 		r3 = src2 * dst1;
24982 		r4 = src2 * dst2;
24983 
24984 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
24985 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
24986 
24987 		if(BIT_B(word2) && neg)
24988 		{
24989 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
24990 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
24991 		}
24992 
24993 		if(BIT_A(word2))
24994 		{
24995 			REG_D[word2 & 7] = hi;
24996 			REG_D[(word2 >> 12) & 7] = lo;
24997 			FLAG_N = NFLAG_32(hi);
24998 			FLAG_Z = hi | lo;
24999 			FLAG_V = VFLAG_CLEAR;
25000 			return;
25001 		}
25002 
25003 		REG_D[(word2 >> 12) & 7] = lo;
25004 		FLAG_N = NFLAG_32(lo);
25005 		FLAG_Z = lo;
25006 		if(BIT_B(word2))
25007 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
25008 		else
25009 			FLAG_V = (hi != 0) << 7;
25010 		return;
25011 	}
25012 	m68ki_exception_illegal();
25013 
25014 #endif
25015 }
25016 
25017 
m68k_op_mull_32_aw(void)25018 static void m68k_op_mull_32_aw(void)
25019 {
25020 #if M68K_USE_64_BIT
25021 
25022 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
25023 	{
25024 		uint word2 = OPER_I_16();
25025 		uint64 src = OPER_AW_32();
25026 		uint64 dst = REG_D[(word2 >> 12) & 7];
25027 		uint64 res;
25028 
25029 		FLAG_C = CFLAG_CLEAR;
25030 
25031 		if(BIT_B(word2))			   /* signed */
25032 		{
25033 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
25034 			if(!BIT_A(word2))
25035 			{
25036 				FLAG_Z = MASK_OUT_ABOVE_32(res);
25037 				FLAG_N = NFLAG_32(res);
25038 				FLAG_V = ((sint64)res != (sint32)res)<<7;
25039 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
25040 				return;
25041 			}
25042 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
25043 			FLAG_N = NFLAG_64(res);
25044 			FLAG_V = VFLAG_CLEAR;
25045 			REG_D[word2 & 7] = (res >> 32);
25046 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
25047 			return;
25048 		}
25049 
25050 		res = src * dst;
25051 		if(!BIT_A(word2))
25052 		{
25053 			FLAG_Z = MASK_OUT_ABOVE_32(res);
25054 			FLAG_N = NFLAG_32(res);
25055 			FLAG_V = (res > 0xffffffff)<<7;
25056 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
25057 			return;
25058 		}
25059 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
25060 		FLAG_N = NFLAG_64(res);
25061 		FLAG_V = VFLAG_CLEAR;
25062 		REG_D[word2 & 7] = (res >> 32);
25063 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
25064 		return;
25065 	}
25066 	m68ki_exception_illegal();
25067 
25068 #else
25069 
25070 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
25071 	{
25072 		uint word2 = OPER_I_16();
25073 		uint src = OPER_AW_32();
25074 		uint dst = REG_D[(word2 >> 12) & 7];
25075 		uint neg = GET_MSB_32(src ^ dst);
25076 		uint src1;
25077 		uint src2;
25078 		uint dst1;
25079 		uint dst2;
25080 		uint r1;
25081 		uint r2;
25082 		uint r3;
25083 		uint r4;
25084 		uint lo;
25085 		uint hi;
25086 
25087 		FLAG_C = CFLAG_CLEAR;
25088 
25089 		if(BIT_B(word2))			   /* signed */
25090 		{
25091 			if(GET_MSB_32(src))
25092 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
25093 			if(GET_MSB_32(dst))
25094 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
25095 		}
25096 
25097 		src1 = MASK_OUT_ABOVE_16(src);
25098 		src2 = src>>16;
25099 		dst1 = MASK_OUT_ABOVE_16(dst);
25100 		dst2 = dst>>16;
25101 
25102 
25103 		r1 = src1 * dst1;
25104 		r2 = src1 * dst2;
25105 		r3 = src2 * dst1;
25106 		r4 = src2 * dst2;
25107 
25108 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
25109 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
25110 
25111 		if(BIT_B(word2) && neg)
25112 		{
25113 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
25114 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
25115 		}
25116 
25117 		if(BIT_A(word2))
25118 		{
25119 			REG_D[word2 & 7] = hi;
25120 			REG_D[(word2 >> 12) & 7] = lo;
25121 			FLAG_N = NFLAG_32(hi);
25122 			FLAG_Z = hi | lo;
25123 			FLAG_V = VFLAG_CLEAR;
25124 			return;
25125 		}
25126 
25127 		REG_D[(word2 >> 12) & 7] = lo;
25128 		FLAG_N = NFLAG_32(lo);
25129 		FLAG_Z = lo;
25130 		if(BIT_B(word2))
25131 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
25132 		else
25133 			FLAG_V = (hi != 0) << 7;
25134 		return;
25135 	}
25136 	m68ki_exception_illegal();
25137 
25138 #endif
25139 }
25140 
25141 
m68k_op_mull_32_al(void)25142 static void m68k_op_mull_32_al(void)
25143 {
25144 #if M68K_USE_64_BIT
25145 
25146 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
25147 	{
25148 		uint word2 = OPER_I_16();
25149 		uint64 src = OPER_AL_32();
25150 		uint64 dst = REG_D[(word2 >> 12) & 7];
25151 		uint64 res;
25152 
25153 		FLAG_C = CFLAG_CLEAR;
25154 
25155 		if(BIT_B(word2))			   /* signed */
25156 		{
25157 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
25158 			if(!BIT_A(word2))
25159 			{
25160 				FLAG_Z = MASK_OUT_ABOVE_32(res);
25161 				FLAG_N = NFLAG_32(res);
25162 				FLAG_V = ((sint64)res != (sint32)res)<<7;
25163 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
25164 				return;
25165 			}
25166 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
25167 			FLAG_N = NFLAG_64(res);
25168 			FLAG_V = VFLAG_CLEAR;
25169 			REG_D[word2 & 7] = (res >> 32);
25170 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
25171 			return;
25172 		}
25173 
25174 		res = src * dst;
25175 		if(!BIT_A(word2))
25176 		{
25177 			FLAG_Z = MASK_OUT_ABOVE_32(res);
25178 			FLAG_N = NFLAG_32(res);
25179 			FLAG_V = (res > 0xffffffff)<<7;
25180 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
25181 			return;
25182 		}
25183 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
25184 		FLAG_N = NFLAG_64(res);
25185 		FLAG_V = VFLAG_CLEAR;
25186 		REG_D[word2 & 7] = (res >> 32);
25187 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
25188 		return;
25189 	}
25190 	m68ki_exception_illegal();
25191 
25192 #else
25193 
25194 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
25195 	{
25196 		uint word2 = OPER_I_16();
25197 		uint src = OPER_AL_32();
25198 		uint dst = REG_D[(word2 >> 12) & 7];
25199 		uint neg = GET_MSB_32(src ^ dst);
25200 		uint src1;
25201 		uint src2;
25202 		uint dst1;
25203 		uint dst2;
25204 		uint r1;
25205 		uint r2;
25206 		uint r3;
25207 		uint r4;
25208 		uint lo;
25209 		uint hi;
25210 
25211 		FLAG_C = CFLAG_CLEAR;
25212 
25213 		if(BIT_B(word2))			   /* signed */
25214 		{
25215 			if(GET_MSB_32(src))
25216 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
25217 			if(GET_MSB_32(dst))
25218 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
25219 		}
25220 
25221 		src1 = MASK_OUT_ABOVE_16(src);
25222 		src2 = src>>16;
25223 		dst1 = MASK_OUT_ABOVE_16(dst);
25224 		dst2 = dst>>16;
25225 
25226 
25227 		r1 = src1 * dst1;
25228 		r2 = src1 * dst2;
25229 		r3 = src2 * dst1;
25230 		r4 = src2 * dst2;
25231 
25232 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
25233 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
25234 
25235 		if(BIT_B(word2) && neg)
25236 		{
25237 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
25238 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
25239 		}
25240 
25241 		if(BIT_A(word2))
25242 		{
25243 			REG_D[word2 & 7] = hi;
25244 			REG_D[(word2 >> 12) & 7] = lo;
25245 			FLAG_N = NFLAG_32(hi);
25246 			FLAG_Z = hi | lo;
25247 			FLAG_V = VFLAG_CLEAR;
25248 			return;
25249 		}
25250 
25251 		REG_D[(word2 >> 12) & 7] = lo;
25252 		FLAG_N = NFLAG_32(lo);
25253 		FLAG_Z = lo;
25254 		if(BIT_B(word2))
25255 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
25256 		else
25257 			FLAG_V = (hi != 0) << 7;
25258 		return;
25259 	}
25260 	m68ki_exception_illegal();
25261 
25262 #endif
25263 }
25264 
25265 
m68k_op_mull_32_pcdi(void)25266 static void m68k_op_mull_32_pcdi(void)
25267 {
25268 #if M68K_USE_64_BIT
25269 
25270 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
25271 	{
25272 		uint word2 = OPER_I_16();
25273 		uint64 src = OPER_PCDI_32();
25274 		uint64 dst = REG_D[(word2 >> 12) & 7];
25275 		uint64 res;
25276 
25277 		FLAG_C = CFLAG_CLEAR;
25278 
25279 		if(BIT_B(word2))			   /* signed */
25280 		{
25281 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
25282 			if(!BIT_A(word2))
25283 			{
25284 				FLAG_Z = MASK_OUT_ABOVE_32(res);
25285 				FLAG_N = NFLAG_32(res);
25286 				FLAG_V = ((sint64)res != (sint32)res)<<7;
25287 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
25288 				return;
25289 			}
25290 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
25291 			FLAG_N = NFLAG_64(res);
25292 			FLAG_V = VFLAG_CLEAR;
25293 			REG_D[word2 & 7] = (res >> 32);
25294 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
25295 			return;
25296 		}
25297 
25298 		res = src * dst;
25299 		if(!BIT_A(word2))
25300 		{
25301 			FLAG_Z = MASK_OUT_ABOVE_32(res);
25302 			FLAG_N = NFLAG_32(res);
25303 			FLAG_V = (res > 0xffffffff)<<7;
25304 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
25305 			return;
25306 		}
25307 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
25308 		FLAG_N = NFLAG_64(res);
25309 		FLAG_V = VFLAG_CLEAR;
25310 		REG_D[word2 & 7] = (res >> 32);
25311 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
25312 		return;
25313 	}
25314 	m68ki_exception_illegal();
25315 
25316 #else
25317 
25318 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
25319 	{
25320 		uint word2 = OPER_I_16();
25321 		uint src = OPER_PCDI_32();
25322 		uint dst = REG_D[(word2 >> 12) & 7];
25323 		uint neg = GET_MSB_32(src ^ dst);
25324 		uint src1;
25325 		uint src2;
25326 		uint dst1;
25327 		uint dst2;
25328 		uint r1;
25329 		uint r2;
25330 		uint r3;
25331 		uint r4;
25332 		uint lo;
25333 		uint hi;
25334 
25335 		FLAG_C = CFLAG_CLEAR;
25336 
25337 		if(BIT_B(word2))			   /* signed */
25338 		{
25339 			if(GET_MSB_32(src))
25340 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
25341 			if(GET_MSB_32(dst))
25342 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
25343 		}
25344 
25345 		src1 = MASK_OUT_ABOVE_16(src);
25346 		src2 = src>>16;
25347 		dst1 = MASK_OUT_ABOVE_16(dst);
25348 		dst2 = dst>>16;
25349 
25350 
25351 		r1 = src1 * dst1;
25352 		r2 = src1 * dst2;
25353 		r3 = src2 * dst1;
25354 		r4 = src2 * dst2;
25355 
25356 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
25357 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
25358 
25359 		if(BIT_B(word2) && neg)
25360 		{
25361 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
25362 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
25363 		}
25364 
25365 		if(BIT_A(word2))
25366 		{
25367 			REG_D[word2 & 7] = hi;
25368 			REG_D[(word2 >> 12) & 7] = lo;
25369 			FLAG_N = NFLAG_32(hi);
25370 			FLAG_Z = hi | lo;
25371 			FLAG_V = VFLAG_CLEAR;
25372 			return;
25373 		}
25374 
25375 		REG_D[(word2 >> 12) & 7] = lo;
25376 		FLAG_N = NFLAG_32(lo);
25377 		FLAG_Z = lo;
25378 		if(BIT_B(word2))
25379 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
25380 		else
25381 			FLAG_V = (hi != 0) << 7;
25382 		return;
25383 	}
25384 	m68ki_exception_illegal();
25385 
25386 #endif
25387 }
25388 
25389 
m68k_op_mull_32_pcix(void)25390 static void m68k_op_mull_32_pcix(void)
25391 {
25392 #if M68K_USE_64_BIT
25393 
25394 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
25395 	{
25396 		uint word2 = OPER_I_16();
25397 		uint64 src = OPER_PCIX_32();
25398 		uint64 dst = REG_D[(word2 >> 12) & 7];
25399 		uint64 res;
25400 
25401 		FLAG_C = CFLAG_CLEAR;
25402 
25403 		if(BIT_B(word2))			   /* signed */
25404 		{
25405 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
25406 			if(!BIT_A(word2))
25407 			{
25408 				FLAG_Z = MASK_OUT_ABOVE_32(res);
25409 				FLAG_N = NFLAG_32(res);
25410 				FLAG_V = ((sint64)res != (sint32)res)<<7;
25411 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
25412 				return;
25413 			}
25414 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
25415 			FLAG_N = NFLAG_64(res);
25416 			FLAG_V = VFLAG_CLEAR;
25417 			REG_D[word2 & 7] = (res >> 32);
25418 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
25419 			return;
25420 		}
25421 
25422 		res = src * dst;
25423 		if(!BIT_A(word2))
25424 		{
25425 			FLAG_Z = MASK_OUT_ABOVE_32(res);
25426 			FLAG_N = NFLAG_32(res);
25427 			FLAG_V = (res > 0xffffffff)<<7;
25428 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
25429 			return;
25430 		}
25431 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
25432 		FLAG_N = NFLAG_64(res);
25433 		FLAG_V = VFLAG_CLEAR;
25434 		REG_D[word2 & 7] = (res >> 32);
25435 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
25436 		return;
25437 	}
25438 	m68ki_exception_illegal();
25439 
25440 #else
25441 
25442 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
25443 	{
25444 		uint word2 = OPER_I_16();
25445 		uint src = OPER_PCIX_32();
25446 		uint dst = REG_D[(word2 >> 12) & 7];
25447 		uint neg = GET_MSB_32(src ^ dst);
25448 		uint src1;
25449 		uint src2;
25450 		uint dst1;
25451 		uint dst2;
25452 		uint r1;
25453 		uint r2;
25454 		uint r3;
25455 		uint r4;
25456 		uint lo;
25457 		uint hi;
25458 
25459 		FLAG_C = CFLAG_CLEAR;
25460 
25461 		if(BIT_B(word2))			   /* signed */
25462 		{
25463 			if(GET_MSB_32(src))
25464 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
25465 			if(GET_MSB_32(dst))
25466 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
25467 		}
25468 
25469 		src1 = MASK_OUT_ABOVE_16(src);
25470 		src2 = src>>16;
25471 		dst1 = MASK_OUT_ABOVE_16(dst);
25472 		dst2 = dst>>16;
25473 
25474 
25475 		r1 = src1 * dst1;
25476 		r2 = src1 * dst2;
25477 		r3 = src2 * dst1;
25478 		r4 = src2 * dst2;
25479 
25480 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
25481 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
25482 
25483 		if(BIT_B(word2) && neg)
25484 		{
25485 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
25486 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
25487 		}
25488 
25489 		if(BIT_A(word2))
25490 		{
25491 			REG_D[word2 & 7] = hi;
25492 			REG_D[(word2 >> 12) & 7] = lo;
25493 			FLAG_N = NFLAG_32(hi);
25494 			FLAG_Z = hi | lo;
25495 			FLAG_V = VFLAG_CLEAR;
25496 			return;
25497 		}
25498 
25499 		REG_D[(word2 >> 12) & 7] = lo;
25500 		FLAG_N = NFLAG_32(lo);
25501 		FLAG_Z = lo;
25502 		if(BIT_B(word2))
25503 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
25504 		else
25505 			FLAG_V = (hi != 0) << 7;
25506 		return;
25507 	}
25508 	m68ki_exception_illegal();
25509 
25510 #endif
25511 }
25512 
25513 
m68k_op_mull_32_i(void)25514 static void m68k_op_mull_32_i(void)
25515 {
25516 #if M68K_USE_64_BIT
25517 
25518 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
25519 	{
25520 		uint word2 = OPER_I_16();
25521 		uint64 src = OPER_I_32();
25522 		uint64 dst = REG_D[(word2 >> 12) & 7];
25523 		uint64 res;
25524 
25525 		FLAG_C = CFLAG_CLEAR;
25526 
25527 		if(BIT_B(word2))			   /* signed */
25528 		{
25529 			res = (sint64)((sint32)src) * (sint64)((sint32)dst);
25530 			if(!BIT_A(word2))
25531 			{
25532 				FLAG_Z = MASK_OUT_ABOVE_32(res);
25533 				FLAG_N = NFLAG_32(res);
25534 				FLAG_V = ((sint64)res != (sint32)res)<<7;
25535 				REG_D[(word2 >> 12) & 7] = FLAG_Z;
25536 				return;
25537 			}
25538 			FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
25539 			FLAG_N = NFLAG_64(res);
25540 			FLAG_V = VFLAG_CLEAR;
25541 			REG_D[word2 & 7] = (res >> 32);
25542 			REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
25543 			return;
25544 		}
25545 
25546 		res = src * dst;
25547 		if(!BIT_A(word2))
25548 		{
25549 			FLAG_Z = MASK_OUT_ABOVE_32(res);
25550 			FLAG_N = NFLAG_32(res);
25551 			FLAG_V = (res > 0xffffffff)<<7;
25552 			REG_D[(word2 >> 12) & 7] = FLAG_Z;
25553 			return;
25554 		}
25555 		FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
25556 		FLAG_N = NFLAG_64(res);
25557 		FLAG_V = VFLAG_CLEAR;
25558 		REG_D[word2 & 7] = (res >> 32);
25559 		REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
25560 		return;
25561 	}
25562 	m68ki_exception_illegal();
25563 
25564 #else
25565 
25566 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
25567 	{
25568 		uint word2 = OPER_I_16();
25569 		uint src = OPER_I_32();
25570 		uint dst = REG_D[(word2 >> 12) & 7];
25571 		uint neg = GET_MSB_32(src ^ dst);
25572 		uint src1;
25573 		uint src2;
25574 		uint dst1;
25575 		uint dst2;
25576 		uint r1;
25577 		uint r2;
25578 		uint r3;
25579 		uint r4;
25580 		uint lo;
25581 		uint hi;
25582 
25583 		FLAG_C = CFLAG_CLEAR;
25584 
25585 		if(BIT_B(word2))			   /* signed */
25586 		{
25587 			if(GET_MSB_32(src))
25588 				src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
25589 			if(GET_MSB_32(dst))
25590 				dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
25591 		}
25592 
25593 		src1 = MASK_OUT_ABOVE_16(src);
25594 		src2 = src>>16;
25595 		dst1 = MASK_OUT_ABOVE_16(dst);
25596 		dst2 = dst>>16;
25597 
25598 
25599 		r1 = src1 * dst1;
25600 		r2 = src1 * dst2;
25601 		r3 = src2 * dst1;
25602 		r4 = src2 * dst2;
25603 
25604 		lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
25605 		hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
25606 
25607 		if(BIT_B(word2) && neg)
25608 		{
25609 			hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
25610 			lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
25611 		}
25612 
25613 		if(BIT_A(word2))
25614 		{
25615 			REG_D[word2 & 7] = hi;
25616 			REG_D[(word2 >> 12) & 7] = lo;
25617 			FLAG_N = NFLAG_32(hi);
25618 			FLAG_Z = hi | lo;
25619 			FLAG_V = VFLAG_CLEAR;
25620 			return;
25621 		}
25622 
25623 		REG_D[(word2 >> 12) & 7] = lo;
25624 		FLAG_N = NFLAG_32(lo);
25625 		FLAG_Z = lo;
25626 		if(BIT_B(word2))
25627 			FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
25628 		else
25629 			FLAG_V = (hi != 0) << 7;
25630 		return;
25631 	}
25632 	m68ki_exception_illegal();
25633 
25634 #endif
25635 }
25636 
25637 
m68k_op_nbcd_8_d(void)25638 static void m68k_op_nbcd_8_d(void)
25639 {
25640 	uint* r_dst = &DY;
25641 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
25642 	uint res = -dst - XFLAG_AS_1();
25643 
25644 	if(res != 0)
25645 	{
25646 		FLAG_V = res; /* Undefined V behavior */
25647 
25648 		if(((res|dst) & 0x0f) == 0)
25649 			res = (res & 0xf0) | 6;
25650 
25651 		res = MASK_OUT_ABOVE_8(res + 0x9a);
25652 
25653 		FLAG_V &= ~res; /* Undefined V behavior part II */
25654 
25655 		*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
25656 
25657 		FLAG_Z |= res;
25658 		FLAG_C = CFLAG_SET;
25659 		FLAG_X = XFLAG_SET;
25660 	}
25661 	else
25662 	{
25663 		FLAG_V = VFLAG_CLEAR;
25664 		FLAG_C = CFLAG_CLEAR;
25665 		FLAG_X = XFLAG_CLEAR;
25666 	}
25667 	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
25668 }
25669 
25670 
m68k_op_nbcd_8_ai(void)25671 static void m68k_op_nbcd_8_ai(void)
25672 {
25673 	uint ea = EA_AY_AI_8();
25674 	uint dst = m68ki_read_8(ea);
25675 	uint res = -dst - XFLAG_AS_1();
25676 
25677 	if(res != 0)
25678 	{
25679 		FLAG_V = res; /* Undefined V behavior */
25680 
25681 		if(((res|dst) & 0x0f) == 0)
25682 			res = (res & 0xf0) | 6;
25683 
25684 		res = MASK_OUT_ABOVE_8(res + 0x9a);
25685 
25686 		FLAG_V &= ~res; /* Undefined V behavior part II */
25687 
25688 		m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
25689 
25690 		FLAG_Z |= res;
25691 		FLAG_C = CFLAG_SET;
25692 		FLAG_X = XFLAG_SET;
25693 	}
25694 	else
25695 	{
25696 		FLAG_V = VFLAG_CLEAR;
25697 		FLAG_C = CFLAG_CLEAR;
25698 		FLAG_X = XFLAG_CLEAR;
25699 	}
25700 	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
25701 }
25702 
25703 
m68k_op_nbcd_8_pi(void)25704 static void m68k_op_nbcd_8_pi(void)
25705 {
25706 	uint ea = EA_AY_PI_8();
25707 	uint dst = m68ki_read_8(ea);
25708 	uint res = -dst - XFLAG_AS_1();
25709 
25710 	if(res != 0)
25711 	{
25712 		FLAG_V = res; /* Undefined V behavior */
25713 
25714 		if(((res|dst) & 0x0f) == 0)
25715 			res = (res & 0xf0) | 6;
25716 
25717 		res = MASK_OUT_ABOVE_8(res + 0x9a);
25718 
25719 		FLAG_V &= ~res; /* Undefined V behavior part II */
25720 
25721 		m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
25722 
25723 		FLAG_Z |= res;
25724 		FLAG_C = CFLAG_SET;
25725 		FLAG_X = XFLAG_SET;
25726 	}
25727 	else
25728 	{
25729 		FLAG_V = VFLAG_CLEAR;
25730 		FLAG_C = CFLAG_CLEAR;
25731 		FLAG_X = XFLAG_CLEAR;
25732 	}
25733 	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
25734 }
25735 
25736 
m68k_op_nbcd_8_pi7(void)25737 static void m68k_op_nbcd_8_pi7(void)
25738 {
25739 	uint ea = EA_A7_PI_8();
25740 	uint dst = m68ki_read_8(ea);
25741 	uint res = -dst - XFLAG_AS_1();
25742 
25743 	if(res != 0)
25744 	{
25745 		FLAG_V = res; /* Undefined V behavior */
25746 
25747 		if(((res|dst) & 0x0f) == 0)
25748 			res = (res & 0xf0) | 6;
25749 
25750 		res = MASK_OUT_ABOVE_8(res + 0x9a);
25751 
25752 		FLAG_V &= ~res; /* Undefined V behavior part II */
25753 
25754 		m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
25755 
25756 		FLAG_Z |= res;
25757 		FLAG_C = CFLAG_SET;
25758 		FLAG_X = XFLAG_SET;
25759 	}
25760 	else
25761 	{
25762 		FLAG_V = VFLAG_CLEAR;
25763 		FLAG_C = CFLAG_CLEAR;
25764 		FLAG_X = XFLAG_CLEAR;
25765 	}
25766 	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
25767 }
25768 
25769 
m68k_op_nbcd_8_pd(void)25770 static void m68k_op_nbcd_8_pd(void)
25771 {
25772 	uint ea = EA_AY_PD_8();
25773 	uint dst = m68ki_read_8(ea);
25774 	uint res = -dst - XFLAG_AS_1();
25775 
25776 	if(res != 0)
25777 	{
25778 		FLAG_V = res; /* Undefined V behavior */
25779 
25780 		if(((res|dst) & 0x0f) == 0)
25781 			res = (res & 0xf0) | 6;
25782 
25783 		res = MASK_OUT_ABOVE_8(res + 0x9a);
25784 
25785 		FLAG_V &= ~res; /* Undefined V behavior part II */
25786 
25787 		m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
25788 
25789 		FLAG_Z |= res;
25790 		FLAG_C = CFLAG_SET;
25791 		FLAG_X = XFLAG_SET;
25792 	}
25793 	else
25794 	{
25795 		FLAG_V = VFLAG_CLEAR;
25796 		FLAG_C = CFLAG_CLEAR;
25797 		FLAG_X = XFLAG_CLEAR;
25798 	}
25799 	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
25800 }
25801 
25802 
m68k_op_nbcd_8_pd7(void)25803 static void m68k_op_nbcd_8_pd7(void)
25804 {
25805 	uint ea = EA_A7_PD_8();
25806 	uint dst = m68ki_read_8(ea);
25807 	uint res = -dst - XFLAG_AS_1();
25808 
25809 	if(res != 0)
25810 	{
25811 		FLAG_V = res; /* Undefined V behavior */
25812 
25813 		if(((res|dst) & 0x0f) == 0)
25814 			res = (res & 0xf0) | 6;
25815 
25816 		res = MASK_OUT_ABOVE_8(res + 0x9a);
25817 
25818 		FLAG_V &= ~res; /* Undefined V behavior part II */
25819 
25820 		m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
25821 
25822 		FLAG_Z |= res;
25823 		FLAG_C = CFLAG_SET;
25824 		FLAG_X = XFLAG_SET;
25825 	}
25826 	else
25827 	{
25828 		FLAG_V = VFLAG_CLEAR;
25829 		FLAG_C = CFLAG_CLEAR;
25830 		FLAG_X = XFLAG_CLEAR;
25831 	}
25832 	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
25833 }
25834 
25835 
m68k_op_nbcd_8_di(void)25836 static void m68k_op_nbcd_8_di(void)
25837 {
25838 	uint ea = EA_AY_DI_8();
25839 	uint dst = m68ki_read_8(ea);
25840 	uint res = -dst - XFLAG_AS_1();
25841 
25842 	if(res != 0)
25843 	{
25844 		FLAG_V = res; /* Undefined V behavior */
25845 
25846 		if(((res|dst) & 0x0f) == 0)
25847 			res = (res & 0xf0) | 6;
25848 
25849 		res = MASK_OUT_ABOVE_8(res + 0x9a);
25850 
25851 		FLAG_V &= ~res; /* Undefined V behavior part II */
25852 
25853 		m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
25854 
25855 		FLAG_Z |= res;
25856 		FLAG_C = CFLAG_SET;
25857 		FLAG_X = XFLAG_SET;
25858 	}
25859 	else
25860 	{
25861 		FLAG_V = VFLAG_CLEAR;
25862 		FLAG_C = CFLAG_CLEAR;
25863 		FLAG_X = XFLAG_CLEAR;
25864 	}
25865 	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
25866 }
25867 
25868 
m68k_op_nbcd_8_ix(void)25869 static void m68k_op_nbcd_8_ix(void)
25870 {
25871 	uint ea = EA_AY_IX_8();
25872 	uint dst = m68ki_read_8(ea);
25873 	uint res = -dst - XFLAG_AS_1();
25874 
25875 	if(res != 0)
25876 	{
25877 		FLAG_V = res; /* Undefined V behavior */
25878 
25879 		if(((res|dst) & 0x0f) == 0)
25880 			res = (res & 0xf0) | 6;
25881 
25882 		res = MASK_OUT_ABOVE_8(res + 0x9a);
25883 
25884 		FLAG_V &= ~res; /* Undefined V behavior part II */
25885 
25886 		m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
25887 
25888 		FLAG_Z |= res;
25889 		FLAG_C = CFLAG_SET;
25890 		FLAG_X = XFLAG_SET;
25891 	}
25892 	else
25893 	{
25894 		FLAG_V = VFLAG_CLEAR;
25895 		FLAG_C = CFLAG_CLEAR;
25896 		FLAG_X = XFLAG_CLEAR;
25897 	}
25898 	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
25899 }
25900 
25901 
m68k_op_nbcd_8_aw(void)25902 static void m68k_op_nbcd_8_aw(void)
25903 {
25904 	uint ea = EA_AW_8();
25905 	uint dst = m68ki_read_8(ea);
25906 	uint res = -dst - XFLAG_AS_1();
25907 
25908 	if(res != 0)
25909 	{
25910 		FLAG_V = res; /* Undefined V behavior */
25911 
25912 		if(((res|dst) & 0x0f) == 0)
25913 			res = (res & 0xf0) | 6;
25914 
25915 		res = MASK_OUT_ABOVE_8(res + 0x9a);
25916 
25917 		FLAG_V &= ~res; /* Undefined V behavior part II */
25918 
25919 		m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
25920 
25921 		FLAG_Z |= res;
25922 		FLAG_C = CFLAG_SET;
25923 		FLAG_X = XFLAG_SET;
25924 	}
25925 	else
25926 	{
25927 		FLAG_V = VFLAG_CLEAR;
25928 		FLAG_C = CFLAG_CLEAR;
25929 		FLAG_X = XFLAG_CLEAR;
25930 	}
25931 	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
25932 }
25933 
25934 
m68k_op_nbcd_8_al(void)25935 static void m68k_op_nbcd_8_al(void)
25936 {
25937 	uint ea = EA_AL_8();
25938 	uint dst = m68ki_read_8(ea);
25939 	uint res = -dst - XFLAG_AS_1();
25940 
25941 	if(res != 0)
25942 	{
25943 		FLAG_V = res; /* Undefined V behavior */
25944 
25945 		if(((res|dst) & 0x0f) == 0)
25946 			res = (res & 0xf0) | 6;
25947 
25948 		res = MASK_OUT_ABOVE_8(res + 0x9a);
25949 
25950 		FLAG_V &= ~res; /* Undefined V behavior part II */
25951 
25952 		m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
25953 
25954 		FLAG_Z |= res;
25955 		FLAG_C = CFLAG_SET;
25956 		FLAG_X = XFLAG_SET;
25957 	}
25958 	else
25959 	{
25960 		FLAG_V = VFLAG_CLEAR;
25961 		FLAG_C = CFLAG_CLEAR;
25962 		FLAG_X = XFLAG_CLEAR;
25963 	}
25964 	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
25965 }
25966 
25967 
m68k_op_neg_8_d(void)25968 static void m68k_op_neg_8_d(void)
25969 {
25970 	uint* r_dst = &DY;
25971 	uint res = 0 - MASK_OUT_ABOVE_8(*r_dst);
25972 
25973 	FLAG_N = NFLAG_8(res);
25974 	FLAG_C = FLAG_X = CFLAG_8(res);
25975 	FLAG_V = *r_dst & res;
25976 	FLAG_Z = MASK_OUT_ABOVE_8(res);
25977 
25978 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
25979 }
25980 
25981 
m68k_op_neg_8_ai(void)25982 static void m68k_op_neg_8_ai(void)
25983 {
25984 	uint ea = EA_AY_AI_8();
25985 	uint src = m68ki_read_8(ea);
25986 	uint res = 0 - src;
25987 
25988 	FLAG_N = NFLAG_8(res);
25989 	FLAG_C = FLAG_X = CFLAG_8(res);
25990 	FLAG_V = src & res;
25991 	FLAG_Z = MASK_OUT_ABOVE_8(res);
25992 
25993 	m68ki_write_8(ea, FLAG_Z);
25994 }
25995 
25996 
m68k_op_neg_8_pi(void)25997 static void m68k_op_neg_8_pi(void)
25998 {
25999 	uint ea = EA_AY_PI_8();
26000 	uint src = m68ki_read_8(ea);
26001 	uint res = 0 - src;
26002 
26003 	FLAG_N = NFLAG_8(res);
26004 	FLAG_C = FLAG_X = CFLAG_8(res);
26005 	FLAG_V = src & res;
26006 	FLAG_Z = MASK_OUT_ABOVE_8(res);
26007 
26008 	m68ki_write_8(ea, FLAG_Z);
26009 }
26010 
26011 
m68k_op_neg_8_pi7(void)26012 static void m68k_op_neg_8_pi7(void)
26013 {
26014 	uint ea = EA_A7_PI_8();
26015 	uint src = m68ki_read_8(ea);
26016 	uint res = 0 - src;
26017 
26018 	FLAG_N = NFLAG_8(res);
26019 	FLAG_C = FLAG_X = CFLAG_8(res);
26020 	FLAG_V = src & res;
26021 	FLAG_Z = MASK_OUT_ABOVE_8(res);
26022 
26023 	m68ki_write_8(ea, FLAG_Z);
26024 }
26025 
26026 
m68k_op_neg_8_pd(void)26027 static void m68k_op_neg_8_pd(void)
26028 {
26029 	uint ea = EA_AY_PD_8();
26030 	uint src = m68ki_read_8(ea);
26031 	uint res = 0 - src;
26032 
26033 	FLAG_N = NFLAG_8(res);
26034 	FLAG_C = FLAG_X = CFLAG_8(res);
26035 	FLAG_V = src & res;
26036 	FLAG_Z = MASK_OUT_ABOVE_8(res);
26037 
26038 	m68ki_write_8(ea, FLAG_Z);
26039 }
26040 
26041 
m68k_op_neg_8_pd7(void)26042 static void m68k_op_neg_8_pd7(void)
26043 {
26044 	uint ea = EA_A7_PD_8();
26045 	uint src = m68ki_read_8(ea);
26046 	uint res = 0 - src;
26047 
26048 	FLAG_N = NFLAG_8(res);
26049 	FLAG_C = FLAG_X = CFLAG_8(res);
26050 	FLAG_V = src & res;
26051 	FLAG_Z = MASK_OUT_ABOVE_8(res);
26052 
26053 	m68ki_write_8(ea, FLAG_Z);
26054 }
26055 
26056 
m68k_op_neg_8_di(void)26057 static void m68k_op_neg_8_di(void)
26058 {
26059 	uint ea = EA_AY_DI_8();
26060 	uint src = m68ki_read_8(ea);
26061 	uint res = 0 - src;
26062 
26063 	FLAG_N = NFLAG_8(res);
26064 	FLAG_C = FLAG_X = CFLAG_8(res);
26065 	FLAG_V = src & res;
26066 	FLAG_Z = MASK_OUT_ABOVE_8(res);
26067 
26068 	m68ki_write_8(ea, FLAG_Z);
26069 }
26070 
26071 
m68k_op_neg_8_ix(void)26072 static void m68k_op_neg_8_ix(void)
26073 {
26074 	uint ea = EA_AY_IX_8();
26075 	uint src = m68ki_read_8(ea);
26076 	uint res = 0 - src;
26077 
26078 	FLAG_N = NFLAG_8(res);
26079 	FLAG_C = FLAG_X = CFLAG_8(res);
26080 	FLAG_V = src & res;
26081 	FLAG_Z = MASK_OUT_ABOVE_8(res);
26082 
26083 	m68ki_write_8(ea, FLAG_Z);
26084 }
26085 
26086 
m68k_op_neg_8_aw(void)26087 static void m68k_op_neg_8_aw(void)
26088 {
26089 	uint ea = EA_AW_8();
26090 	uint src = m68ki_read_8(ea);
26091 	uint res = 0 - src;
26092 
26093 	FLAG_N = NFLAG_8(res);
26094 	FLAG_C = FLAG_X = CFLAG_8(res);
26095 	FLAG_V = src & res;
26096 	FLAG_Z = MASK_OUT_ABOVE_8(res);
26097 
26098 	m68ki_write_8(ea, FLAG_Z);
26099 }
26100 
26101 
m68k_op_neg_8_al(void)26102 static void m68k_op_neg_8_al(void)
26103 {
26104 	uint ea = EA_AL_8();
26105 	uint src = m68ki_read_8(ea);
26106 	uint res = 0 - src;
26107 
26108 	FLAG_N = NFLAG_8(res);
26109 	FLAG_C = FLAG_X = CFLAG_8(res);
26110 	FLAG_V = src & res;
26111 	FLAG_Z = MASK_OUT_ABOVE_8(res);
26112 
26113 	m68ki_write_8(ea, FLAG_Z);
26114 }
26115 
26116 
m68k_op_neg_16_d(void)26117 static void m68k_op_neg_16_d(void)
26118 {
26119 	uint* r_dst = &DY;
26120 	uint res = 0 - MASK_OUT_ABOVE_16(*r_dst);
26121 
26122 	FLAG_N = NFLAG_16(res);
26123 	FLAG_C = FLAG_X = CFLAG_16(res);
26124 	FLAG_V = (*r_dst & res)>>8;
26125 	FLAG_Z = MASK_OUT_ABOVE_16(res);
26126 
26127 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
26128 }
26129 
26130 
m68k_op_neg_16_ai(void)26131 static void m68k_op_neg_16_ai(void)
26132 {
26133 	uint ea = EA_AY_AI_16();
26134 	uint src = m68ki_read_16(ea);
26135 	uint res = 0 - src;
26136 
26137 	FLAG_N = NFLAG_16(res);
26138 	FLAG_C = FLAG_X = CFLAG_16(res);
26139 	FLAG_V = (src & res)>>8;
26140 	FLAG_Z = MASK_OUT_ABOVE_16(res);
26141 
26142 	m68ki_write_16(ea, FLAG_Z);
26143 }
26144 
26145 
m68k_op_neg_16_pi(void)26146 static void m68k_op_neg_16_pi(void)
26147 {
26148 	uint ea = EA_AY_PI_16();
26149 	uint src = m68ki_read_16(ea);
26150 	uint res = 0 - src;
26151 
26152 	FLAG_N = NFLAG_16(res);
26153 	FLAG_C = FLAG_X = CFLAG_16(res);
26154 	FLAG_V = (src & res)>>8;
26155 	FLAG_Z = MASK_OUT_ABOVE_16(res);
26156 
26157 	m68ki_write_16(ea, FLAG_Z);
26158 }
26159 
26160 
m68k_op_neg_16_pd(void)26161 static void m68k_op_neg_16_pd(void)
26162 {
26163 	uint ea = EA_AY_PD_16();
26164 	uint src = m68ki_read_16(ea);
26165 	uint res = 0 - src;
26166 
26167 	FLAG_N = NFLAG_16(res);
26168 	FLAG_C = FLAG_X = CFLAG_16(res);
26169 	FLAG_V = (src & res)>>8;
26170 	FLAG_Z = MASK_OUT_ABOVE_16(res);
26171 
26172 	m68ki_write_16(ea, FLAG_Z);
26173 }
26174 
26175 
m68k_op_neg_16_di(void)26176 static void m68k_op_neg_16_di(void)
26177 {
26178 	uint ea = EA_AY_DI_16();
26179 	uint src = m68ki_read_16(ea);
26180 	uint res = 0 - src;
26181 
26182 	FLAG_N = NFLAG_16(res);
26183 	FLAG_C = FLAG_X = CFLAG_16(res);
26184 	FLAG_V = (src & res)>>8;
26185 	FLAG_Z = MASK_OUT_ABOVE_16(res);
26186 
26187 	m68ki_write_16(ea, FLAG_Z);
26188 }
26189 
26190 
m68k_op_neg_16_ix(void)26191 static void m68k_op_neg_16_ix(void)
26192 {
26193 	uint ea = EA_AY_IX_16();
26194 	uint src = m68ki_read_16(ea);
26195 	uint res = 0 - src;
26196 
26197 	FLAG_N = NFLAG_16(res);
26198 	FLAG_C = FLAG_X = CFLAG_16(res);
26199 	FLAG_V = (src & res)>>8;
26200 	FLAG_Z = MASK_OUT_ABOVE_16(res);
26201 
26202 	m68ki_write_16(ea, FLAG_Z);
26203 }
26204 
26205 
m68k_op_neg_16_aw(void)26206 static void m68k_op_neg_16_aw(void)
26207 {
26208 	uint ea = EA_AW_16();
26209 	uint src = m68ki_read_16(ea);
26210 	uint res = 0 - src;
26211 
26212 	FLAG_N = NFLAG_16(res);
26213 	FLAG_C = FLAG_X = CFLAG_16(res);
26214 	FLAG_V = (src & res)>>8;
26215 	FLAG_Z = MASK_OUT_ABOVE_16(res);
26216 
26217 	m68ki_write_16(ea, FLAG_Z);
26218 }
26219 
26220 
m68k_op_neg_16_al(void)26221 static void m68k_op_neg_16_al(void)
26222 {
26223 	uint ea = EA_AL_16();
26224 	uint src = m68ki_read_16(ea);
26225 	uint res = 0 - src;
26226 
26227 	FLAG_N = NFLAG_16(res);
26228 	FLAG_C = FLAG_X = CFLAG_16(res);
26229 	FLAG_V = (src & res)>>8;
26230 	FLAG_Z = MASK_OUT_ABOVE_16(res);
26231 
26232 	m68ki_write_16(ea, FLAG_Z);
26233 }
26234 
26235 
m68k_op_neg_32_d(void)26236 static void m68k_op_neg_32_d(void)
26237 {
26238 	uint* r_dst = &DY;
26239 	uint res = 0 - *r_dst;
26240 
26241 	FLAG_N = NFLAG_32(res);
26242 	FLAG_C = FLAG_X = CFLAG_SUB_32(*r_dst, 0, res);
26243 	FLAG_V = (*r_dst & res)>>24;
26244 	FLAG_Z = MASK_OUT_ABOVE_32(res);
26245 
26246 	*r_dst = FLAG_Z;
26247 }
26248 
26249 
m68k_op_neg_32_ai(void)26250 static void m68k_op_neg_32_ai(void)
26251 {
26252 	uint ea = EA_AY_AI_32();
26253 	uint src = m68ki_read_32(ea);
26254 	uint res = 0 - src;
26255 
26256 	FLAG_N = NFLAG_32(res);
26257 	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
26258 	FLAG_V = (src & res)>>24;
26259 	FLAG_Z = MASK_OUT_ABOVE_32(res);
26260 
26261 	m68ki_write_32(ea, FLAG_Z);
26262 }
26263 
26264 
m68k_op_neg_32_pi(void)26265 static void m68k_op_neg_32_pi(void)
26266 {
26267 	uint ea = EA_AY_PI_32();
26268 	uint src = m68ki_read_32(ea);
26269 	uint res = 0 - src;
26270 
26271 	FLAG_N = NFLAG_32(res);
26272 	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
26273 	FLAG_V = (src & res)>>24;
26274 	FLAG_Z = MASK_OUT_ABOVE_32(res);
26275 
26276 	m68ki_write_32(ea, FLAG_Z);
26277 }
26278 
26279 
m68k_op_neg_32_pd(void)26280 static void m68k_op_neg_32_pd(void)
26281 {
26282 	uint ea = EA_AY_PD_32();
26283 	uint src = m68ki_read_32(ea);
26284 	uint res = 0 - src;
26285 
26286 	FLAG_N = NFLAG_32(res);
26287 	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
26288 	FLAG_V = (src & res)>>24;
26289 	FLAG_Z = MASK_OUT_ABOVE_32(res);
26290 
26291 	m68ki_write_32(ea, FLAG_Z);
26292 }
26293 
26294 
m68k_op_neg_32_di(void)26295 static void m68k_op_neg_32_di(void)
26296 {
26297 	uint ea = EA_AY_DI_32();
26298 	uint src = m68ki_read_32(ea);
26299 	uint res = 0 - src;
26300 
26301 	FLAG_N = NFLAG_32(res);
26302 	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
26303 	FLAG_V = (src & res)>>24;
26304 	FLAG_Z = MASK_OUT_ABOVE_32(res);
26305 
26306 	m68ki_write_32(ea, FLAG_Z);
26307 }
26308 
26309 
m68k_op_neg_32_ix(void)26310 static void m68k_op_neg_32_ix(void)
26311 {
26312 	uint ea = EA_AY_IX_32();
26313 	uint src = m68ki_read_32(ea);
26314 	uint res = 0 - src;
26315 
26316 	FLAG_N = NFLAG_32(res);
26317 	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
26318 	FLAG_V = (src & res)>>24;
26319 	FLAG_Z = MASK_OUT_ABOVE_32(res);
26320 
26321 	m68ki_write_32(ea, FLAG_Z);
26322 }
26323 
26324 
m68k_op_neg_32_aw(void)26325 static void m68k_op_neg_32_aw(void)
26326 {
26327 	uint ea = EA_AW_32();
26328 	uint src = m68ki_read_32(ea);
26329 	uint res = 0 - src;
26330 
26331 	FLAG_N = NFLAG_32(res);
26332 	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
26333 	FLAG_V = (src & res)>>24;
26334 	FLAG_Z = MASK_OUT_ABOVE_32(res);
26335 
26336 	m68ki_write_32(ea, FLAG_Z);
26337 }
26338 
26339 
m68k_op_neg_32_al(void)26340 static void m68k_op_neg_32_al(void)
26341 {
26342 	uint ea = EA_AL_32();
26343 	uint src = m68ki_read_32(ea);
26344 	uint res = 0 - src;
26345 
26346 	FLAG_N = NFLAG_32(res);
26347 	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
26348 	FLAG_V = (src & res)>>24;
26349 	FLAG_Z = MASK_OUT_ABOVE_32(res);
26350 
26351 	m68ki_write_32(ea, FLAG_Z);
26352 }
26353 
26354 
m68k_op_negx_8_d(void)26355 static void m68k_op_negx_8_d(void)
26356 {
26357 	uint* r_dst = &DY;
26358 	uint res = 0 - MASK_OUT_ABOVE_8(*r_dst) - XFLAG_AS_1();
26359 
26360 	FLAG_N = NFLAG_8(res);
26361 	FLAG_X = FLAG_C = CFLAG_8(res);
26362 	FLAG_V = *r_dst & res;
26363 
26364 	res = MASK_OUT_ABOVE_8(res);
26365 	FLAG_Z |= res;
26366 
26367 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
26368 }
26369 
26370 
m68k_op_negx_8_ai(void)26371 static void m68k_op_negx_8_ai(void)
26372 {
26373 	uint ea = EA_AY_AI_8();
26374 	uint src = m68ki_read_8(ea);
26375 	uint res = 0 - src - XFLAG_AS_1();
26376 
26377 	FLAG_N = NFLAG_8(res);
26378 	FLAG_X = FLAG_C = CFLAG_8(res);
26379 	FLAG_V = src & res;
26380 
26381 	res = MASK_OUT_ABOVE_8(res);
26382 	FLAG_Z |= res;
26383 
26384 	m68ki_write_8(ea, res);
26385 }
26386 
26387 
m68k_op_negx_8_pi(void)26388 static void m68k_op_negx_8_pi(void)
26389 {
26390 	uint ea = EA_AY_PI_8();
26391 	uint src = m68ki_read_8(ea);
26392 	uint res = 0 - src - XFLAG_AS_1();
26393 
26394 	FLAG_N = NFLAG_8(res);
26395 	FLAG_X = FLAG_C = CFLAG_8(res);
26396 	FLAG_V = src & res;
26397 
26398 	res = MASK_OUT_ABOVE_8(res);
26399 	FLAG_Z |= res;
26400 
26401 	m68ki_write_8(ea, res);
26402 }
26403 
26404 
m68k_op_negx_8_pi7(void)26405 static void m68k_op_negx_8_pi7(void)
26406 {
26407 	uint ea = EA_A7_PI_8();
26408 	uint src = m68ki_read_8(ea);
26409 	uint res = 0 - src - XFLAG_AS_1();
26410 
26411 	FLAG_N = NFLAG_8(res);
26412 	FLAG_X = FLAG_C = CFLAG_8(res);
26413 	FLAG_V = src & res;
26414 
26415 	res = MASK_OUT_ABOVE_8(res);
26416 	FLAG_Z |= res;
26417 
26418 	m68ki_write_8(ea, res);
26419 }
26420 
26421 
m68k_op_negx_8_pd(void)26422 static void m68k_op_negx_8_pd(void)
26423 {
26424 	uint ea = EA_AY_PD_8();
26425 	uint src = m68ki_read_8(ea);
26426 	uint res = 0 - src - XFLAG_AS_1();
26427 
26428 	FLAG_N = NFLAG_8(res);
26429 	FLAG_X = FLAG_C = CFLAG_8(res);
26430 	FLAG_V = src & res;
26431 
26432 	res = MASK_OUT_ABOVE_8(res);
26433 	FLAG_Z |= res;
26434 
26435 	m68ki_write_8(ea, res);
26436 }
26437 
26438 
m68k_op_negx_8_pd7(void)26439 static void m68k_op_negx_8_pd7(void)
26440 {
26441 	uint ea = EA_A7_PD_8();
26442 	uint src = m68ki_read_8(ea);
26443 	uint res = 0 - src - XFLAG_AS_1();
26444 
26445 	FLAG_N = NFLAG_8(res);
26446 	FLAG_X = FLAG_C = CFLAG_8(res);
26447 	FLAG_V = src & res;
26448 
26449 	res = MASK_OUT_ABOVE_8(res);
26450 	FLAG_Z |= res;
26451 
26452 	m68ki_write_8(ea, res);
26453 }
26454 
26455 
m68k_op_negx_8_di(void)26456 static void m68k_op_negx_8_di(void)
26457 {
26458 	uint ea = EA_AY_DI_8();
26459 	uint src = m68ki_read_8(ea);
26460 	uint res = 0 - src - XFLAG_AS_1();
26461 
26462 	FLAG_N = NFLAG_8(res);
26463 	FLAG_X = FLAG_C = CFLAG_8(res);
26464 	FLAG_V = src & res;
26465 
26466 	res = MASK_OUT_ABOVE_8(res);
26467 	FLAG_Z |= res;
26468 
26469 	m68ki_write_8(ea, res);
26470 }
26471 
26472 
m68k_op_negx_8_ix(void)26473 static void m68k_op_negx_8_ix(void)
26474 {
26475 	uint ea = EA_AY_IX_8();
26476 	uint src = m68ki_read_8(ea);
26477 	uint res = 0 - src - XFLAG_AS_1();
26478 
26479 	FLAG_N = NFLAG_8(res);
26480 	FLAG_X = FLAG_C = CFLAG_8(res);
26481 	FLAG_V = src & res;
26482 
26483 	res = MASK_OUT_ABOVE_8(res);
26484 	FLAG_Z |= res;
26485 
26486 	m68ki_write_8(ea, res);
26487 }
26488 
26489 
m68k_op_negx_8_aw(void)26490 static void m68k_op_negx_8_aw(void)
26491 {
26492 	uint ea = EA_AW_8();
26493 	uint src = m68ki_read_8(ea);
26494 	uint res = 0 - src - XFLAG_AS_1();
26495 
26496 	FLAG_N = NFLAG_8(res);
26497 	FLAG_X = FLAG_C = CFLAG_8(res);
26498 	FLAG_V = src & res;
26499 
26500 	res = MASK_OUT_ABOVE_8(res);
26501 	FLAG_Z |= res;
26502 
26503 	m68ki_write_8(ea, res);
26504 }
26505 
26506 
m68k_op_negx_8_al(void)26507 static void m68k_op_negx_8_al(void)
26508 {
26509 	uint ea = EA_AL_8();
26510 	uint src = m68ki_read_8(ea);
26511 	uint res = 0 - src - XFLAG_AS_1();
26512 
26513 	FLAG_N = NFLAG_8(res);
26514 	FLAG_X = FLAG_C = CFLAG_8(res);
26515 	FLAG_V = src & res;
26516 
26517 	res = MASK_OUT_ABOVE_8(res);
26518 	FLAG_Z |= res;
26519 
26520 	m68ki_write_8(ea, res);
26521 }
26522 
26523 
m68k_op_negx_16_d(void)26524 static void m68k_op_negx_16_d(void)
26525 {
26526 	uint* r_dst = &DY;
26527 	uint res = 0 - MASK_OUT_ABOVE_16(*r_dst) - XFLAG_AS_1();
26528 
26529 	FLAG_N = NFLAG_16(res);
26530 	FLAG_X = FLAG_C = CFLAG_16(res);
26531 	FLAG_V = (*r_dst & res)>>8;
26532 
26533 	res = MASK_OUT_ABOVE_16(res);
26534 	FLAG_Z |= res;
26535 
26536 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
26537 }
26538 
26539 
m68k_op_negx_16_ai(void)26540 static void m68k_op_negx_16_ai(void)
26541 {
26542 	uint ea  = EA_AY_AI_16();
26543 	uint src = m68ki_read_16(ea);
26544 	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
26545 
26546 	FLAG_N = NFLAG_16(res);
26547 	FLAG_X = FLAG_C = CFLAG_16(res);
26548 	FLAG_V = (src & res)>>8;
26549 
26550 	res = MASK_OUT_ABOVE_16(res);
26551 	FLAG_Z |= res;
26552 
26553 	m68ki_write_16(ea, res);
26554 }
26555 
26556 
m68k_op_negx_16_pi(void)26557 static void m68k_op_negx_16_pi(void)
26558 {
26559 	uint ea  = EA_AY_PI_16();
26560 	uint src = m68ki_read_16(ea);
26561 	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
26562 
26563 	FLAG_N = NFLAG_16(res);
26564 	FLAG_X = FLAG_C = CFLAG_16(res);
26565 	FLAG_V = (src & res)>>8;
26566 
26567 	res = MASK_OUT_ABOVE_16(res);
26568 	FLAG_Z |= res;
26569 
26570 	m68ki_write_16(ea, res);
26571 }
26572 
26573 
m68k_op_negx_16_pd(void)26574 static void m68k_op_negx_16_pd(void)
26575 {
26576 	uint ea  = EA_AY_PD_16();
26577 	uint src = m68ki_read_16(ea);
26578 	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
26579 
26580 	FLAG_N = NFLAG_16(res);
26581 	FLAG_X = FLAG_C = CFLAG_16(res);
26582 	FLAG_V = (src & res)>>8;
26583 
26584 	res = MASK_OUT_ABOVE_16(res);
26585 	FLAG_Z |= res;
26586 
26587 	m68ki_write_16(ea, res);
26588 }
26589 
26590 
m68k_op_negx_16_di(void)26591 static void m68k_op_negx_16_di(void)
26592 {
26593 	uint ea  = EA_AY_DI_16();
26594 	uint src = m68ki_read_16(ea);
26595 	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
26596 
26597 	FLAG_N = NFLAG_16(res);
26598 	FLAG_X = FLAG_C = CFLAG_16(res);
26599 	FLAG_V = (src & res)>>8;
26600 
26601 	res = MASK_OUT_ABOVE_16(res);
26602 	FLAG_Z |= res;
26603 
26604 	m68ki_write_16(ea, res);
26605 }
26606 
26607 
m68k_op_negx_16_ix(void)26608 static void m68k_op_negx_16_ix(void)
26609 {
26610 	uint ea  = EA_AY_IX_16();
26611 	uint src = m68ki_read_16(ea);
26612 	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
26613 
26614 	FLAG_N = NFLAG_16(res);
26615 	FLAG_X = FLAG_C = CFLAG_16(res);
26616 	FLAG_V = (src & res)>>8;
26617 
26618 	res = MASK_OUT_ABOVE_16(res);
26619 	FLAG_Z |= res;
26620 
26621 	m68ki_write_16(ea, res);
26622 }
26623 
26624 
m68k_op_negx_16_aw(void)26625 static void m68k_op_negx_16_aw(void)
26626 {
26627 	uint ea  = EA_AW_16();
26628 	uint src = m68ki_read_16(ea);
26629 	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
26630 
26631 	FLAG_N = NFLAG_16(res);
26632 	FLAG_X = FLAG_C = CFLAG_16(res);
26633 	FLAG_V = (src & res)>>8;
26634 
26635 	res = MASK_OUT_ABOVE_16(res);
26636 	FLAG_Z |= res;
26637 
26638 	m68ki_write_16(ea, res);
26639 }
26640 
26641 
m68k_op_negx_16_al(void)26642 static void m68k_op_negx_16_al(void)
26643 {
26644 	uint ea  = EA_AL_16();
26645 	uint src = m68ki_read_16(ea);
26646 	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
26647 
26648 	FLAG_N = NFLAG_16(res);
26649 	FLAG_X = FLAG_C = CFLAG_16(res);
26650 	FLAG_V = (src & res)>>8;
26651 
26652 	res = MASK_OUT_ABOVE_16(res);
26653 	FLAG_Z |= res;
26654 
26655 	m68ki_write_16(ea, res);
26656 }
26657 
26658 
m68k_op_negx_32_d(void)26659 static void m68k_op_negx_32_d(void)
26660 {
26661 	uint* r_dst = &DY;
26662 	uint res = 0 - MASK_OUT_ABOVE_32(*r_dst) - XFLAG_AS_1();
26663 
26664 	FLAG_N = NFLAG_32(res);
26665 	FLAG_X = FLAG_C = CFLAG_SUB_32(*r_dst, 0, res);
26666 	FLAG_V = (*r_dst & res)>>24;
26667 
26668 	res = MASK_OUT_ABOVE_32(res);
26669 	FLAG_Z |= res;
26670 
26671 	*r_dst = res;
26672 }
26673 
26674 
m68k_op_negx_32_ai(void)26675 static void m68k_op_negx_32_ai(void)
26676 {
26677 	uint ea  = EA_AY_AI_32();
26678 	uint src = m68ki_read_32(ea);
26679 	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
26680 
26681 	FLAG_N = NFLAG_32(res);
26682 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
26683 	FLAG_V = (src & res)>>24;
26684 
26685 	res = MASK_OUT_ABOVE_32(res);
26686 	FLAG_Z |= res;
26687 
26688 	m68ki_write_32(ea, res);
26689 }
26690 
26691 
m68k_op_negx_32_pi(void)26692 static void m68k_op_negx_32_pi(void)
26693 {
26694 	uint ea  = EA_AY_PI_32();
26695 	uint src = m68ki_read_32(ea);
26696 	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
26697 
26698 	FLAG_N = NFLAG_32(res);
26699 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
26700 	FLAG_V = (src & res)>>24;
26701 
26702 	res = MASK_OUT_ABOVE_32(res);
26703 	FLAG_Z |= res;
26704 
26705 	m68ki_write_32(ea, res);
26706 }
26707 
26708 
m68k_op_negx_32_pd(void)26709 static void m68k_op_negx_32_pd(void)
26710 {
26711 	uint ea  = EA_AY_PD_32();
26712 	uint src = m68ki_read_32(ea);
26713 	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
26714 
26715 	FLAG_N = NFLAG_32(res);
26716 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
26717 	FLAG_V = (src & res)>>24;
26718 
26719 	res = MASK_OUT_ABOVE_32(res);
26720 	FLAG_Z |= res;
26721 
26722 	m68ki_write_32(ea, res);
26723 }
26724 
26725 
m68k_op_negx_32_di(void)26726 static void m68k_op_negx_32_di(void)
26727 {
26728 	uint ea  = EA_AY_DI_32();
26729 	uint src = m68ki_read_32(ea);
26730 	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
26731 
26732 	FLAG_N = NFLAG_32(res);
26733 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
26734 	FLAG_V = (src & res)>>24;
26735 
26736 	res = MASK_OUT_ABOVE_32(res);
26737 	FLAG_Z |= res;
26738 
26739 	m68ki_write_32(ea, res);
26740 }
26741 
26742 
m68k_op_negx_32_ix(void)26743 static void m68k_op_negx_32_ix(void)
26744 {
26745 	uint ea  = EA_AY_IX_32();
26746 	uint src = m68ki_read_32(ea);
26747 	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
26748 
26749 	FLAG_N = NFLAG_32(res);
26750 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
26751 	FLAG_V = (src & res)>>24;
26752 
26753 	res = MASK_OUT_ABOVE_32(res);
26754 	FLAG_Z |= res;
26755 
26756 	m68ki_write_32(ea, res);
26757 }
26758 
26759 
m68k_op_negx_32_aw(void)26760 static void m68k_op_negx_32_aw(void)
26761 {
26762 	uint ea  = EA_AW_32();
26763 	uint src = m68ki_read_32(ea);
26764 	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
26765 
26766 	FLAG_N = NFLAG_32(res);
26767 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
26768 	FLAG_V = (src & res)>>24;
26769 
26770 	res = MASK_OUT_ABOVE_32(res);
26771 	FLAG_Z |= res;
26772 
26773 	m68ki_write_32(ea, res);
26774 }
26775 
26776 
m68k_op_negx_32_al(void)26777 static void m68k_op_negx_32_al(void)
26778 {
26779 	uint ea  = EA_AL_32();
26780 	uint src = m68ki_read_32(ea);
26781 	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
26782 
26783 	FLAG_N = NFLAG_32(res);
26784 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
26785 	FLAG_V = (src & res)>>24;
26786 
26787 	res = MASK_OUT_ABOVE_32(res);
26788 	FLAG_Z |= res;
26789 
26790 	m68ki_write_32(ea, res);
26791 }
26792 
26793 
m68k_op_nop(void)26794 static void m68k_op_nop(void)
26795 {
26796 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
26797 }
26798 
26799 
m68k_op_not_8_d(void)26800 static void m68k_op_not_8_d(void)
26801 {
26802 	uint* r_dst = &DY;
26803 	uint res = MASK_OUT_ABOVE_8(~*r_dst);
26804 
26805 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
26806 
26807 	FLAG_N = NFLAG_8(res);
26808 	FLAG_Z = res;
26809 	FLAG_C = CFLAG_CLEAR;
26810 	FLAG_V = VFLAG_CLEAR;
26811 }
26812 
26813 
m68k_op_not_8_ai(void)26814 static void m68k_op_not_8_ai(void)
26815 {
26816 	uint ea = EA_AY_AI_8();
26817 	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
26818 
26819 	m68ki_write_8(ea, res);
26820 
26821 	FLAG_N = NFLAG_8(res);
26822 	FLAG_Z = res;
26823 	FLAG_C = CFLAG_CLEAR;
26824 	FLAG_V = VFLAG_CLEAR;
26825 }
26826 
26827 
m68k_op_not_8_pi(void)26828 static void m68k_op_not_8_pi(void)
26829 {
26830 	uint ea = EA_AY_PI_8();
26831 	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
26832 
26833 	m68ki_write_8(ea, res);
26834 
26835 	FLAG_N = NFLAG_8(res);
26836 	FLAG_Z = res;
26837 	FLAG_C = CFLAG_CLEAR;
26838 	FLAG_V = VFLAG_CLEAR;
26839 }
26840 
26841 
m68k_op_not_8_pi7(void)26842 static void m68k_op_not_8_pi7(void)
26843 {
26844 	uint ea = EA_A7_PI_8();
26845 	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
26846 
26847 	m68ki_write_8(ea, res);
26848 
26849 	FLAG_N = NFLAG_8(res);
26850 	FLAG_Z = res;
26851 	FLAG_C = CFLAG_CLEAR;
26852 	FLAG_V = VFLAG_CLEAR;
26853 }
26854 
26855 
m68k_op_not_8_pd(void)26856 static void m68k_op_not_8_pd(void)
26857 {
26858 	uint ea = EA_AY_PD_8();
26859 	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
26860 
26861 	m68ki_write_8(ea, res);
26862 
26863 	FLAG_N = NFLAG_8(res);
26864 	FLAG_Z = res;
26865 	FLAG_C = CFLAG_CLEAR;
26866 	FLAG_V = VFLAG_CLEAR;
26867 }
26868 
26869 
m68k_op_not_8_pd7(void)26870 static void m68k_op_not_8_pd7(void)
26871 {
26872 	uint ea = EA_A7_PD_8();
26873 	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
26874 
26875 	m68ki_write_8(ea, res);
26876 
26877 	FLAG_N = NFLAG_8(res);
26878 	FLAG_Z = res;
26879 	FLAG_C = CFLAG_CLEAR;
26880 	FLAG_V = VFLAG_CLEAR;
26881 }
26882 
26883 
m68k_op_not_8_di(void)26884 static void m68k_op_not_8_di(void)
26885 {
26886 	uint ea = EA_AY_DI_8();
26887 	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
26888 
26889 	m68ki_write_8(ea, res);
26890 
26891 	FLAG_N = NFLAG_8(res);
26892 	FLAG_Z = res;
26893 	FLAG_C = CFLAG_CLEAR;
26894 	FLAG_V = VFLAG_CLEAR;
26895 }
26896 
26897 
m68k_op_not_8_ix(void)26898 static void m68k_op_not_8_ix(void)
26899 {
26900 	uint ea = EA_AY_IX_8();
26901 	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
26902 
26903 	m68ki_write_8(ea, res);
26904 
26905 	FLAG_N = NFLAG_8(res);
26906 	FLAG_Z = res;
26907 	FLAG_C = CFLAG_CLEAR;
26908 	FLAG_V = VFLAG_CLEAR;
26909 }
26910 
26911 
m68k_op_not_8_aw(void)26912 static void m68k_op_not_8_aw(void)
26913 {
26914 	uint ea = EA_AW_8();
26915 	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
26916 
26917 	m68ki_write_8(ea, res);
26918 
26919 	FLAG_N = NFLAG_8(res);
26920 	FLAG_Z = res;
26921 	FLAG_C = CFLAG_CLEAR;
26922 	FLAG_V = VFLAG_CLEAR;
26923 }
26924 
26925 
m68k_op_not_8_al(void)26926 static void m68k_op_not_8_al(void)
26927 {
26928 	uint ea = EA_AL_8();
26929 	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
26930 
26931 	m68ki_write_8(ea, res);
26932 
26933 	FLAG_N = NFLAG_8(res);
26934 	FLAG_Z = res;
26935 	FLAG_C = CFLAG_CLEAR;
26936 	FLAG_V = VFLAG_CLEAR;
26937 }
26938 
26939 
m68k_op_not_16_d(void)26940 static void m68k_op_not_16_d(void)
26941 {
26942 	uint* r_dst = &DY;
26943 	uint res = MASK_OUT_ABOVE_16(~*r_dst);
26944 
26945 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
26946 
26947 	FLAG_N = NFLAG_16(res);
26948 	FLAG_Z = res;
26949 	FLAG_C = CFLAG_CLEAR;
26950 	FLAG_V = VFLAG_CLEAR;
26951 }
26952 
26953 
m68k_op_not_16_ai(void)26954 static void m68k_op_not_16_ai(void)
26955 {
26956 	uint ea = EA_AY_AI_16();
26957 	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
26958 
26959 	m68ki_write_16(ea, res);
26960 
26961 	FLAG_N = NFLAG_16(res);
26962 	FLAG_Z = res;
26963 	FLAG_C = CFLAG_CLEAR;
26964 	FLAG_V = VFLAG_CLEAR;
26965 }
26966 
26967 
m68k_op_not_16_pi(void)26968 static void m68k_op_not_16_pi(void)
26969 {
26970 	uint ea = EA_AY_PI_16();
26971 	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
26972 
26973 	m68ki_write_16(ea, res);
26974 
26975 	FLAG_N = NFLAG_16(res);
26976 	FLAG_Z = res;
26977 	FLAG_C = CFLAG_CLEAR;
26978 	FLAG_V = VFLAG_CLEAR;
26979 }
26980 
26981 
m68k_op_not_16_pd(void)26982 static void m68k_op_not_16_pd(void)
26983 {
26984 	uint ea = EA_AY_PD_16();
26985 	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
26986 
26987 	m68ki_write_16(ea, res);
26988 
26989 	FLAG_N = NFLAG_16(res);
26990 	FLAG_Z = res;
26991 	FLAG_C = CFLAG_CLEAR;
26992 	FLAG_V = VFLAG_CLEAR;
26993 }
26994 
26995 
m68k_op_not_16_di(void)26996 static void m68k_op_not_16_di(void)
26997 {
26998 	uint ea = EA_AY_DI_16();
26999 	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
27000 
27001 	m68ki_write_16(ea, res);
27002 
27003 	FLAG_N = NFLAG_16(res);
27004 	FLAG_Z = res;
27005 	FLAG_C = CFLAG_CLEAR;
27006 	FLAG_V = VFLAG_CLEAR;
27007 }
27008 
27009 
m68k_op_not_16_ix(void)27010 static void m68k_op_not_16_ix(void)
27011 {
27012 	uint ea = EA_AY_IX_16();
27013 	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
27014 
27015 	m68ki_write_16(ea, res);
27016 
27017 	FLAG_N = NFLAG_16(res);
27018 	FLAG_Z = res;
27019 	FLAG_C = CFLAG_CLEAR;
27020 	FLAG_V = VFLAG_CLEAR;
27021 }
27022 
27023 
m68k_op_not_16_aw(void)27024 static void m68k_op_not_16_aw(void)
27025 {
27026 	uint ea = EA_AW_16();
27027 	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
27028 
27029 	m68ki_write_16(ea, res);
27030 
27031 	FLAG_N = NFLAG_16(res);
27032 	FLAG_Z = res;
27033 	FLAG_C = CFLAG_CLEAR;
27034 	FLAG_V = VFLAG_CLEAR;
27035 }
27036 
27037 
m68k_op_not_16_al(void)27038 static void m68k_op_not_16_al(void)
27039 {
27040 	uint ea = EA_AL_16();
27041 	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
27042 
27043 	m68ki_write_16(ea, res);
27044 
27045 	FLAG_N = NFLAG_16(res);
27046 	FLAG_Z = res;
27047 	FLAG_C = CFLAG_CLEAR;
27048 	FLAG_V = VFLAG_CLEAR;
27049 }
27050 
27051 
m68k_op_not_32_d(void)27052 static void m68k_op_not_32_d(void)
27053 {
27054 	uint* r_dst = &DY;
27055 	uint res = *r_dst = MASK_OUT_ABOVE_32(~*r_dst);
27056 
27057 	FLAG_N = NFLAG_32(res);
27058 	FLAG_Z = res;
27059 	FLAG_C = CFLAG_CLEAR;
27060 	FLAG_V = VFLAG_CLEAR;
27061 }
27062 
27063 
m68k_op_not_32_ai(void)27064 static void m68k_op_not_32_ai(void)
27065 {
27066 	uint ea = EA_AY_AI_32();
27067 	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
27068 
27069 	m68ki_write_32(ea, res);
27070 
27071 	FLAG_N = NFLAG_32(res);
27072 	FLAG_Z = res;
27073 	FLAG_C = CFLAG_CLEAR;
27074 	FLAG_V = VFLAG_CLEAR;
27075 }
27076 
27077 
m68k_op_not_32_pi(void)27078 static void m68k_op_not_32_pi(void)
27079 {
27080 	uint ea = EA_AY_PI_32();
27081 	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
27082 
27083 	m68ki_write_32(ea, res);
27084 
27085 	FLAG_N = NFLAG_32(res);
27086 	FLAG_Z = res;
27087 	FLAG_C = CFLAG_CLEAR;
27088 	FLAG_V = VFLAG_CLEAR;
27089 }
27090 
27091 
m68k_op_not_32_pd(void)27092 static void m68k_op_not_32_pd(void)
27093 {
27094 	uint ea = EA_AY_PD_32();
27095 	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
27096 
27097 	m68ki_write_32(ea, res);
27098 
27099 	FLAG_N = NFLAG_32(res);
27100 	FLAG_Z = res;
27101 	FLAG_C = CFLAG_CLEAR;
27102 	FLAG_V = VFLAG_CLEAR;
27103 }
27104 
27105 
m68k_op_not_32_di(void)27106 static void m68k_op_not_32_di(void)
27107 {
27108 	uint ea = EA_AY_DI_32();
27109 	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
27110 
27111 	m68ki_write_32(ea, res);
27112 
27113 	FLAG_N = NFLAG_32(res);
27114 	FLAG_Z = res;
27115 	FLAG_C = CFLAG_CLEAR;
27116 	FLAG_V = VFLAG_CLEAR;
27117 }
27118 
27119 
m68k_op_not_32_ix(void)27120 static void m68k_op_not_32_ix(void)
27121 {
27122 	uint ea = EA_AY_IX_32();
27123 	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
27124 
27125 	m68ki_write_32(ea, res);
27126 
27127 	FLAG_N = NFLAG_32(res);
27128 	FLAG_Z = res;
27129 	FLAG_C = CFLAG_CLEAR;
27130 	FLAG_V = VFLAG_CLEAR;
27131 }
27132 
27133 
m68k_op_not_32_aw(void)27134 static void m68k_op_not_32_aw(void)
27135 {
27136 	uint ea = EA_AW_32();
27137 	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
27138 
27139 	m68ki_write_32(ea, res);
27140 
27141 	FLAG_N = NFLAG_32(res);
27142 	FLAG_Z = res;
27143 	FLAG_C = CFLAG_CLEAR;
27144 	FLAG_V = VFLAG_CLEAR;
27145 }
27146 
27147 
m68k_op_not_32_al(void)27148 static void m68k_op_not_32_al(void)
27149 {
27150 	uint ea = EA_AL_32();
27151 	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
27152 
27153 	m68ki_write_32(ea, res);
27154 
27155 	FLAG_N = NFLAG_32(res);
27156 	FLAG_Z = res;
27157 	FLAG_C = CFLAG_CLEAR;
27158 	FLAG_V = VFLAG_CLEAR;
27159 }
27160 
27161 
m68k_op_or_8_er_d(void)27162 static void m68k_op_or_8_er_d(void)
27163 {
27164 	uint res = MASK_OUT_ABOVE_8((DX |= MASK_OUT_ABOVE_8(DY)));
27165 
27166 	FLAG_N = NFLAG_8(res);
27167 	FLAG_Z = res;
27168 	FLAG_C = CFLAG_CLEAR;
27169 	FLAG_V = VFLAG_CLEAR;
27170 }
27171 
27172 
m68k_op_or_8_er_ai(void)27173 static void m68k_op_or_8_er_ai(void)
27174 {
27175 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_AI_8()));
27176 
27177 	FLAG_N = NFLAG_8(res);
27178 	FLAG_Z = res;
27179 	FLAG_C = CFLAG_CLEAR;
27180 	FLAG_V = VFLAG_CLEAR;
27181 }
27182 
27183 
m68k_op_or_8_er_pi(void)27184 static void m68k_op_or_8_er_pi(void)
27185 {
27186 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PI_8()));
27187 
27188 	FLAG_N = NFLAG_8(res);
27189 	FLAG_Z = res;
27190 	FLAG_C = CFLAG_CLEAR;
27191 	FLAG_V = VFLAG_CLEAR;
27192 }
27193 
27194 
m68k_op_or_8_er_pi7(void)27195 static void m68k_op_or_8_er_pi7(void)
27196 {
27197 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PI_8()));
27198 
27199 	FLAG_N = NFLAG_8(res);
27200 	FLAG_Z = res;
27201 	FLAG_C = CFLAG_CLEAR;
27202 	FLAG_V = VFLAG_CLEAR;
27203 }
27204 
27205 
m68k_op_or_8_er_pd(void)27206 static void m68k_op_or_8_er_pd(void)
27207 {
27208 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PD_8()));
27209 
27210 	FLAG_N = NFLAG_8(res);
27211 	FLAG_Z = res;
27212 	FLAG_C = CFLAG_CLEAR;
27213 	FLAG_V = VFLAG_CLEAR;
27214 }
27215 
27216 
m68k_op_or_8_er_pd7(void)27217 static void m68k_op_or_8_er_pd7(void)
27218 {
27219 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PD_8()));
27220 
27221 	FLAG_N = NFLAG_8(res);
27222 	FLAG_Z = res;
27223 	FLAG_C = CFLAG_CLEAR;
27224 	FLAG_V = VFLAG_CLEAR;
27225 }
27226 
27227 
m68k_op_or_8_er_di(void)27228 static void m68k_op_or_8_er_di(void)
27229 {
27230 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_DI_8()));
27231 
27232 	FLAG_N = NFLAG_8(res);
27233 	FLAG_Z = res;
27234 	FLAG_C = CFLAG_CLEAR;
27235 	FLAG_V = VFLAG_CLEAR;
27236 }
27237 
27238 
m68k_op_or_8_er_ix(void)27239 static void m68k_op_or_8_er_ix(void)
27240 {
27241 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_IX_8()));
27242 
27243 	FLAG_N = NFLAG_8(res);
27244 	FLAG_Z = res;
27245 	FLAG_C = CFLAG_CLEAR;
27246 	FLAG_V = VFLAG_CLEAR;
27247 }
27248 
27249 
m68k_op_or_8_er_aw(void)27250 static void m68k_op_or_8_er_aw(void)
27251 {
27252 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AW_8()));
27253 
27254 	FLAG_N = NFLAG_8(res);
27255 	FLAG_Z = res;
27256 	FLAG_C = CFLAG_CLEAR;
27257 	FLAG_V = VFLAG_CLEAR;
27258 }
27259 
27260 
m68k_op_or_8_er_al(void)27261 static void m68k_op_or_8_er_al(void)
27262 {
27263 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AL_8()));
27264 
27265 	FLAG_N = NFLAG_8(res);
27266 	FLAG_Z = res;
27267 	FLAG_C = CFLAG_CLEAR;
27268 	FLAG_V = VFLAG_CLEAR;
27269 }
27270 
27271 
m68k_op_or_8_er_pcdi(void)27272 static void m68k_op_or_8_er_pcdi(void)
27273 {
27274 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCDI_8()));
27275 
27276 	FLAG_N = NFLAG_8(res);
27277 	FLAG_Z = res;
27278 	FLAG_C = CFLAG_CLEAR;
27279 	FLAG_V = VFLAG_CLEAR;
27280 }
27281 
27282 
m68k_op_or_8_er_pcix(void)27283 static void m68k_op_or_8_er_pcix(void)
27284 {
27285 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCIX_8()));
27286 
27287 	FLAG_N = NFLAG_8(res);
27288 	FLAG_Z = res;
27289 	FLAG_C = CFLAG_CLEAR;
27290 	FLAG_V = VFLAG_CLEAR;
27291 }
27292 
27293 
m68k_op_or_8_er_i(void)27294 static void m68k_op_or_8_er_i(void)
27295 {
27296 	uint res = MASK_OUT_ABOVE_8((DX |= OPER_I_8()));
27297 
27298 	FLAG_N = NFLAG_8(res);
27299 	FLAG_Z = res;
27300 	FLAG_C = CFLAG_CLEAR;
27301 	FLAG_V = VFLAG_CLEAR;
27302 }
27303 
27304 
m68k_op_or_16_er_d(void)27305 static void m68k_op_or_16_er_d(void)
27306 {
27307 	uint res = MASK_OUT_ABOVE_16((DX |= MASK_OUT_ABOVE_16(DY)));
27308 
27309 	FLAG_N = NFLAG_16(res);
27310 	FLAG_Z = res;
27311 	FLAG_C = CFLAG_CLEAR;
27312 	FLAG_V = VFLAG_CLEAR;
27313 }
27314 
27315 
m68k_op_or_16_er_ai(void)27316 static void m68k_op_or_16_er_ai(void)
27317 {
27318 	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_AI_16()));
27319 
27320 	FLAG_N = NFLAG_16(res);
27321 	FLAG_Z = res;
27322 	FLAG_C = CFLAG_CLEAR;
27323 	FLAG_V = VFLAG_CLEAR;
27324 }
27325 
27326 
m68k_op_or_16_er_pi(void)27327 static void m68k_op_or_16_er_pi(void)
27328 {
27329 	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PI_16()));
27330 
27331 	FLAG_N = NFLAG_16(res);
27332 	FLAG_Z = res;
27333 	FLAG_C = CFLAG_CLEAR;
27334 	FLAG_V = VFLAG_CLEAR;
27335 }
27336 
27337 
m68k_op_or_16_er_pd(void)27338 static void m68k_op_or_16_er_pd(void)
27339 {
27340 	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PD_16()));
27341 
27342 	FLAG_N = NFLAG_16(res);
27343 	FLAG_Z = res;
27344 	FLAG_C = CFLAG_CLEAR;
27345 	FLAG_V = VFLAG_CLEAR;
27346 }
27347 
27348 
m68k_op_or_16_er_di(void)27349 static void m68k_op_or_16_er_di(void)
27350 {
27351 	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_DI_16()));
27352 
27353 	FLAG_N = NFLAG_16(res);
27354 	FLAG_Z = res;
27355 	FLAG_C = CFLAG_CLEAR;
27356 	FLAG_V = VFLAG_CLEAR;
27357 }
27358 
27359 
m68k_op_or_16_er_ix(void)27360 static void m68k_op_or_16_er_ix(void)
27361 {
27362 	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_IX_16()));
27363 
27364 	FLAG_N = NFLAG_16(res);
27365 	FLAG_Z = res;
27366 	FLAG_C = CFLAG_CLEAR;
27367 	FLAG_V = VFLAG_CLEAR;
27368 }
27369 
27370 
m68k_op_or_16_er_aw(void)27371 static void m68k_op_or_16_er_aw(void)
27372 {
27373 	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AW_16()));
27374 
27375 	FLAG_N = NFLAG_16(res);
27376 	FLAG_Z = res;
27377 	FLAG_C = CFLAG_CLEAR;
27378 	FLAG_V = VFLAG_CLEAR;
27379 }
27380 
27381 
m68k_op_or_16_er_al(void)27382 static void m68k_op_or_16_er_al(void)
27383 {
27384 	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AL_16()));
27385 
27386 	FLAG_N = NFLAG_16(res);
27387 	FLAG_Z = res;
27388 	FLAG_C = CFLAG_CLEAR;
27389 	FLAG_V = VFLAG_CLEAR;
27390 }
27391 
27392 
m68k_op_or_16_er_pcdi(void)27393 static void m68k_op_or_16_er_pcdi(void)
27394 {
27395 	uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCDI_16()));
27396 
27397 	FLAG_N = NFLAG_16(res);
27398 	FLAG_Z = res;
27399 	FLAG_C = CFLAG_CLEAR;
27400 	FLAG_V = VFLAG_CLEAR;
27401 }
27402 
27403 
m68k_op_or_16_er_pcix(void)27404 static void m68k_op_or_16_er_pcix(void)
27405 {
27406 	uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCIX_16()));
27407 
27408 	FLAG_N = NFLAG_16(res);
27409 	FLAG_Z = res;
27410 	FLAG_C = CFLAG_CLEAR;
27411 	FLAG_V = VFLAG_CLEAR;
27412 }
27413 
27414 
m68k_op_or_16_er_i(void)27415 static void m68k_op_or_16_er_i(void)
27416 {
27417 	uint res = MASK_OUT_ABOVE_16((DX |= OPER_I_16()));
27418 
27419 	FLAG_N = NFLAG_16(res);
27420 	FLAG_Z = res;
27421 	FLAG_C = CFLAG_CLEAR;
27422 	FLAG_V = VFLAG_CLEAR;
27423 }
27424 
27425 
m68k_op_or_32_er_d(void)27426 static void m68k_op_or_32_er_d(void)
27427 {
27428 	uint res = DX |= DY;
27429 
27430 	FLAG_N = NFLAG_32(res);
27431 	FLAG_Z = res;
27432 	FLAG_C = CFLAG_CLEAR;
27433 	FLAG_V = VFLAG_CLEAR;
27434 }
27435 
27436 
m68k_op_or_32_er_ai(void)27437 static void m68k_op_or_32_er_ai(void)
27438 {
27439 	uint res = DX |= OPER_AY_AI_32();
27440 
27441 	FLAG_N = NFLAG_32(res);
27442 	FLAG_Z = res;
27443 	FLAG_C = CFLAG_CLEAR;
27444 	FLAG_V = VFLAG_CLEAR;
27445 }
27446 
27447 
m68k_op_or_32_er_pi(void)27448 static void m68k_op_or_32_er_pi(void)
27449 {
27450 	uint res = DX |= OPER_AY_PI_32();
27451 
27452 	FLAG_N = NFLAG_32(res);
27453 	FLAG_Z = res;
27454 	FLAG_C = CFLAG_CLEAR;
27455 	FLAG_V = VFLAG_CLEAR;
27456 }
27457 
27458 
m68k_op_or_32_er_pd(void)27459 static void m68k_op_or_32_er_pd(void)
27460 {
27461 	uint res = DX |= OPER_AY_PD_32();
27462 
27463 	FLAG_N = NFLAG_32(res);
27464 	FLAG_Z = res;
27465 	FLAG_C = CFLAG_CLEAR;
27466 	FLAG_V = VFLAG_CLEAR;
27467 }
27468 
27469 
m68k_op_or_32_er_di(void)27470 static void m68k_op_or_32_er_di(void)
27471 {
27472 	uint res = DX |= OPER_AY_DI_32();
27473 
27474 	FLAG_N = NFLAG_32(res);
27475 	FLAG_Z = res;
27476 	FLAG_C = CFLAG_CLEAR;
27477 	FLAG_V = VFLAG_CLEAR;
27478 }
27479 
27480 
m68k_op_or_32_er_ix(void)27481 static void m68k_op_or_32_er_ix(void)
27482 {
27483 	uint res = DX |= OPER_AY_IX_32();
27484 
27485 	FLAG_N = NFLAG_32(res);
27486 	FLAG_Z = res;
27487 	FLAG_C = CFLAG_CLEAR;
27488 	FLAG_V = VFLAG_CLEAR;
27489 }
27490 
27491 
m68k_op_or_32_er_aw(void)27492 static void m68k_op_or_32_er_aw(void)
27493 {
27494 	uint res = DX |= OPER_AW_32();
27495 
27496 	FLAG_N = NFLAG_32(res);
27497 	FLAG_Z = res;
27498 	FLAG_C = CFLAG_CLEAR;
27499 	FLAG_V = VFLAG_CLEAR;
27500 }
27501 
27502 
m68k_op_or_32_er_al(void)27503 static void m68k_op_or_32_er_al(void)
27504 {
27505 	uint res = DX |= OPER_AL_32();
27506 
27507 	FLAG_N = NFLAG_32(res);
27508 	FLAG_Z = res;
27509 	FLAG_C = CFLAG_CLEAR;
27510 	FLAG_V = VFLAG_CLEAR;
27511 }
27512 
27513 
m68k_op_or_32_er_pcdi(void)27514 static void m68k_op_or_32_er_pcdi(void)
27515 {
27516 	uint res = DX |= OPER_PCDI_32();
27517 
27518 	FLAG_N = NFLAG_32(res);
27519 	FLAG_Z = res;
27520 	FLAG_C = CFLAG_CLEAR;
27521 	FLAG_V = VFLAG_CLEAR;
27522 }
27523 
27524 
m68k_op_or_32_er_pcix(void)27525 static void m68k_op_or_32_er_pcix(void)
27526 {
27527 	uint res = DX |= OPER_PCIX_32();
27528 
27529 	FLAG_N = NFLAG_32(res);
27530 	FLAG_Z = res;
27531 	FLAG_C = CFLAG_CLEAR;
27532 	FLAG_V = VFLAG_CLEAR;
27533 }
27534 
27535 
m68k_op_or_32_er_i(void)27536 static void m68k_op_or_32_er_i(void)
27537 {
27538 	uint res = DX |= OPER_I_32();
27539 
27540 	FLAG_N = NFLAG_32(res);
27541 	FLAG_Z = res;
27542 	FLAG_C = CFLAG_CLEAR;
27543 	FLAG_V = VFLAG_CLEAR;
27544 }
27545 
27546 
m68k_op_or_8_re_ai(void)27547 static void m68k_op_or_8_re_ai(void)
27548 {
27549 	uint ea = EA_AY_AI_8();
27550 	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
27551 
27552 	m68ki_write_8(ea, res);
27553 
27554 	FLAG_N = NFLAG_8(res);
27555 	FLAG_Z = res;
27556 	FLAG_C = CFLAG_CLEAR;
27557 	FLAG_V = VFLAG_CLEAR;
27558 }
27559 
27560 
m68k_op_or_8_re_pi(void)27561 static void m68k_op_or_8_re_pi(void)
27562 {
27563 	uint ea = EA_AY_PI_8();
27564 	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
27565 
27566 	m68ki_write_8(ea, res);
27567 
27568 	FLAG_N = NFLAG_8(res);
27569 	FLAG_Z = res;
27570 	FLAG_C = CFLAG_CLEAR;
27571 	FLAG_V = VFLAG_CLEAR;
27572 }
27573 
27574 
m68k_op_or_8_re_pi7(void)27575 static void m68k_op_or_8_re_pi7(void)
27576 {
27577 	uint ea = EA_A7_PI_8();
27578 	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
27579 
27580 	m68ki_write_8(ea, res);
27581 
27582 	FLAG_N = NFLAG_8(res);
27583 	FLAG_Z = res;
27584 	FLAG_C = CFLAG_CLEAR;
27585 	FLAG_V = VFLAG_CLEAR;
27586 }
27587 
27588 
m68k_op_or_8_re_pd(void)27589 static void m68k_op_or_8_re_pd(void)
27590 {
27591 	uint ea = EA_AY_PD_8();
27592 	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
27593 
27594 	m68ki_write_8(ea, res);
27595 
27596 	FLAG_N = NFLAG_8(res);
27597 	FLAG_Z = res;
27598 	FLAG_C = CFLAG_CLEAR;
27599 	FLAG_V = VFLAG_CLEAR;
27600 }
27601 
27602 
m68k_op_or_8_re_pd7(void)27603 static void m68k_op_or_8_re_pd7(void)
27604 {
27605 	uint ea = EA_A7_PD_8();
27606 	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
27607 
27608 	m68ki_write_8(ea, res);
27609 
27610 	FLAG_N = NFLAG_8(res);
27611 	FLAG_Z = res;
27612 	FLAG_C = CFLAG_CLEAR;
27613 	FLAG_V = VFLAG_CLEAR;
27614 }
27615 
27616 
m68k_op_or_8_re_di(void)27617 static void m68k_op_or_8_re_di(void)
27618 {
27619 	uint ea = EA_AY_DI_8();
27620 	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
27621 
27622 	m68ki_write_8(ea, res);
27623 
27624 	FLAG_N = NFLAG_8(res);
27625 	FLAG_Z = res;
27626 	FLAG_C = CFLAG_CLEAR;
27627 	FLAG_V = VFLAG_CLEAR;
27628 }
27629 
27630 
m68k_op_or_8_re_ix(void)27631 static void m68k_op_or_8_re_ix(void)
27632 {
27633 	uint ea = EA_AY_IX_8();
27634 	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
27635 
27636 	m68ki_write_8(ea, res);
27637 
27638 	FLAG_N = NFLAG_8(res);
27639 	FLAG_Z = res;
27640 	FLAG_C = CFLAG_CLEAR;
27641 	FLAG_V = VFLAG_CLEAR;
27642 }
27643 
27644 
m68k_op_or_8_re_aw(void)27645 static void m68k_op_or_8_re_aw(void)
27646 {
27647 	uint ea = EA_AW_8();
27648 	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
27649 
27650 	m68ki_write_8(ea, res);
27651 
27652 	FLAG_N = NFLAG_8(res);
27653 	FLAG_Z = res;
27654 	FLAG_C = CFLAG_CLEAR;
27655 	FLAG_V = VFLAG_CLEAR;
27656 }
27657 
27658 
m68k_op_or_8_re_al(void)27659 static void m68k_op_or_8_re_al(void)
27660 {
27661 	uint ea = EA_AL_8();
27662 	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
27663 
27664 	m68ki_write_8(ea, res);
27665 
27666 	FLAG_N = NFLAG_8(res);
27667 	FLAG_Z = res;
27668 	FLAG_C = CFLAG_CLEAR;
27669 	FLAG_V = VFLAG_CLEAR;
27670 }
27671 
27672 
m68k_op_or_16_re_ai(void)27673 static void m68k_op_or_16_re_ai(void)
27674 {
27675 	uint ea = EA_AY_AI_16();
27676 	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
27677 
27678 	m68ki_write_16(ea, res);
27679 
27680 	FLAG_N = NFLAG_16(res);
27681 	FLAG_Z = res;
27682 	FLAG_C = CFLAG_CLEAR;
27683 	FLAG_V = VFLAG_CLEAR;
27684 }
27685 
27686 
m68k_op_or_16_re_pi(void)27687 static void m68k_op_or_16_re_pi(void)
27688 {
27689 	uint ea = EA_AY_PI_16();
27690 	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
27691 
27692 	m68ki_write_16(ea, res);
27693 
27694 	FLAG_N = NFLAG_16(res);
27695 	FLAG_Z = res;
27696 	FLAG_C = CFLAG_CLEAR;
27697 	FLAG_V = VFLAG_CLEAR;
27698 }
27699 
27700 
m68k_op_or_16_re_pd(void)27701 static void m68k_op_or_16_re_pd(void)
27702 {
27703 	uint ea = EA_AY_PD_16();
27704 	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
27705 
27706 	m68ki_write_16(ea, res);
27707 
27708 	FLAG_N = NFLAG_16(res);
27709 	FLAG_Z = res;
27710 	FLAG_C = CFLAG_CLEAR;
27711 	FLAG_V = VFLAG_CLEAR;
27712 }
27713 
27714 
m68k_op_or_16_re_di(void)27715 static void m68k_op_or_16_re_di(void)
27716 {
27717 	uint ea = EA_AY_DI_16();
27718 	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
27719 
27720 	m68ki_write_16(ea, res);
27721 
27722 	FLAG_N = NFLAG_16(res);
27723 	FLAG_Z = res;
27724 	FLAG_C = CFLAG_CLEAR;
27725 	FLAG_V = VFLAG_CLEAR;
27726 }
27727 
27728 
m68k_op_or_16_re_ix(void)27729 static void m68k_op_or_16_re_ix(void)
27730 {
27731 	uint ea = EA_AY_IX_16();
27732 	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
27733 
27734 	m68ki_write_16(ea, res);
27735 
27736 	FLAG_N = NFLAG_16(res);
27737 	FLAG_Z = res;
27738 	FLAG_C = CFLAG_CLEAR;
27739 	FLAG_V = VFLAG_CLEAR;
27740 }
27741 
27742 
m68k_op_or_16_re_aw(void)27743 static void m68k_op_or_16_re_aw(void)
27744 {
27745 	uint ea = EA_AW_16();
27746 	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
27747 
27748 	m68ki_write_16(ea, res);
27749 
27750 	FLAG_N = NFLAG_16(res);
27751 	FLAG_Z = res;
27752 	FLAG_C = CFLAG_CLEAR;
27753 	FLAG_V = VFLAG_CLEAR;
27754 }
27755 
27756 
m68k_op_or_16_re_al(void)27757 static void m68k_op_or_16_re_al(void)
27758 {
27759 	uint ea = EA_AL_16();
27760 	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
27761 
27762 	m68ki_write_16(ea, res);
27763 
27764 	FLAG_N = NFLAG_16(res);
27765 	FLAG_Z = res;
27766 	FLAG_C = CFLAG_CLEAR;
27767 	FLAG_V = VFLAG_CLEAR;
27768 }
27769 
27770 
m68k_op_or_32_re_ai(void)27771 static void m68k_op_or_32_re_ai(void)
27772 {
27773 	uint ea = EA_AY_AI_32();
27774 	uint res = DX | m68ki_read_32(ea);
27775 
27776 	m68ki_write_32(ea, res);
27777 
27778 	FLAG_N = NFLAG_32(res);
27779 	FLAG_Z = res;
27780 	FLAG_C = CFLAG_CLEAR;
27781 	FLAG_V = VFLAG_CLEAR;
27782 }
27783 
27784 
m68k_op_or_32_re_pi(void)27785 static void m68k_op_or_32_re_pi(void)
27786 {
27787 	uint ea = EA_AY_PI_32();
27788 	uint res = DX | m68ki_read_32(ea);
27789 
27790 	m68ki_write_32(ea, res);
27791 
27792 	FLAG_N = NFLAG_32(res);
27793 	FLAG_Z = res;
27794 	FLAG_C = CFLAG_CLEAR;
27795 	FLAG_V = VFLAG_CLEAR;
27796 }
27797 
27798 
m68k_op_or_32_re_pd(void)27799 static void m68k_op_or_32_re_pd(void)
27800 {
27801 	uint ea = EA_AY_PD_32();
27802 	uint res = DX | m68ki_read_32(ea);
27803 
27804 	m68ki_write_32(ea, res);
27805 
27806 	FLAG_N = NFLAG_32(res);
27807 	FLAG_Z = res;
27808 	FLAG_C = CFLAG_CLEAR;
27809 	FLAG_V = VFLAG_CLEAR;
27810 }
27811 
27812 
m68k_op_or_32_re_di(void)27813 static void m68k_op_or_32_re_di(void)
27814 {
27815 	uint ea = EA_AY_DI_32();
27816 	uint res = DX | m68ki_read_32(ea);
27817 
27818 	m68ki_write_32(ea, res);
27819 
27820 	FLAG_N = NFLAG_32(res);
27821 	FLAG_Z = res;
27822 	FLAG_C = CFLAG_CLEAR;
27823 	FLAG_V = VFLAG_CLEAR;
27824 }
27825 
27826 
m68k_op_or_32_re_ix(void)27827 static void m68k_op_or_32_re_ix(void)
27828 {
27829 	uint ea = EA_AY_IX_32();
27830 	uint res = DX | m68ki_read_32(ea);
27831 
27832 	m68ki_write_32(ea, res);
27833 
27834 	FLAG_N = NFLAG_32(res);
27835 	FLAG_Z = res;
27836 	FLAG_C = CFLAG_CLEAR;
27837 	FLAG_V = VFLAG_CLEAR;
27838 }
27839 
27840 
m68k_op_or_32_re_aw(void)27841 static void m68k_op_or_32_re_aw(void)
27842 {
27843 	uint ea = EA_AW_32();
27844 	uint res = DX | m68ki_read_32(ea);
27845 
27846 	m68ki_write_32(ea, res);
27847 
27848 	FLAG_N = NFLAG_32(res);
27849 	FLAG_Z = res;
27850 	FLAG_C = CFLAG_CLEAR;
27851 	FLAG_V = VFLAG_CLEAR;
27852 }
27853 
27854 
m68k_op_or_32_re_al(void)27855 static void m68k_op_or_32_re_al(void)
27856 {
27857 	uint ea = EA_AL_32();
27858 	uint res = DX | m68ki_read_32(ea);
27859 
27860 	m68ki_write_32(ea, res);
27861 
27862 	FLAG_N = NFLAG_32(res);
27863 	FLAG_Z = res;
27864 	FLAG_C = CFLAG_CLEAR;
27865 	FLAG_V = VFLAG_CLEAR;
27866 }
27867 
27868 
m68k_op_ori_8_d(void)27869 static void m68k_op_ori_8_d(void)
27870 {
27871 	uint res = MASK_OUT_ABOVE_8((DY |= OPER_I_8()));
27872 
27873 	FLAG_N = NFLAG_8(res);
27874 	FLAG_Z = res;
27875 	FLAG_C = CFLAG_CLEAR;
27876 	FLAG_V = VFLAG_CLEAR;
27877 }
27878 
27879 
m68k_op_ori_8_ai(void)27880 static void m68k_op_ori_8_ai(void)
27881 {
27882 	uint src = OPER_I_8();
27883 	uint ea = EA_AY_AI_8();
27884 	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
27885 
27886 	m68ki_write_8(ea, res);
27887 
27888 	FLAG_N = NFLAG_8(res);
27889 	FLAG_Z = res;
27890 	FLAG_C = CFLAG_CLEAR;
27891 	FLAG_V = VFLAG_CLEAR;
27892 }
27893 
27894 
m68k_op_ori_8_pi(void)27895 static void m68k_op_ori_8_pi(void)
27896 {
27897 	uint src = OPER_I_8();
27898 	uint ea = EA_AY_PI_8();
27899 	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
27900 
27901 	m68ki_write_8(ea, res);
27902 
27903 	FLAG_N = NFLAG_8(res);
27904 	FLAG_Z = res;
27905 	FLAG_C = CFLAG_CLEAR;
27906 	FLAG_V = VFLAG_CLEAR;
27907 }
27908 
27909 
m68k_op_ori_8_pi7(void)27910 static void m68k_op_ori_8_pi7(void)
27911 {
27912 	uint src = OPER_I_8();
27913 	uint ea = EA_A7_PI_8();
27914 	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
27915 
27916 	m68ki_write_8(ea, res);
27917 
27918 	FLAG_N = NFLAG_8(res);
27919 	FLAG_Z = res;
27920 	FLAG_C = CFLAG_CLEAR;
27921 	FLAG_V = VFLAG_CLEAR;
27922 }
27923 
27924 
m68k_op_ori_8_pd(void)27925 static void m68k_op_ori_8_pd(void)
27926 {
27927 	uint src = OPER_I_8();
27928 	uint ea = EA_AY_PD_8();
27929 	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
27930 
27931 	m68ki_write_8(ea, res);
27932 
27933 	FLAG_N = NFLAG_8(res);
27934 	FLAG_Z = res;
27935 	FLAG_C = CFLAG_CLEAR;
27936 	FLAG_V = VFLAG_CLEAR;
27937 }
27938 
27939 
m68k_op_ori_8_pd7(void)27940 static void m68k_op_ori_8_pd7(void)
27941 {
27942 	uint src = OPER_I_8();
27943 	uint ea = EA_A7_PD_8();
27944 	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
27945 
27946 	m68ki_write_8(ea, res);
27947 
27948 	FLAG_N = NFLAG_8(res);
27949 	FLAG_Z = res;
27950 	FLAG_C = CFLAG_CLEAR;
27951 	FLAG_V = VFLAG_CLEAR;
27952 }
27953 
27954 
m68k_op_ori_8_di(void)27955 static void m68k_op_ori_8_di(void)
27956 {
27957 	uint src = OPER_I_8();
27958 	uint ea = EA_AY_DI_8();
27959 	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
27960 
27961 	m68ki_write_8(ea, res);
27962 
27963 	FLAG_N = NFLAG_8(res);
27964 	FLAG_Z = res;
27965 	FLAG_C = CFLAG_CLEAR;
27966 	FLAG_V = VFLAG_CLEAR;
27967 }
27968 
27969 
m68k_op_ori_8_ix(void)27970 static void m68k_op_ori_8_ix(void)
27971 {
27972 	uint src = OPER_I_8();
27973 	uint ea = EA_AY_IX_8();
27974 	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
27975 
27976 	m68ki_write_8(ea, res);
27977 
27978 	FLAG_N = NFLAG_8(res);
27979 	FLAG_Z = res;
27980 	FLAG_C = CFLAG_CLEAR;
27981 	FLAG_V = VFLAG_CLEAR;
27982 }
27983 
27984 
m68k_op_ori_8_aw(void)27985 static void m68k_op_ori_8_aw(void)
27986 {
27987 	uint src = OPER_I_8();
27988 	uint ea = EA_AW_8();
27989 	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
27990 
27991 	m68ki_write_8(ea, res);
27992 
27993 	FLAG_N = NFLAG_8(res);
27994 	FLAG_Z = res;
27995 	FLAG_C = CFLAG_CLEAR;
27996 	FLAG_V = VFLAG_CLEAR;
27997 }
27998 
27999 
m68k_op_ori_8_al(void)28000 static void m68k_op_ori_8_al(void)
28001 {
28002 	uint src = OPER_I_8();
28003 	uint ea = EA_AL_8();
28004 	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
28005 
28006 	m68ki_write_8(ea, res);
28007 
28008 	FLAG_N = NFLAG_8(res);
28009 	FLAG_Z = res;
28010 	FLAG_C = CFLAG_CLEAR;
28011 	FLAG_V = VFLAG_CLEAR;
28012 }
28013 
28014 
m68k_op_ori_16_d(void)28015 static void m68k_op_ori_16_d(void)
28016 {
28017 	uint res = MASK_OUT_ABOVE_16(DY |= OPER_I_16());
28018 
28019 	FLAG_N = NFLAG_16(res);
28020 	FLAG_Z = res;
28021 	FLAG_C = CFLAG_CLEAR;
28022 	FLAG_V = VFLAG_CLEAR;
28023 }
28024 
28025 
m68k_op_ori_16_ai(void)28026 static void m68k_op_ori_16_ai(void)
28027 {
28028 	uint src = OPER_I_16();
28029 	uint ea = EA_AY_AI_16();
28030 	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
28031 
28032 	m68ki_write_16(ea, res);
28033 
28034 	FLAG_N = NFLAG_16(res);
28035 	FLAG_Z = res;
28036 	FLAG_C = CFLAG_CLEAR;
28037 	FLAG_V = VFLAG_CLEAR;
28038 }
28039 
28040 
m68k_op_ori_16_pi(void)28041 static void m68k_op_ori_16_pi(void)
28042 {
28043 	uint src = OPER_I_16();
28044 	uint ea = EA_AY_PI_16();
28045 	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
28046 
28047 	m68ki_write_16(ea, res);
28048 
28049 	FLAG_N = NFLAG_16(res);
28050 	FLAG_Z = res;
28051 	FLAG_C = CFLAG_CLEAR;
28052 	FLAG_V = VFLAG_CLEAR;
28053 }
28054 
28055 
m68k_op_ori_16_pd(void)28056 static void m68k_op_ori_16_pd(void)
28057 {
28058 	uint src = OPER_I_16();
28059 	uint ea = EA_AY_PD_16();
28060 	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
28061 
28062 	m68ki_write_16(ea, res);
28063 
28064 	FLAG_N = NFLAG_16(res);
28065 	FLAG_Z = res;
28066 	FLAG_C = CFLAG_CLEAR;
28067 	FLAG_V = VFLAG_CLEAR;
28068 }
28069 
28070 
m68k_op_ori_16_di(void)28071 static void m68k_op_ori_16_di(void)
28072 {
28073 	uint src = OPER_I_16();
28074 	uint ea = EA_AY_DI_16();
28075 	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
28076 
28077 	m68ki_write_16(ea, res);
28078 
28079 	FLAG_N = NFLAG_16(res);
28080 	FLAG_Z = res;
28081 	FLAG_C = CFLAG_CLEAR;
28082 	FLAG_V = VFLAG_CLEAR;
28083 }
28084 
28085 
m68k_op_ori_16_ix(void)28086 static void m68k_op_ori_16_ix(void)
28087 {
28088 	uint src = OPER_I_16();
28089 	uint ea = EA_AY_IX_16();
28090 	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
28091 
28092 	m68ki_write_16(ea, res);
28093 
28094 	FLAG_N = NFLAG_16(res);
28095 	FLAG_Z = res;
28096 	FLAG_C = CFLAG_CLEAR;
28097 	FLAG_V = VFLAG_CLEAR;
28098 }
28099 
28100 
m68k_op_ori_16_aw(void)28101 static void m68k_op_ori_16_aw(void)
28102 {
28103 	uint src = OPER_I_16();
28104 	uint ea = EA_AW_16();
28105 	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
28106 
28107 	m68ki_write_16(ea, res);
28108 
28109 	FLAG_N = NFLAG_16(res);
28110 	FLAG_Z = res;
28111 	FLAG_C = CFLAG_CLEAR;
28112 	FLAG_V = VFLAG_CLEAR;
28113 }
28114 
28115 
m68k_op_ori_16_al(void)28116 static void m68k_op_ori_16_al(void)
28117 {
28118 	uint src = OPER_I_16();
28119 	uint ea = EA_AL_16();
28120 	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
28121 
28122 	m68ki_write_16(ea, res);
28123 
28124 	FLAG_N = NFLAG_16(res);
28125 	FLAG_Z = res;
28126 	FLAG_C = CFLAG_CLEAR;
28127 	FLAG_V = VFLAG_CLEAR;
28128 }
28129 
28130 
m68k_op_ori_32_d(void)28131 static void m68k_op_ori_32_d(void)
28132 {
28133 	uint res = DY |= OPER_I_32();
28134 
28135 	FLAG_N = NFLAG_32(res);
28136 	FLAG_Z = res;
28137 	FLAG_C = CFLAG_CLEAR;
28138 	FLAG_V = VFLAG_CLEAR;
28139 }
28140 
28141 
m68k_op_ori_32_ai(void)28142 static void m68k_op_ori_32_ai(void)
28143 {
28144 	uint src = OPER_I_32();
28145 	uint ea = EA_AY_AI_32();
28146 	uint res = src | m68ki_read_32(ea);
28147 
28148 	m68ki_write_32(ea, res);
28149 
28150 	FLAG_N = NFLAG_32(res);
28151 	FLAG_Z = res;
28152 	FLAG_C = CFLAG_CLEAR;
28153 	FLAG_V = VFLAG_CLEAR;
28154 }
28155 
28156 
m68k_op_ori_32_pi(void)28157 static void m68k_op_ori_32_pi(void)
28158 {
28159 	uint src = OPER_I_32();
28160 	uint ea = EA_AY_PI_32();
28161 	uint res = src | m68ki_read_32(ea);
28162 
28163 	m68ki_write_32(ea, res);
28164 
28165 	FLAG_N = NFLAG_32(res);
28166 	FLAG_Z = res;
28167 	FLAG_C = CFLAG_CLEAR;
28168 	FLAG_V = VFLAG_CLEAR;
28169 }
28170 
28171 
m68k_op_ori_32_pd(void)28172 static void m68k_op_ori_32_pd(void)
28173 {
28174 	uint src = OPER_I_32();
28175 	uint ea = EA_AY_PD_32();
28176 	uint res = src | m68ki_read_32(ea);
28177 
28178 	m68ki_write_32(ea, res);
28179 
28180 	FLAG_N = NFLAG_32(res);
28181 	FLAG_Z = res;
28182 	FLAG_C = CFLAG_CLEAR;
28183 	FLAG_V = VFLAG_CLEAR;
28184 }
28185 
28186 
m68k_op_ori_32_di(void)28187 static void m68k_op_ori_32_di(void)
28188 {
28189 	uint src = OPER_I_32();
28190 	uint ea = EA_AY_DI_32();
28191 	uint res = src | m68ki_read_32(ea);
28192 
28193 	m68ki_write_32(ea, res);
28194 
28195 	FLAG_N = NFLAG_32(res);
28196 	FLAG_Z = res;
28197 	FLAG_C = CFLAG_CLEAR;
28198 	FLAG_V = VFLAG_CLEAR;
28199 }
28200 
28201 
m68k_op_ori_32_ix(void)28202 static void m68k_op_ori_32_ix(void)
28203 {
28204 	uint src = OPER_I_32();
28205 	uint ea = EA_AY_IX_32();
28206 	uint res = src | m68ki_read_32(ea);
28207 
28208 	m68ki_write_32(ea, res);
28209 
28210 	FLAG_N = NFLAG_32(res);
28211 	FLAG_Z = res;
28212 	FLAG_C = CFLAG_CLEAR;
28213 	FLAG_V = VFLAG_CLEAR;
28214 }
28215 
28216 
m68k_op_ori_32_aw(void)28217 static void m68k_op_ori_32_aw(void)
28218 {
28219 	uint src = OPER_I_32();
28220 	uint ea = EA_AW_32();
28221 	uint res = src | m68ki_read_32(ea);
28222 
28223 	m68ki_write_32(ea, res);
28224 
28225 	FLAG_N = NFLAG_32(res);
28226 	FLAG_Z = res;
28227 	FLAG_C = CFLAG_CLEAR;
28228 	FLAG_V = VFLAG_CLEAR;
28229 }
28230 
28231 
m68k_op_ori_32_al(void)28232 static void m68k_op_ori_32_al(void)
28233 {
28234 	uint src = OPER_I_32();
28235 	uint ea = EA_AL_32();
28236 	uint res = src | m68ki_read_32(ea);
28237 
28238 	m68ki_write_32(ea, res);
28239 
28240 	FLAG_N = NFLAG_32(res);
28241 	FLAG_Z = res;
28242 	FLAG_C = CFLAG_CLEAR;
28243 	FLAG_V = VFLAG_CLEAR;
28244 }
28245 
28246 
m68k_op_ori_16_toc(void)28247 static void m68k_op_ori_16_toc(void)
28248 {
28249 	m68ki_set_ccr(m68ki_get_ccr() | OPER_I_16());
28250 }
28251 
28252 
m68k_op_ori_16_tos(void)28253 static void m68k_op_ori_16_tos(void)
28254 {
28255 	if(FLAG_S)
28256 	{
28257 		uint src = OPER_I_16();
28258 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
28259 		m68ki_set_sr(m68ki_get_sr() | src);
28260 		return;
28261 	}
28262 	m68ki_exception_privilege_violation();
28263 }
28264 
28265 
m68k_op_pack_16_rr(void)28266 static void m68k_op_pack_16_rr(void)
28267 {
28268 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
28269 	{
28270 		/* Note: DX and DY are reversed in Motorola's docs */
28271 		uint src = DY + OPER_I_16();
28272 		uint* r_dst = &DX;
28273 
28274 		*r_dst = MASK_OUT_BELOW_8(*r_dst) | ((src >> 4) & 0x00f0) | (src & 0x000f);
28275 		return;
28276 	}
28277 	m68ki_exception_illegal();
28278 }
28279 
28280 
m68k_op_pack_16_mm_ax7(void)28281 static void m68k_op_pack_16_mm_ax7(void)
28282 {
28283 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
28284 	{
28285 		/* Note: AX and AY are reversed in Motorola's docs */
28286 		uint ea_src = EA_AY_PD_8();
28287 		uint src = m68ki_read_8(ea_src);
28288 		ea_src = EA_AY_PD_8();
28289 		src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
28290 
28291 		m68ki_write_8(EA_A7_PD_8(), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
28292 		return;
28293 	}
28294 	m68ki_exception_illegal();
28295 }
28296 
28297 
m68k_op_pack_16_mm_ay7(void)28298 static void m68k_op_pack_16_mm_ay7(void)
28299 {
28300 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
28301 	{
28302 		/* Note: AX and AY are reversed in Motorola's docs */
28303 		uint ea_src = EA_A7_PD_8();
28304 		uint src = m68ki_read_8(ea_src);
28305 		ea_src = EA_A7_PD_8();
28306 		src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
28307 
28308 		m68ki_write_8(EA_AX_PD_8(), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
28309 		return;
28310 	}
28311 	m68ki_exception_illegal();
28312 }
28313 
28314 
m68k_op_pack_16_mm_axy7(void)28315 static void m68k_op_pack_16_mm_axy7(void)
28316 {
28317 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
28318 	{
28319 		uint ea_src = EA_A7_PD_8();
28320 		uint src = m68ki_read_8(ea_src);
28321 		ea_src = EA_A7_PD_8();
28322 		src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
28323 
28324 		m68ki_write_8(EA_A7_PD_8(), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
28325 		return;
28326 	}
28327 	m68ki_exception_illegal();
28328 }
28329 
28330 
m68k_op_pack_16_mm(void)28331 static void m68k_op_pack_16_mm(void)
28332 {
28333 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
28334 	{
28335 		/* Note: AX and AY are reversed in Motorola's docs */
28336 		uint ea_src = EA_AY_PD_8();
28337 		uint src = m68ki_read_8(ea_src);
28338 		ea_src = EA_AY_PD_8();
28339 		src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
28340 
28341 		m68ki_write_8(EA_AX_PD_8(), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
28342 		return;
28343 	}
28344 	m68ki_exception_illegal();
28345 }
28346 
28347 
m68k_op_pea_32_ai(void)28348 static void m68k_op_pea_32_ai(void)
28349 {
28350 	uint ea = EA_AY_AI_32();
28351 
28352 	m68ki_push_32(ea);
28353 }
28354 
28355 
m68k_op_pea_32_di(void)28356 static void m68k_op_pea_32_di(void)
28357 {
28358 	uint ea = EA_AY_DI_32();
28359 
28360 	m68ki_push_32(ea);
28361 }
28362 
28363 
m68k_op_pea_32_ix(void)28364 static void m68k_op_pea_32_ix(void)
28365 {
28366 	uint ea = EA_AY_IX_32();
28367 
28368 	m68ki_push_32(ea);
28369 }
28370 
28371 
m68k_op_pea_32_aw(void)28372 static void m68k_op_pea_32_aw(void)
28373 {
28374 	uint ea = EA_AW_32();
28375 
28376 	m68ki_push_32(ea);
28377 }
28378 
28379 
m68k_op_pea_32_al(void)28380 static void m68k_op_pea_32_al(void)
28381 {
28382 	uint ea = EA_AL_32();
28383 
28384 	m68ki_push_32(ea);
28385 }
28386 
28387 
m68k_op_pea_32_pcdi(void)28388 static void m68k_op_pea_32_pcdi(void)
28389 {
28390 	uint ea = EA_PCDI_32();
28391 
28392 	m68ki_push_32(ea);
28393 }
28394 
28395 
m68k_op_pea_32_pcix(void)28396 static void m68k_op_pea_32_pcix(void)
28397 {
28398 	uint ea = EA_PCIX_32();
28399 
28400 	m68ki_push_32(ea);
28401 }
28402 
28403 
m68k_op_pflush_32(void)28404 static void m68k_op_pflush_32(void)
28405 {
28406 	if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
28407 	{
28408 		// Nothing to do, unless address translation cache is emulated
28409 		return;
28410 	}
28411 	m68ki_exception_illegal();
28412 }
28413 
28414 
m68k_op_reset(void)28415 static void m68k_op_reset(void)
28416 {
28417 	if(FLAG_S)
28418 	{
28419 		m68ki_output_reset();		   /* auto-disable (see m68kcpu.h) */
28420 		USE_CYCLES(CYC_RESET);
28421 		return;
28422 	}
28423 	m68ki_exception_privilege_violation();
28424 }
28425 
28426 
m68k_op_ror_8_s(void)28427 static void m68k_op_ror_8_s(void)
28428 {
28429 	uint* r_dst = &DY;
28430 	uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1;
28431 	uint shift = orig_shift & 7;
28432 	uint src = MASK_OUT_ABOVE_8(*r_dst);
28433 	uint res = ROR_8(src, shift);
28434 
28435 	if(orig_shift != 0)
28436 		USE_CYCLES(orig_shift<<CYC_SHIFT);
28437 
28438 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
28439 
28440 	FLAG_N = NFLAG_8(res);
28441 	FLAG_Z = res;
28442 	FLAG_C = src << (9-orig_shift);
28443 	FLAG_V = VFLAG_CLEAR;
28444 }
28445 
28446 
m68k_op_ror_16_s(void)28447 static void m68k_op_ror_16_s(void)
28448 {
28449 	uint* r_dst = &DY;
28450 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
28451 	uint src = MASK_OUT_ABOVE_16(*r_dst);
28452 	uint res = ROR_16(src, shift);
28453 
28454 	if(shift != 0)
28455 		USE_CYCLES(shift<<CYC_SHIFT);
28456 
28457 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
28458 
28459 	FLAG_N = NFLAG_16(res);
28460 	FLAG_Z = res;
28461 	FLAG_C = src << (9-shift);
28462 	FLAG_V = VFLAG_CLEAR;
28463 }
28464 
28465 
m68k_op_ror_32_s(void)28466 static void m68k_op_ror_32_s(void)
28467 {
28468 	uint* r_dst = &DY;
28469 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
28470 	uint64 src = *r_dst;
28471 	uint res = ROR_32(src, shift);
28472 
28473 	if(shift != 0)
28474 		USE_CYCLES(shift<<CYC_SHIFT);
28475 
28476 	*r_dst = res;
28477 
28478 	FLAG_N = NFLAG_32(res);
28479 	FLAG_Z = res;
28480 	FLAG_C = src << (9-shift);
28481 	FLAG_V = VFLAG_CLEAR;
28482 }
28483 
28484 
m68k_op_ror_8_r(void)28485 static void m68k_op_ror_8_r(void)
28486 {
28487 	uint* r_dst = &DY;
28488 	uint orig_shift = DX & 0x3f;
28489 	uint shift = orig_shift & 7;
28490 	uint src = MASK_OUT_ABOVE_8(*r_dst);
28491 	uint res = ROR_8(src, shift);
28492 
28493 	if(orig_shift != 0)
28494 	{
28495 		USE_CYCLES(orig_shift<<CYC_SHIFT);
28496 
28497 		*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
28498 		FLAG_C = src << (8-((shift-1)&7));
28499 		FLAG_N = NFLAG_8(res);
28500 		FLAG_Z = res;
28501 		FLAG_V = VFLAG_CLEAR;
28502 		return;
28503 	}
28504 
28505 	FLAG_C = CFLAG_CLEAR;
28506 	FLAG_N = NFLAG_8(src);
28507 	FLAG_Z = src;
28508 	FLAG_V = VFLAG_CLEAR;
28509 }
28510 
28511 
m68k_op_ror_16_r(void)28512 static void m68k_op_ror_16_r(void)
28513 {
28514 	uint* r_dst = &DY;
28515 	uint orig_shift = DX & 0x3f;
28516 	uint shift = orig_shift & 15;
28517 	uint src = MASK_OUT_ABOVE_16(*r_dst);
28518 	uint res = ROR_16(src, shift);
28519 
28520 	if(orig_shift != 0)
28521 	{
28522 		USE_CYCLES(orig_shift<<CYC_SHIFT);
28523 
28524 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
28525 		FLAG_C = (src >> ((shift - 1) & 15)) << 8;
28526 		FLAG_N = NFLAG_16(res);
28527 		FLAG_Z = res;
28528 		FLAG_V = VFLAG_CLEAR;
28529 		return;
28530 	}
28531 
28532 	FLAG_C = CFLAG_CLEAR;
28533 	FLAG_N = NFLAG_16(src);
28534 	FLAG_Z = src;
28535 	FLAG_V = VFLAG_CLEAR;
28536 }
28537 
28538 
m68k_op_ror_32_r(void)28539 static void m68k_op_ror_32_r(void)
28540 {
28541 	uint* r_dst = &DY;
28542 	uint orig_shift = DX & 0x3f;
28543 	uint shift = orig_shift & 31;
28544 	uint64 src = *r_dst;
28545 	uint res = ROR_32(src, shift);
28546 
28547 	if(orig_shift != 0)
28548 	{
28549 		USE_CYCLES(orig_shift<<CYC_SHIFT);
28550 
28551 		*r_dst = res;
28552 		FLAG_C = (src >> ((shift - 1) & 31)) << 8;
28553 		FLAG_N = NFLAG_32(res);
28554 		FLAG_Z = res;
28555 		FLAG_V = VFLAG_CLEAR;
28556 		return;
28557 	}
28558 
28559 	FLAG_C = CFLAG_CLEAR;
28560 	FLAG_N = NFLAG_32(src);
28561 	FLAG_Z = src;
28562 	FLAG_V = VFLAG_CLEAR;
28563 }
28564 
28565 
m68k_op_ror_16_ai(void)28566 static void m68k_op_ror_16_ai(void)
28567 {
28568 	uint ea = EA_AY_AI_16();
28569 	uint src = m68ki_read_16(ea);
28570 	uint res = ROR_16(src, 1);
28571 
28572 	m68ki_write_16(ea, res);
28573 
28574 	FLAG_N = NFLAG_16(res);
28575 	FLAG_Z = res;
28576 	FLAG_C = src << 8;
28577 	FLAG_V = VFLAG_CLEAR;
28578 }
28579 
28580 
m68k_op_ror_16_pi(void)28581 static void m68k_op_ror_16_pi(void)
28582 {
28583 	uint ea = EA_AY_PI_16();
28584 	uint src = m68ki_read_16(ea);
28585 	uint res = ROR_16(src, 1);
28586 
28587 	m68ki_write_16(ea, res);
28588 
28589 	FLAG_N = NFLAG_16(res);
28590 	FLAG_Z = res;
28591 	FLAG_C = src << 8;
28592 	FLAG_V = VFLAG_CLEAR;
28593 }
28594 
28595 
m68k_op_ror_16_pd(void)28596 static void m68k_op_ror_16_pd(void)
28597 {
28598 	uint ea = EA_AY_PD_16();
28599 	uint src = m68ki_read_16(ea);
28600 	uint res = ROR_16(src, 1);
28601 
28602 	m68ki_write_16(ea, res);
28603 
28604 	FLAG_N = NFLAG_16(res);
28605 	FLAG_Z = res;
28606 	FLAG_C = src << 8;
28607 	FLAG_V = VFLAG_CLEAR;
28608 }
28609 
28610 
m68k_op_ror_16_di(void)28611 static void m68k_op_ror_16_di(void)
28612 {
28613 	uint ea = EA_AY_DI_16();
28614 	uint src = m68ki_read_16(ea);
28615 	uint res = ROR_16(src, 1);
28616 
28617 	m68ki_write_16(ea, res);
28618 
28619 	FLAG_N = NFLAG_16(res);
28620 	FLAG_Z = res;
28621 	FLAG_C = src << 8;
28622 	FLAG_V = VFLAG_CLEAR;
28623 }
28624 
28625 
m68k_op_ror_16_ix(void)28626 static void m68k_op_ror_16_ix(void)
28627 {
28628 	uint ea = EA_AY_IX_16();
28629 	uint src = m68ki_read_16(ea);
28630 	uint res = ROR_16(src, 1);
28631 
28632 	m68ki_write_16(ea, res);
28633 
28634 	FLAG_N = NFLAG_16(res);
28635 	FLAG_Z = res;
28636 	FLAG_C = src << 8;
28637 	FLAG_V = VFLAG_CLEAR;
28638 }
28639 
28640 
m68k_op_ror_16_aw(void)28641 static void m68k_op_ror_16_aw(void)
28642 {
28643 	uint ea = EA_AW_16();
28644 	uint src = m68ki_read_16(ea);
28645 	uint res = ROR_16(src, 1);
28646 
28647 	m68ki_write_16(ea, res);
28648 
28649 	FLAG_N = NFLAG_16(res);
28650 	FLAG_Z = res;
28651 	FLAG_C = src << 8;
28652 	FLAG_V = VFLAG_CLEAR;
28653 }
28654 
28655 
m68k_op_ror_16_al(void)28656 static void m68k_op_ror_16_al(void)
28657 {
28658 	uint ea = EA_AL_16();
28659 	uint src = m68ki_read_16(ea);
28660 	uint res = ROR_16(src, 1);
28661 
28662 	m68ki_write_16(ea, res);
28663 
28664 	FLAG_N = NFLAG_16(res);
28665 	FLAG_Z = res;
28666 	FLAG_C = src << 8;
28667 	FLAG_V = VFLAG_CLEAR;
28668 }
28669 
28670 
m68k_op_rol_8_s(void)28671 static void m68k_op_rol_8_s(void)
28672 {
28673 	uint* r_dst = &DY;
28674 	uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1;
28675 	uint shift = orig_shift & 7;
28676 	uint src = MASK_OUT_ABOVE_8(*r_dst);
28677 	uint res = ROL_8(src, shift);
28678 
28679 	if(orig_shift != 0)
28680 		USE_CYCLES(orig_shift<<CYC_SHIFT);
28681 
28682 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
28683 
28684 	FLAG_N = NFLAG_8(res);
28685 	FLAG_Z = res;
28686 	FLAG_C = src << orig_shift;
28687 	FLAG_V = VFLAG_CLEAR;
28688 }
28689 
28690 
m68k_op_rol_16_s(void)28691 static void m68k_op_rol_16_s(void)
28692 {
28693 	uint* r_dst = &DY;
28694 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
28695 	uint src = MASK_OUT_ABOVE_16(*r_dst);
28696 	uint res = ROL_16(src, shift);
28697 
28698 	if(shift != 0)
28699 		USE_CYCLES(shift<<CYC_SHIFT);
28700 
28701 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
28702 
28703 	FLAG_N = NFLAG_16(res);
28704 	FLAG_Z = res;
28705 	FLAG_C = src >> (8-shift);
28706 	FLAG_V = VFLAG_CLEAR;
28707 }
28708 
28709 
m68k_op_rol_32_s(void)28710 static void m68k_op_rol_32_s(void)
28711 {
28712 	uint* r_dst = &DY;
28713 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
28714 	uint64 src = *r_dst;
28715 	uint res = ROL_32(src, shift);
28716 
28717 	if(shift != 0)
28718 		USE_CYCLES(shift<<CYC_SHIFT);
28719 
28720 	*r_dst = res;
28721 
28722 	FLAG_N = NFLAG_32(res);
28723 	FLAG_Z = res;
28724 	FLAG_C = src >> (24-shift);
28725 	FLAG_V = VFLAG_CLEAR;
28726 }
28727 
28728 
m68k_op_rol_8_r(void)28729 static void m68k_op_rol_8_r(void)
28730 {
28731 	uint* r_dst = &DY;
28732 	uint orig_shift = DX & 0x3f;
28733 	uint shift = orig_shift & 7;
28734 	uint src = MASK_OUT_ABOVE_8(*r_dst);
28735 	uint res = ROL_8(src, shift);
28736 
28737 	if(orig_shift != 0)
28738 	{
28739 		USE_CYCLES(orig_shift<<CYC_SHIFT);
28740 
28741 		if(shift != 0)
28742 		{
28743 			*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
28744 			FLAG_C = src << shift;
28745 			FLAG_N = NFLAG_8(res);
28746 			FLAG_Z = res;
28747 			FLAG_V = VFLAG_CLEAR;
28748 			return;
28749 		}
28750 		FLAG_C = (src & 1)<<8;
28751 		FLAG_N = NFLAG_8(src);
28752 		FLAG_Z = src;
28753 		FLAG_V = VFLAG_CLEAR;
28754 		return;
28755 	}
28756 
28757 	FLAG_C = CFLAG_CLEAR;
28758 	FLAG_N = NFLAG_8(src);
28759 	FLAG_Z = src;
28760 	FLAG_V = VFLAG_CLEAR;
28761 }
28762 
28763 
m68k_op_rol_16_r(void)28764 static void m68k_op_rol_16_r(void)
28765 {
28766 	uint* r_dst = &DY;
28767 	uint orig_shift = DX & 0x3f;
28768 	uint shift = orig_shift & 15;
28769 	uint src = MASK_OUT_ABOVE_16(*r_dst);
28770 	uint res = MASK_OUT_ABOVE_16(ROL_16(src, shift));
28771 
28772 	if(orig_shift != 0)
28773 	{
28774 		USE_CYCLES(orig_shift<<CYC_SHIFT);
28775 
28776 		if(shift != 0)
28777 		{
28778 			*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
28779 			FLAG_C = (src << shift) >> 8;
28780 			FLAG_N = NFLAG_16(res);
28781 			FLAG_Z = res;
28782 			FLAG_V = VFLAG_CLEAR;
28783 			return;
28784 		}
28785 		FLAG_C = (src & 1)<<8;
28786 		FLAG_N = NFLAG_16(src);
28787 		FLAG_Z = src;
28788 		FLAG_V = VFLAG_CLEAR;
28789 		return;
28790 	}
28791 
28792 	FLAG_C = CFLAG_CLEAR;
28793 	FLAG_N = NFLAG_16(src);
28794 	FLAG_Z = src;
28795 	FLAG_V = VFLAG_CLEAR;
28796 }
28797 
28798 
m68k_op_rol_32_r(void)28799 static void m68k_op_rol_32_r(void)
28800 {
28801 	uint* r_dst = &DY;
28802 	uint orig_shift = DX & 0x3f;
28803 	uint shift = orig_shift & 31;
28804 	uint64 src = *r_dst;
28805 	uint res = ROL_32(src, shift);
28806 
28807 	if(orig_shift != 0)
28808 	{
28809 		USE_CYCLES(orig_shift<<CYC_SHIFT);
28810 
28811 		*r_dst = res;
28812 
28813 		FLAG_C = (src >> ((32 - shift) & 0x1f)) << 8;
28814 		FLAG_N = NFLAG_32(res);
28815 		FLAG_Z = res;
28816 		FLAG_V = VFLAG_CLEAR;
28817 		return;
28818 	}
28819 
28820 	FLAG_C = CFLAG_CLEAR;
28821 	FLAG_N = NFLAG_32(src);
28822 	FLAG_Z = src;
28823 	FLAG_V = VFLAG_CLEAR;
28824 }
28825 
28826 
m68k_op_rol_16_ai(void)28827 static void m68k_op_rol_16_ai(void)
28828 {
28829 	uint ea = EA_AY_AI_16();
28830 	uint src = m68ki_read_16(ea);
28831 	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
28832 
28833 	m68ki_write_16(ea, res);
28834 
28835 	FLAG_N = NFLAG_16(res);
28836 	FLAG_Z = res;
28837 	FLAG_C = src >> 7;
28838 	FLAG_V = VFLAG_CLEAR;
28839 }
28840 
28841 
m68k_op_rol_16_pi(void)28842 static void m68k_op_rol_16_pi(void)
28843 {
28844 	uint ea = EA_AY_PI_16();
28845 	uint src = m68ki_read_16(ea);
28846 	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
28847 
28848 	m68ki_write_16(ea, res);
28849 
28850 	FLAG_N = NFLAG_16(res);
28851 	FLAG_Z = res;
28852 	FLAG_C = src >> 7;
28853 	FLAG_V = VFLAG_CLEAR;
28854 }
28855 
28856 
m68k_op_rol_16_pd(void)28857 static void m68k_op_rol_16_pd(void)
28858 {
28859 	uint ea = EA_AY_PD_16();
28860 	uint src = m68ki_read_16(ea);
28861 	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
28862 
28863 	m68ki_write_16(ea, res);
28864 
28865 	FLAG_N = NFLAG_16(res);
28866 	FLAG_Z = res;
28867 	FLAG_C = src >> 7;
28868 	FLAG_V = VFLAG_CLEAR;
28869 }
28870 
28871 
m68k_op_rol_16_di(void)28872 static void m68k_op_rol_16_di(void)
28873 {
28874 	uint ea = EA_AY_DI_16();
28875 	uint src = m68ki_read_16(ea);
28876 	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
28877 
28878 	m68ki_write_16(ea, res);
28879 
28880 	FLAG_N = NFLAG_16(res);
28881 	FLAG_Z = res;
28882 	FLAG_C = src >> 7;
28883 	FLAG_V = VFLAG_CLEAR;
28884 }
28885 
28886 
m68k_op_rol_16_ix(void)28887 static void m68k_op_rol_16_ix(void)
28888 {
28889 	uint ea = EA_AY_IX_16();
28890 	uint src = m68ki_read_16(ea);
28891 	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
28892 
28893 	m68ki_write_16(ea, res);
28894 
28895 	FLAG_N = NFLAG_16(res);
28896 	FLAG_Z = res;
28897 	FLAG_C = src >> 7;
28898 	FLAG_V = VFLAG_CLEAR;
28899 }
28900 
28901 
m68k_op_rol_16_aw(void)28902 static void m68k_op_rol_16_aw(void)
28903 {
28904 	uint ea = EA_AW_16();
28905 	uint src = m68ki_read_16(ea);
28906 	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
28907 
28908 	m68ki_write_16(ea, res);
28909 
28910 	FLAG_N = NFLAG_16(res);
28911 	FLAG_Z = res;
28912 	FLAG_C = src >> 7;
28913 	FLAG_V = VFLAG_CLEAR;
28914 }
28915 
28916 
m68k_op_rol_16_al(void)28917 static void m68k_op_rol_16_al(void)
28918 {
28919 	uint ea = EA_AL_16();
28920 	uint src = m68ki_read_16(ea);
28921 	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
28922 
28923 	m68ki_write_16(ea, res);
28924 
28925 	FLAG_N = NFLAG_16(res);
28926 	FLAG_Z = res;
28927 	FLAG_C = src >> 7;
28928 	FLAG_V = VFLAG_CLEAR;
28929 }
28930 
28931 
m68k_op_roxr_8_s(void)28932 static void m68k_op_roxr_8_s(void)
28933 {
28934 	uint* r_dst = &DY;
28935 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
28936 	uint src = MASK_OUT_ABOVE_8(*r_dst);
28937 	uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift);
28938 
28939 	if(shift != 0)
28940 		USE_CYCLES(shift<<CYC_SHIFT);
28941 
28942 	FLAG_C = FLAG_X = res;
28943 	res = MASK_OUT_ABOVE_8(res);
28944 
28945 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
28946 
28947 	FLAG_N = NFLAG_8(res);
28948 	FLAG_Z = res;
28949 	FLAG_V = VFLAG_CLEAR;
28950 }
28951 
28952 
m68k_op_roxr_16_s(void)28953 static void m68k_op_roxr_16_s(void)
28954 {
28955 	uint* r_dst = &DY;
28956 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
28957 	uint src = MASK_OUT_ABOVE_16(*r_dst);
28958 	uint res = ROR_17(src | (XFLAG_AS_1() << 16), shift);
28959 
28960 	if(shift != 0)
28961 		USE_CYCLES(shift<<CYC_SHIFT);
28962 
28963 	FLAG_C = FLAG_X = res >> 8;
28964 	res = MASK_OUT_ABOVE_16(res);
28965 
28966 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
28967 
28968 	FLAG_N = NFLAG_16(res);
28969 	FLAG_Z = res;
28970 	FLAG_V = VFLAG_CLEAR;
28971 }
28972 
28973 
m68k_op_roxr_32_s(void)28974 static void m68k_op_roxr_32_s(void)
28975 {
28976 #if M68K_USE_64_BIT
28977 
28978 	uint*  r_dst = &DY;
28979 	uint   shift = (((REG_IR >> 9) - 1) & 7) + 1;
28980 	uint64 src   = *r_dst;
28981 	uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);
28982 
28983 	if(shift != 0)
28984 		USE_CYCLES(shift<<CYC_SHIFT);
28985 
28986 	res = ROR_33_64(res, shift);
28987 
28988 	FLAG_C = FLAG_X = res >> 24;
28989 	res = MASK_OUT_ABOVE_32(res);
28990 
28991 	*r_dst =  res;
28992 
28993 	FLAG_N = NFLAG_32(res);
28994 	FLAG_Z = res;
28995 	FLAG_V = VFLAG_CLEAR;
28996 
28997 #else
28998 
28999 	uint* r_dst = &DY;
29000 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
29001 	uint src = *r_dst;
29002 	uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift)));
29003 	uint new_x_flag = src & (1 << (shift - 1));
29004 
29005 	if(shift != 0)
29006 		USE_CYCLES(shift<<CYC_SHIFT);
29007 
29008 	*r_dst = res;
29009 
29010 	FLAG_C = FLAG_X = (new_x_flag != 0)<<8;
29011 	FLAG_N = NFLAG_32(res);
29012 	FLAG_Z = res;
29013 	FLAG_V = VFLAG_CLEAR;
29014 
29015 #endif
29016 }
29017 
29018 
m68k_op_roxr_8_r(void)29019 static void m68k_op_roxr_8_r(void)
29020 {
29021 	uint* r_dst = &DY;
29022 	uint orig_shift = DX & 0x3f;
29023 
29024 	if(orig_shift != 0)
29025 	{
29026 		uint shift = orig_shift % 9;
29027 		uint src   = MASK_OUT_ABOVE_8(*r_dst);
29028 		uint res   = ROR_9(src | (XFLAG_AS_1() << 8), shift);
29029 
29030 		USE_CYCLES(orig_shift<<CYC_SHIFT);
29031 
29032 		FLAG_C = FLAG_X = res;
29033 		res = MASK_OUT_ABOVE_8(res);
29034 
29035 		*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
29036 		FLAG_N = NFLAG_8(res);
29037 		FLAG_Z = res;
29038 		FLAG_V = VFLAG_CLEAR;
29039 		return;
29040 	}
29041 
29042 	FLAG_C = FLAG_X;
29043 	FLAG_N = NFLAG_8(*r_dst);
29044 	FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
29045 	FLAG_V = VFLAG_CLEAR;
29046 }
29047 
29048 
m68k_op_roxr_16_r(void)29049 static void m68k_op_roxr_16_r(void)
29050 {
29051 	uint* r_dst = &DY;
29052 	uint orig_shift = DX & 0x3f;
29053 
29054 	if(orig_shift != 0)
29055 	{
29056 		uint shift = orig_shift % 17;
29057 		uint src   = MASK_OUT_ABOVE_16(*r_dst);
29058 		uint res   = ROR_17(src | (XFLAG_AS_1() << 16), shift);
29059 
29060 		USE_CYCLES(orig_shift<<CYC_SHIFT);
29061 
29062 		FLAG_C = FLAG_X = res >> 8;
29063 		res = MASK_OUT_ABOVE_16(res);
29064 
29065 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
29066 		FLAG_N = NFLAG_16(res);
29067 		FLAG_Z = res;
29068 		FLAG_V = VFLAG_CLEAR;
29069 		return;
29070 	}
29071 
29072 	FLAG_C = FLAG_X;
29073 	FLAG_N = NFLAG_16(*r_dst);
29074 	FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
29075 	FLAG_V = VFLAG_CLEAR;
29076 }
29077 
29078 
m68k_op_roxr_32_r(void)29079 static void m68k_op_roxr_32_r(void)
29080 {
29081 #if M68K_USE_64_BIT
29082 
29083 	uint*  r_dst = &DY;
29084 	uint   orig_shift = DX & 0x3f;
29085 
29086 	if(orig_shift != 0)
29087 	{
29088 		uint   shift = orig_shift % 33;
29089 		uint64 src   = *r_dst;
29090 		uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);
29091 
29092 		res = ROR_33_64(res, shift);
29093 
29094 		USE_CYCLES(orig_shift<<CYC_SHIFT);
29095 
29096 		FLAG_C = FLAG_X = res >> 24;
29097 		res = MASK_OUT_ABOVE_32(res);
29098 
29099 		*r_dst = res;
29100 		FLAG_N = NFLAG_32(res);
29101 		FLAG_Z = res;
29102 		FLAG_V = VFLAG_CLEAR;
29103 		return;
29104 	}
29105 
29106 	FLAG_C = FLAG_X;
29107 	FLAG_N = NFLAG_32(*r_dst);
29108 	FLAG_Z = *r_dst;
29109 	FLAG_V = VFLAG_CLEAR;
29110 
29111 #else
29112 
29113 	uint* r_dst = &DY;
29114 	uint orig_shift = DX & 0x3f;
29115 	uint shift = orig_shift % 33;
29116 	uint src = *r_dst;
29117 	uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift)));
29118 	uint new_x_flag = src & (1 << (shift - 1));
29119 
29120 	if(orig_shift != 0)
29121 		USE_CYCLES(orig_shift<<CYC_SHIFT);
29122 
29123 	if(shift != 0)
29124 	{
29125 		*r_dst = res;
29126 		FLAG_X = (new_x_flag != 0)<<8;
29127 	}
29128 	else
29129 		res = src;
29130 	FLAG_C = FLAG_X;
29131 	FLAG_N = NFLAG_32(res);
29132 	FLAG_Z = res;
29133 	FLAG_V = VFLAG_CLEAR;
29134 
29135 #endif
29136 }
29137 
29138 
m68k_op_roxr_16_ai(void)29139 static void m68k_op_roxr_16_ai(void)
29140 {
29141 	uint ea = EA_AY_AI_16();
29142 	uint src = m68ki_read_16(ea);
29143 	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
29144 
29145 	FLAG_C = FLAG_X = res >> 8;
29146 	res = MASK_OUT_ABOVE_16(res);
29147 
29148 	m68ki_write_16(ea, res);
29149 
29150 	FLAG_N = NFLAG_16(res);
29151 	FLAG_Z = res;
29152 	FLAG_V = VFLAG_CLEAR;
29153 }
29154 
29155 
m68k_op_roxr_16_pi(void)29156 static void m68k_op_roxr_16_pi(void)
29157 {
29158 	uint ea = EA_AY_PI_16();
29159 	uint src = m68ki_read_16(ea);
29160 	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
29161 
29162 	FLAG_C = FLAG_X = res >> 8;
29163 	res = MASK_OUT_ABOVE_16(res);
29164 
29165 	m68ki_write_16(ea, res);
29166 
29167 	FLAG_N = NFLAG_16(res);
29168 	FLAG_Z = res;
29169 	FLAG_V = VFLAG_CLEAR;
29170 }
29171 
29172 
m68k_op_roxr_16_pd(void)29173 static void m68k_op_roxr_16_pd(void)
29174 {
29175 	uint ea = EA_AY_PD_16();
29176 	uint src = m68ki_read_16(ea);
29177 	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
29178 
29179 	FLAG_C = FLAG_X = res >> 8;
29180 	res = MASK_OUT_ABOVE_16(res);
29181 
29182 	m68ki_write_16(ea, res);
29183 
29184 	FLAG_N = NFLAG_16(res);
29185 	FLAG_Z = res;
29186 	FLAG_V = VFLAG_CLEAR;
29187 }
29188 
29189 
m68k_op_roxr_16_di(void)29190 static void m68k_op_roxr_16_di(void)
29191 {
29192 	uint ea = EA_AY_DI_16();
29193 	uint src = m68ki_read_16(ea);
29194 	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
29195 
29196 	FLAG_C = FLAG_X = res >> 8;
29197 	res = MASK_OUT_ABOVE_16(res);
29198 
29199 	m68ki_write_16(ea, res);
29200 
29201 	FLAG_N = NFLAG_16(res);
29202 	FLAG_Z = res;
29203 	FLAG_V = VFLAG_CLEAR;
29204 }
29205 
29206 
m68k_op_roxr_16_ix(void)29207 static void m68k_op_roxr_16_ix(void)
29208 {
29209 	uint ea = EA_AY_IX_16();
29210 	uint src = m68ki_read_16(ea);
29211 	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
29212 
29213 	FLAG_C = FLAG_X = res >> 8;
29214 	res = MASK_OUT_ABOVE_16(res);
29215 
29216 	m68ki_write_16(ea, res);
29217 
29218 	FLAG_N = NFLAG_16(res);
29219 	FLAG_Z = res;
29220 	FLAG_V = VFLAG_CLEAR;
29221 }
29222 
29223 
m68k_op_roxr_16_aw(void)29224 static void m68k_op_roxr_16_aw(void)
29225 {
29226 	uint ea = EA_AW_16();
29227 	uint src = m68ki_read_16(ea);
29228 	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
29229 
29230 	FLAG_C = FLAG_X = res >> 8;
29231 	res = MASK_OUT_ABOVE_16(res);
29232 
29233 	m68ki_write_16(ea, res);
29234 
29235 	FLAG_N = NFLAG_16(res);
29236 	FLAG_Z = res;
29237 	FLAG_V = VFLAG_CLEAR;
29238 }
29239 
29240 
m68k_op_roxr_16_al(void)29241 static void m68k_op_roxr_16_al(void)
29242 {
29243 	uint ea = EA_AL_16();
29244 	uint src = m68ki_read_16(ea);
29245 	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
29246 
29247 	FLAG_C = FLAG_X = res >> 8;
29248 	res = MASK_OUT_ABOVE_16(res);
29249 
29250 	m68ki_write_16(ea, res);
29251 
29252 	FLAG_N = NFLAG_16(res);
29253 	FLAG_Z = res;
29254 	FLAG_V = VFLAG_CLEAR;
29255 }
29256 
29257 
m68k_op_roxl_8_s(void)29258 static void m68k_op_roxl_8_s(void)
29259 {
29260 	uint* r_dst = &DY;
29261 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
29262 	uint src = MASK_OUT_ABOVE_8(*r_dst);
29263 	uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift);
29264 
29265 	if(shift != 0)
29266 		USE_CYCLES(shift<<CYC_SHIFT);
29267 
29268 	FLAG_C = FLAG_X = res;
29269 	res = MASK_OUT_ABOVE_8(res);
29270 
29271 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
29272 
29273 	FLAG_N = NFLAG_8(res);
29274 	FLAG_Z = res;
29275 	FLAG_V = VFLAG_CLEAR;
29276 }
29277 
29278 
m68k_op_roxl_16_s(void)29279 static void m68k_op_roxl_16_s(void)
29280 {
29281 	uint* r_dst = &DY;
29282 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
29283 	uint src = MASK_OUT_ABOVE_16(*r_dst);
29284 	uint res = ROL_17(src | (XFLAG_AS_1() << 16), shift);
29285 
29286 	if(shift != 0)
29287 		USE_CYCLES(shift<<CYC_SHIFT);
29288 
29289 	FLAG_C = FLAG_X = res >> 8;
29290 	res = MASK_OUT_ABOVE_16(res);
29291 
29292 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
29293 
29294 	FLAG_N = NFLAG_16(res);
29295 	FLAG_Z = res;
29296 	FLAG_V = VFLAG_CLEAR;
29297 }
29298 
29299 
m68k_op_roxl_32_s(void)29300 static void m68k_op_roxl_32_s(void)
29301 {
29302 #if M68K_USE_64_BIT
29303 
29304 	uint*  r_dst = &DY;
29305 	uint   shift = (((REG_IR >> 9) - 1) & 7) + 1;
29306 	uint64 src   = *r_dst;
29307 	uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);
29308 
29309 	if(shift != 0)
29310 		USE_CYCLES(shift<<CYC_SHIFT);
29311 
29312 	res = ROL_33_64(res, shift);
29313 
29314 	FLAG_C = FLAG_X = res >> 24;
29315 	res = MASK_OUT_ABOVE_32(res);
29316 
29317 	*r_dst = res;
29318 
29319 	FLAG_N = NFLAG_32(res);
29320 	FLAG_Z = res;
29321 	FLAG_V = VFLAG_CLEAR;
29322 
29323 #else
29324 
29325 	uint* r_dst = &DY;
29326 	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
29327 	uint src = *r_dst;
29328 	uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1)));
29329 	uint new_x_flag = src & (1 << (32 - shift));
29330 
29331 	if(shift != 0)
29332 		USE_CYCLES(shift<<CYC_SHIFT);
29333 
29334 	*r_dst = res;
29335 
29336 	FLAG_C = FLAG_X = (new_x_flag != 0)<<8;
29337 	FLAG_N = NFLAG_32(res);
29338 	FLAG_Z = res;
29339 	FLAG_V = VFLAG_CLEAR;
29340 
29341 #endif
29342 }
29343 
29344 
m68k_op_roxl_8_r(void)29345 static void m68k_op_roxl_8_r(void)
29346 {
29347 	uint* r_dst = &DY;
29348 	uint orig_shift = DX & 0x3f;
29349 
29350 
29351 	if(orig_shift != 0)
29352 	{
29353 		uint shift = orig_shift % 9;
29354 		uint src   = MASK_OUT_ABOVE_8(*r_dst);
29355 		uint res   = ROL_9(src | (XFLAG_AS_1() << 8), shift);
29356 
29357 		USE_CYCLES(orig_shift<<CYC_SHIFT);
29358 
29359 		FLAG_C = FLAG_X = res;
29360 		res = MASK_OUT_ABOVE_8(res);
29361 
29362 		*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
29363 		FLAG_N = NFLAG_8(res);
29364 		FLAG_Z = res;
29365 		FLAG_V = VFLAG_CLEAR;
29366 		return;
29367 	}
29368 
29369 	FLAG_C = FLAG_X;
29370 	FLAG_N = NFLAG_8(*r_dst);
29371 	FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
29372 	FLAG_V = VFLAG_CLEAR;
29373 }
29374 
29375 
m68k_op_roxl_16_r(void)29376 static void m68k_op_roxl_16_r(void)
29377 {
29378 	uint* r_dst = &DY;
29379 	uint orig_shift = DX & 0x3f;
29380 
29381 	if(orig_shift != 0)
29382 	{
29383 		uint shift = orig_shift % 17;
29384 		uint src   = MASK_OUT_ABOVE_16(*r_dst);
29385 		uint res   = ROL_17(src | (XFLAG_AS_1() << 16), shift);
29386 
29387 		USE_CYCLES(orig_shift<<CYC_SHIFT);
29388 
29389 		FLAG_C = FLAG_X = res >> 8;
29390 		res = MASK_OUT_ABOVE_16(res);
29391 
29392 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
29393 		FLAG_N = NFLAG_16(res);
29394 		FLAG_Z = res;
29395 		FLAG_V = VFLAG_CLEAR;
29396 		return;
29397 	}
29398 
29399 	FLAG_C = FLAG_X;
29400 	FLAG_N = NFLAG_16(*r_dst);
29401 	FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
29402 	FLAG_V = VFLAG_CLEAR;
29403 }
29404 
29405 
m68k_op_roxl_32_r(void)29406 static void m68k_op_roxl_32_r(void)
29407 {
29408 #if M68K_USE_64_BIT
29409 
29410 	uint*  r_dst = &DY;
29411 	uint   orig_shift = DX & 0x3f;
29412 
29413 	if(orig_shift != 0)
29414 	{
29415 		uint   shift = orig_shift % 33;
29416 		uint64 src   = *r_dst;
29417 		uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);
29418 
29419 		res = ROL_33_64(res, shift);
29420 
29421 		USE_CYCLES(orig_shift<<CYC_SHIFT);
29422 
29423 		FLAG_C = FLAG_X = res >> 24;
29424 		res = MASK_OUT_ABOVE_32(res);
29425 
29426 		*r_dst = res;
29427 		FLAG_N = NFLAG_32(res);
29428 		FLAG_Z = res;
29429 		FLAG_V = VFLAG_CLEAR;
29430 		return;
29431 	}
29432 
29433 	FLAG_C = FLAG_X;
29434 	FLAG_N = NFLAG_32(*r_dst);
29435 	FLAG_Z = *r_dst;
29436 	FLAG_V = VFLAG_CLEAR;
29437 
29438 #else
29439 
29440 	uint* r_dst = &DY;
29441 	uint orig_shift = DX & 0x3f;
29442 	uint shift = orig_shift % 33;
29443 	uint src = *r_dst;
29444 	uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1)));
29445 	uint new_x_flag = src & (1 << (32 - shift));
29446 
29447 	if(orig_shift != 0)
29448 		USE_CYCLES(orig_shift<<CYC_SHIFT);
29449 
29450 	if(shift != 0)
29451 	{
29452 		*r_dst = res;
29453 		FLAG_X = (new_x_flag != 0)<<8;
29454 	}
29455 	else
29456 		res = src;
29457 	FLAG_C = FLAG_X;
29458 	FLAG_N = NFLAG_32(res);
29459 	FLAG_Z = res;
29460 	FLAG_V = VFLAG_CLEAR;
29461 
29462 #endif
29463 }
29464 
29465 
m68k_op_roxl_16_ai(void)29466 static void m68k_op_roxl_16_ai(void)
29467 {
29468 	uint ea = EA_AY_AI_16();
29469 	uint src = m68ki_read_16(ea);
29470 	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
29471 
29472 	FLAG_C = FLAG_X = res >> 8;
29473 	res = MASK_OUT_ABOVE_16(res);
29474 
29475 	m68ki_write_16(ea, res);
29476 
29477 	FLAG_N = NFLAG_16(res);
29478 	FLAG_Z = res;
29479 	FLAG_V = VFLAG_CLEAR;
29480 }
29481 
29482 
m68k_op_roxl_16_pi(void)29483 static void m68k_op_roxl_16_pi(void)
29484 {
29485 	uint ea = EA_AY_PI_16();
29486 	uint src = m68ki_read_16(ea);
29487 	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
29488 
29489 	FLAG_C = FLAG_X = res >> 8;
29490 	res = MASK_OUT_ABOVE_16(res);
29491 
29492 	m68ki_write_16(ea, res);
29493 
29494 	FLAG_N = NFLAG_16(res);
29495 	FLAG_Z = res;
29496 	FLAG_V = VFLAG_CLEAR;
29497 }
29498 
29499 
m68k_op_roxl_16_pd(void)29500 static void m68k_op_roxl_16_pd(void)
29501 {
29502 	uint ea = EA_AY_PD_16();
29503 	uint src = m68ki_read_16(ea);
29504 	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
29505 
29506 	FLAG_C = FLAG_X = res >> 8;
29507 	res = MASK_OUT_ABOVE_16(res);
29508 
29509 	m68ki_write_16(ea, res);
29510 
29511 	FLAG_N = NFLAG_16(res);
29512 	FLAG_Z = res;
29513 	FLAG_V = VFLAG_CLEAR;
29514 }
29515 
29516 
m68k_op_roxl_16_di(void)29517 static void m68k_op_roxl_16_di(void)
29518 {
29519 	uint ea = EA_AY_DI_16();
29520 	uint src = m68ki_read_16(ea);
29521 	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
29522 
29523 	FLAG_C = FLAG_X = res >> 8;
29524 	res = MASK_OUT_ABOVE_16(res);
29525 
29526 	m68ki_write_16(ea, res);
29527 
29528 	FLAG_N = NFLAG_16(res);
29529 	FLAG_Z = res;
29530 	FLAG_V = VFLAG_CLEAR;
29531 }
29532 
29533 
m68k_op_roxl_16_ix(void)29534 static void m68k_op_roxl_16_ix(void)
29535 {
29536 	uint ea = EA_AY_IX_16();
29537 	uint src = m68ki_read_16(ea);
29538 	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
29539 
29540 	FLAG_C = FLAG_X = res >> 8;
29541 	res = MASK_OUT_ABOVE_16(res);
29542 
29543 	m68ki_write_16(ea, res);
29544 
29545 	FLAG_N = NFLAG_16(res);
29546 	FLAG_Z = res;
29547 	FLAG_V = VFLAG_CLEAR;
29548 }
29549 
29550 
m68k_op_roxl_16_aw(void)29551 static void m68k_op_roxl_16_aw(void)
29552 {
29553 	uint ea = EA_AW_16();
29554 	uint src = m68ki_read_16(ea);
29555 	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
29556 
29557 	FLAG_C = FLAG_X = res >> 8;
29558 	res = MASK_OUT_ABOVE_16(res);
29559 
29560 	m68ki_write_16(ea, res);
29561 
29562 	FLAG_N = NFLAG_16(res);
29563 	FLAG_Z = res;
29564 	FLAG_V = VFLAG_CLEAR;
29565 }
29566 
29567 
m68k_op_roxl_16_al(void)29568 static void m68k_op_roxl_16_al(void)
29569 {
29570 	uint ea = EA_AL_16();
29571 	uint src = m68ki_read_16(ea);
29572 	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
29573 
29574 	FLAG_C = FLAG_X = res >> 8;
29575 	res = MASK_OUT_ABOVE_16(res);
29576 
29577 	m68ki_write_16(ea, res);
29578 
29579 	FLAG_N = NFLAG_16(res);
29580 	FLAG_Z = res;
29581 	FLAG_V = VFLAG_CLEAR;
29582 }
29583 
29584 
m68k_op_rtd_32(void)29585 static void m68k_op_rtd_32(void)
29586 {
29587 	if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
29588 	{
29589 		uint new_pc = m68ki_pull_32();
29590 
29591 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
29592 		REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));
29593 		m68ki_jump(new_pc);
29594 		return;
29595 	}
29596 	m68ki_exception_illegal();
29597 }
29598 
29599 
m68k_op_rte_32(void)29600 static void m68k_op_rte_32(void)
29601 {
29602 	if(FLAG_S)
29603 	{
29604 		uint new_sr;
29605 		uint new_pc;
29606 		uint format_word;
29607 
29608 		m68ki_rte_callback();		   /* auto-disable (see m68kcpu.h) */
29609 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
29610 
29611 		if(CPU_TYPE_IS_000(CPU_TYPE))
29612 		{
29613 			new_sr = m68ki_pull_16();
29614 			new_pc = m68ki_pull_32();
29615 			m68ki_jump(new_pc);
29616 			m68ki_set_sr(new_sr);
29617 
29618 			CPU_INSTR_MODE = INSTRUCTION_YES;
29619 			CPU_RUN_MODE = RUN_MODE_NORMAL;
29620 
29621 			return;
29622 		}
29623 
29624 		if(CPU_TYPE_IS_010(CPU_TYPE))
29625 		{
29626 			format_word = m68ki_read_16(REG_A[7]+6) >> 12;
29627 			if(format_word == 0)
29628 			{
29629 				new_sr = m68ki_pull_16();
29630 				new_pc = m68ki_pull_32();
29631 				m68ki_fake_pull_16();	/* format word */
29632 				m68ki_jump(new_pc);
29633 				m68ki_set_sr(new_sr);
29634 				CPU_INSTR_MODE = INSTRUCTION_YES;
29635 				CPU_RUN_MODE = RUN_MODE_NORMAL;
29636 				return;
29637 			}
29638 			CPU_INSTR_MODE = INSTRUCTION_YES;
29639 			CPU_RUN_MODE = RUN_MODE_NORMAL;
29640 			/* Not handling bus fault (9) */
29641 			m68ki_exception_format_error();
29642 			return;
29643 		}
29644 
29645 		/* Otherwise it's 020 */
29646 rte_loop:
29647 		format_word = m68ki_read_16(REG_A[7]+6) >> 12;
29648 		switch(format_word)
29649 		{
29650 			case 0: /* Normal */
29651 				new_sr = m68ki_pull_16();
29652 				new_pc = m68ki_pull_32();
29653 				m68ki_fake_pull_16();	/* format word */
29654 				m68ki_jump(new_pc);
29655 				m68ki_set_sr(new_sr);
29656 				CPU_INSTR_MODE = INSTRUCTION_YES;
29657 				CPU_RUN_MODE = RUN_MODE_NORMAL;
29658 				return;
29659 			case 1: /* Throwaway */
29660 				new_sr = m68ki_pull_16();
29661 				m68ki_fake_pull_32();	/* program counter */
29662 				m68ki_fake_pull_16();	/* format word */
29663 				m68ki_set_sr_noint(new_sr);
29664 				goto rte_loop;
29665 			case 2: /* Trap */
29666 				new_sr = m68ki_pull_16();
29667 				new_pc = m68ki_pull_32();
29668 				m68ki_fake_pull_16();	/* format word */
29669 				m68ki_fake_pull_32();	/* address */
29670 				m68ki_jump(new_pc);
29671 				m68ki_set_sr(new_sr);
29672 				CPU_INSTR_MODE = INSTRUCTION_YES;
29673 				CPU_RUN_MODE = RUN_MODE_NORMAL;
29674 				return;
29675 		}
29676 		/* Not handling long or short bus fault */
29677 		CPU_INSTR_MODE = INSTRUCTION_YES;
29678 		CPU_RUN_MODE = RUN_MODE_NORMAL;
29679 		m68ki_exception_format_error();
29680 		return;
29681 	}
29682 	m68ki_exception_privilege_violation();
29683 }
29684 
29685 
m68k_op_rtm_32(void)29686 static void m68k_op_rtm_32(void)
29687 {
29688 	if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
29689 	{
29690 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
29691 		M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
29692 					 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
29693 					 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
29694 		return;
29695 	}
29696 	m68ki_exception_illegal();
29697 }
29698 
29699 
m68k_op_rtr_32(void)29700 static void m68k_op_rtr_32(void)
29701 {
29702 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
29703 	m68ki_set_ccr(m68ki_pull_16());
29704 	m68ki_jump(m68ki_pull_32());
29705 }
29706 
29707 
m68k_op_rts_32(void)29708 static void m68k_op_rts_32(void)
29709 {
29710 	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
29711 	m68ki_jump(m68ki_pull_32());
29712 }
29713 
29714 
m68k_op_sbcd_8_rr(void)29715 static void m68k_op_sbcd_8_rr(void)
29716 {
29717 	uint* r_dst = &DX;
29718 	uint src = DY;
29719 	uint dst = *r_dst;
29720 	uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
29721 	uint corf = 0;
29722 
29723 	if(res > 0xf)
29724 		corf = 6;
29725 	res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
29726 	FLAG_V = res; /* Undefined V behavior */
29727 	if(res > 0xff)
29728 	{
29729 		res += 0xa0;
29730 		FLAG_X = FLAG_C = CFLAG_SET;
29731 	}
29732 	else if(res < corf)
29733 		FLAG_X = FLAG_C = CFLAG_SET;
29734 	else
29735 		FLAG_N = FLAG_X = FLAG_C = 0;
29736 
29737 	res = MASK_OUT_ABOVE_8(res - corf);
29738 
29739 	FLAG_V &= ~res; /* Undefined V behavior part II */
29740 	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
29741 	FLAG_Z |= res;
29742 
29743 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
29744 }
29745 
29746 
m68k_op_sbcd_8_mm_ax7(void)29747 static void m68k_op_sbcd_8_mm_ax7(void)
29748 {
29749 	uint src = OPER_AY_PD_8();
29750 	uint ea  = EA_A7_PD_8();
29751 	uint dst = m68ki_read_8(ea);
29752 	uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
29753 	uint corf = 0;
29754 
29755 	if(res > 0xf)
29756 		corf = 6;
29757 	res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
29758 	FLAG_V = res; /* Undefined V behavior */
29759 	if(res > 0xff)
29760 	{
29761 		res += 0xa0;
29762 		FLAG_X = FLAG_C = CFLAG_SET;
29763 	}
29764 	else if(res < corf)
29765 		FLAG_X = FLAG_C = CFLAG_SET;
29766 	else
29767 		FLAG_N = FLAG_X = FLAG_C = 0;
29768 
29769 	res = MASK_OUT_ABOVE_8(res - corf);
29770 
29771 	FLAG_V &= ~res; /* Undefined V behavior part II */
29772 	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
29773 	FLAG_Z |= res;
29774 
29775 	m68ki_write_8(ea, res);
29776 }
29777 
29778 
m68k_op_sbcd_8_mm_ay7(void)29779 static void m68k_op_sbcd_8_mm_ay7(void)
29780 {
29781 	uint src = OPER_A7_PD_8();
29782 	uint ea  = EA_AX_PD_8();
29783 	uint dst = m68ki_read_8(ea);
29784 	uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
29785 	uint corf = 0;
29786 
29787 	if(res > 0xf)
29788 		corf = 6;
29789 	res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
29790 	FLAG_V = res; /* Undefined V behavior */
29791 	if(res > 0xff)
29792 	{
29793 		res += 0xa0;
29794 		FLAG_X = FLAG_C = CFLAG_SET;
29795 	}
29796 	else if(res < corf)
29797 		FLAG_X = FLAG_C = CFLAG_SET;
29798 	else
29799 		FLAG_N = FLAG_X = FLAG_C = 0;
29800 
29801 	res = MASK_OUT_ABOVE_8(res - corf);
29802 
29803 	FLAG_V &= ~res; /* Undefined V behavior part II */
29804 	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
29805 	FLAG_Z |= res;
29806 
29807 	m68ki_write_8(ea, res);
29808 }
29809 
29810 
m68k_op_sbcd_8_mm_axy7(void)29811 static void m68k_op_sbcd_8_mm_axy7(void)
29812 {
29813 	uint src = OPER_A7_PD_8();
29814 	uint ea  = EA_A7_PD_8();
29815 	uint dst = m68ki_read_8(ea);
29816 	uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
29817 	uint corf = 0;
29818 
29819 	if(res > 0xf)
29820 		corf = 6;
29821 	res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
29822 	FLAG_V = res; /* Undefined V behavior */
29823 	if(res > 0xff)
29824 	{
29825 		res += 0xa0;
29826 		FLAG_X = FLAG_C = CFLAG_SET;
29827 	}
29828 	else if(res < corf)
29829 		FLAG_X = FLAG_C = CFLAG_SET;
29830 	else
29831 		FLAG_N = FLAG_X = FLAG_C = 0;
29832 
29833 	res = MASK_OUT_ABOVE_8(res - corf);
29834 
29835 	FLAG_V &= ~res; /* Undefined V behavior part II */
29836 	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
29837 	FLAG_Z |= res;
29838 
29839 	m68ki_write_8(ea, res);
29840 }
29841 
29842 
m68k_op_sbcd_8_mm(void)29843 static void m68k_op_sbcd_8_mm(void)
29844 {
29845 	uint src = OPER_AY_PD_8();
29846 	uint ea  = EA_AX_PD_8();
29847 	uint dst = m68ki_read_8(ea);
29848 	uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
29849 	uint corf = 0;
29850 
29851 	if(res > 0xf)
29852 		corf = 6;
29853 	res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
29854 	FLAG_V = res; /* Undefined V behavior */
29855 	if(res > 0xff)
29856 	{
29857 		res += 0xa0;
29858 		FLAG_X = FLAG_C = CFLAG_SET;
29859 	}
29860 	else if(res < corf)
29861 		FLAG_X = FLAG_C = CFLAG_SET;
29862 	else
29863 		FLAG_N = FLAG_X = FLAG_C = 0;
29864 
29865 	res = MASK_OUT_ABOVE_8(res - corf);
29866 
29867 	FLAG_V &= ~res; /* Undefined V behavior part II */
29868 	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
29869 	FLAG_Z |= res;
29870 
29871 	m68ki_write_8(ea, res);
29872 }
29873 
29874 
m68k_op_st_8_d(void)29875 static void m68k_op_st_8_d(void)
29876 {
29877 	DY |= 0xff;
29878 }
29879 
29880 
m68k_op_st_8_ai(void)29881 static void m68k_op_st_8_ai(void)
29882 {
29883 	m68ki_write_8(EA_AY_AI_8(), 0xff);
29884 }
29885 
29886 
m68k_op_st_8_pi(void)29887 static void m68k_op_st_8_pi(void)
29888 {
29889 	m68ki_write_8(EA_AY_PI_8(), 0xff);
29890 }
29891 
29892 
m68k_op_st_8_pi7(void)29893 static void m68k_op_st_8_pi7(void)
29894 {
29895 	m68ki_write_8(EA_A7_PI_8(), 0xff);
29896 }
29897 
29898 
m68k_op_st_8_pd(void)29899 static void m68k_op_st_8_pd(void)
29900 {
29901 	m68ki_write_8(EA_AY_PD_8(), 0xff);
29902 }
29903 
29904 
m68k_op_st_8_pd7(void)29905 static void m68k_op_st_8_pd7(void)
29906 {
29907 	m68ki_write_8(EA_A7_PD_8(), 0xff);
29908 }
29909 
29910 
m68k_op_st_8_di(void)29911 static void m68k_op_st_8_di(void)
29912 {
29913 	m68ki_write_8(EA_AY_DI_8(), 0xff);
29914 }
29915 
29916 
m68k_op_st_8_ix(void)29917 static void m68k_op_st_8_ix(void)
29918 {
29919 	m68ki_write_8(EA_AY_IX_8(), 0xff);
29920 }
29921 
29922 
m68k_op_st_8_aw(void)29923 static void m68k_op_st_8_aw(void)
29924 {
29925 	m68ki_write_8(EA_AW_8(), 0xff);
29926 }
29927 
29928 
m68k_op_st_8_al(void)29929 static void m68k_op_st_8_al(void)
29930 {
29931 	m68ki_write_8(EA_AL_8(), 0xff);
29932 }
29933 
29934 
m68k_op_sf_8_d(void)29935 static void m68k_op_sf_8_d(void)
29936 {
29937 	DY &= 0xffffff00;
29938 }
29939 
29940 
m68k_op_sf_8_ai(void)29941 static void m68k_op_sf_8_ai(void)
29942 {
29943 	m68ki_write_8(EA_AY_AI_8(), 0);
29944 }
29945 
29946 
m68k_op_sf_8_pi(void)29947 static void m68k_op_sf_8_pi(void)
29948 {
29949 	m68ki_write_8(EA_AY_PI_8(), 0);
29950 }
29951 
29952 
m68k_op_sf_8_pi7(void)29953 static void m68k_op_sf_8_pi7(void)
29954 {
29955 	m68ki_write_8(EA_A7_PI_8(), 0);
29956 }
29957 
29958 
m68k_op_sf_8_pd(void)29959 static void m68k_op_sf_8_pd(void)
29960 {
29961 	m68ki_write_8(EA_AY_PD_8(), 0);
29962 }
29963 
29964 
m68k_op_sf_8_pd7(void)29965 static void m68k_op_sf_8_pd7(void)
29966 {
29967 	m68ki_write_8(EA_A7_PD_8(), 0);
29968 }
29969 
29970 
m68k_op_sf_8_di(void)29971 static void m68k_op_sf_8_di(void)
29972 {
29973 	m68ki_write_8(EA_AY_DI_8(), 0);
29974 }
29975 
29976 
m68k_op_sf_8_ix(void)29977 static void m68k_op_sf_8_ix(void)
29978 {
29979 	m68ki_write_8(EA_AY_IX_8(), 0);
29980 }
29981 
29982 
m68k_op_sf_8_aw(void)29983 static void m68k_op_sf_8_aw(void)
29984 {
29985 	m68ki_write_8(EA_AW_8(), 0);
29986 }
29987 
29988 
m68k_op_sf_8_al(void)29989 static void m68k_op_sf_8_al(void)
29990 {
29991 	m68ki_write_8(EA_AL_8(), 0);
29992 }
29993 
29994 
m68k_op_shi_8_d(void)29995 static void m68k_op_shi_8_d(void)
29996 {
29997 	if(COND_HI())
29998 	{
29999 		DY |= 0xff;
30000 		USE_CYCLES(CYC_SCC_R_TRUE);
30001 		return;
30002 	}
30003 	DY &= 0xffffff00;
30004 }
30005 
30006 
m68k_op_sls_8_d(void)30007 static void m68k_op_sls_8_d(void)
30008 {
30009 	if(COND_LS())
30010 	{
30011 		DY |= 0xff;
30012 		USE_CYCLES(CYC_SCC_R_TRUE);
30013 		return;
30014 	}
30015 	DY &= 0xffffff00;
30016 }
30017 
30018 
m68k_op_scc_8_d(void)30019 static void m68k_op_scc_8_d(void)
30020 {
30021 	if(COND_CC())
30022 	{
30023 		DY |= 0xff;
30024 		USE_CYCLES(CYC_SCC_R_TRUE);
30025 		return;
30026 	}
30027 	DY &= 0xffffff00;
30028 }
30029 
30030 
m68k_op_scs_8_d(void)30031 static void m68k_op_scs_8_d(void)
30032 {
30033 	if(COND_CS())
30034 	{
30035 		DY |= 0xff;
30036 		USE_CYCLES(CYC_SCC_R_TRUE);
30037 		return;
30038 	}
30039 	DY &= 0xffffff00;
30040 }
30041 
30042 
m68k_op_sne_8_d(void)30043 static void m68k_op_sne_8_d(void)
30044 {
30045 	if(COND_NE())
30046 	{
30047 		DY |= 0xff;
30048 		USE_CYCLES(CYC_SCC_R_TRUE);
30049 		return;
30050 	}
30051 	DY &= 0xffffff00;
30052 }
30053 
30054 
m68k_op_seq_8_d(void)30055 static void m68k_op_seq_8_d(void)
30056 {
30057 	if(COND_EQ())
30058 	{
30059 		DY |= 0xff;
30060 		USE_CYCLES(CYC_SCC_R_TRUE);
30061 		return;
30062 	}
30063 	DY &= 0xffffff00;
30064 }
30065 
30066 
m68k_op_svc_8_d(void)30067 static void m68k_op_svc_8_d(void)
30068 {
30069 	if(COND_VC())
30070 	{
30071 		DY |= 0xff;
30072 		USE_CYCLES(CYC_SCC_R_TRUE);
30073 		return;
30074 	}
30075 	DY &= 0xffffff00;
30076 }
30077 
30078 
m68k_op_svs_8_d(void)30079 static void m68k_op_svs_8_d(void)
30080 {
30081 	if(COND_VS())
30082 	{
30083 		DY |= 0xff;
30084 		USE_CYCLES(CYC_SCC_R_TRUE);
30085 		return;
30086 	}
30087 	DY &= 0xffffff00;
30088 }
30089 
30090 
m68k_op_spl_8_d(void)30091 static void m68k_op_spl_8_d(void)
30092 {
30093 	if(COND_PL())
30094 	{
30095 		DY |= 0xff;
30096 		USE_CYCLES(CYC_SCC_R_TRUE);
30097 		return;
30098 	}
30099 	DY &= 0xffffff00;
30100 }
30101 
30102 
m68k_op_smi_8_d(void)30103 static void m68k_op_smi_8_d(void)
30104 {
30105 	if(COND_MI())
30106 	{
30107 		DY |= 0xff;
30108 		USE_CYCLES(CYC_SCC_R_TRUE);
30109 		return;
30110 	}
30111 	DY &= 0xffffff00;
30112 }
30113 
30114 
m68k_op_sge_8_d(void)30115 static void m68k_op_sge_8_d(void)
30116 {
30117 	if(COND_GE())
30118 	{
30119 		DY |= 0xff;
30120 		USE_CYCLES(CYC_SCC_R_TRUE);
30121 		return;
30122 	}
30123 	DY &= 0xffffff00;
30124 }
30125 
30126 
m68k_op_slt_8_d(void)30127 static void m68k_op_slt_8_d(void)
30128 {
30129 	if(COND_LT())
30130 	{
30131 		DY |= 0xff;
30132 		USE_CYCLES(CYC_SCC_R_TRUE);
30133 		return;
30134 	}
30135 	DY &= 0xffffff00;
30136 }
30137 
30138 
m68k_op_sgt_8_d(void)30139 static void m68k_op_sgt_8_d(void)
30140 {
30141 	if(COND_GT())
30142 	{
30143 		DY |= 0xff;
30144 		USE_CYCLES(CYC_SCC_R_TRUE);
30145 		return;
30146 	}
30147 	DY &= 0xffffff00;
30148 }
30149 
30150 
m68k_op_sle_8_d(void)30151 static void m68k_op_sle_8_d(void)
30152 {
30153 	if(COND_LE())
30154 	{
30155 		DY |= 0xff;
30156 		USE_CYCLES(CYC_SCC_R_TRUE);
30157 		return;
30158 	}
30159 	DY &= 0xffffff00;
30160 }
30161 
30162 
m68k_op_shi_8_ai(void)30163 static void m68k_op_shi_8_ai(void)
30164 {
30165 	m68ki_write_8(EA_AY_AI_8(), COND_HI() ? 0xff : 0);
30166 }
30167 
30168 
m68k_op_shi_8_pi(void)30169 static void m68k_op_shi_8_pi(void)
30170 {
30171 	m68ki_write_8(EA_AY_PI_8(), COND_HI() ? 0xff : 0);
30172 }
30173 
30174 
m68k_op_shi_8_pi7(void)30175 static void m68k_op_shi_8_pi7(void)
30176 {
30177 	m68ki_write_8(EA_A7_PI_8(), COND_HI() ? 0xff : 0);
30178 }
30179 
30180 
m68k_op_shi_8_pd(void)30181 static void m68k_op_shi_8_pd(void)
30182 {
30183 	m68ki_write_8(EA_AY_PD_8(), COND_HI() ? 0xff : 0);
30184 }
30185 
30186 
m68k_op_shi_8_pd7(void)30187 static void m68k_op_shi_8_pd7(void)
30188 {
30189 	m68ki_write_8(EA_A7_PD_8(), COND_HI() ? 0xff : 0);
30190 }
30191 
30192 
m68k_op_shi_8_di(void)30193 static void m68k_op_shi_8_di(void)
30194 {
30195 	m68ki_write_8(EA_AY_DI_8(), COND_HI() ? 0xff : 0);
30196 }
30197 
30198 
m68k_op_shi_8_ix(void)30199 static void m68k_op_shi_8_ix(void)
30200 {
30201 	m68ki_write_8(EA_AY_IX_8(), COND_HI() ? 0xff : 0);
30202 }
30203 
30204 
m68k_op_shi_8_aw(void)30205 static void m68k_op_shi_8_aw(void)
30206 {
30207 	m68ki_write_8(EA_AW_8(), COND_HI() ? 0xff : 0);
30208 }
30209 
30210 
m68k_op_shi_8_al(void)30211 static void m68k_op_shi_8_al(void)
30212 {
30213 	m68ki_write_8(EA_AL_8(), COND_HI() ? 0xff : 0);
30214 }
30215 
30216 
m68k_op_sls_8_ai(void)30217 static void m68k_op_sls_8_ai(void)
30218 {
30219 	m68ki_write_8(EA_AY_AI_8(), COND_LS() ? 0xff : 0);
30220 }
30221 
30222 
m68k_op_sls_8_pi(void)30223 static void m68k_op_sls_8_pi(void)
30224 {
30225 	m68ki_write_8(EA_AY_PI_8(), COND_LS() ? 0xff : 0);
30226 }
30227 
30228 
m68k_op_sls_8_pi7(void)30229 static void m68k_op_sls_8_pi7(void)
30230 {
30231 	m68ki_write_8(EA_A7_PI_8(), COND_LS() ? 0xff : 0);
30232 }
30233 
30234 
m68k_op_sls_8_pd(void)30235 static void m68k_op_sls_8_pd(void)
30236 {
30237 	m68ki_write_8(EA_AY_PD_8(), COND_LS() ? 0xff : 0);
30238 }
30239 
30240 
m68k_op_sls_8_pd7(void)30241 static void m68k_op_sls_8_pd7(void)
30242 {
30243 	m68ki_write_8(EA_A7_PD_8(), COND_LS() ? 0xff : 0);
30244 }
30245 
30246 
m68k_op_sls_8_di(void)30247 static void m68k_op_sls_8_di(void)
30248 {
30249 	m68ki_write_8(EA_AY_DI_8(), COND_LS() ? 0xff : 0);
30250 }
30251 
30252 
m68k_op_sls_8_ix(void)30253 static void m68k_op_sls_8_ix(void)
30254 {
30255 	m68ki_write_8(EA_AY_IX_8(), COND_LS() ? 0xff : 0);
30256 }
30257 
30258 
m68k_op_sls_8_aw(void)30259 static void m68k_op_sls_8_aw(void)
30260 {
30261 	m68ki_write_8(EA_AW_8(), COND_LS() ? 0xff : 0);
30262 }
30263 
30264 
m68k_op_sls_8_al(void)30265 static void m68k_op_sls_8_al(void)
30266 {
30267 	m68ki_write_8(EA_AL_8(), COND_LS() ? 0xff : 0);
30268 }
30269 
30270 
m68k_op_scc_8_ai(void)30271 static void m68k_op_scc_8_ai(void)
30272 {
30273 	m68ki_write_8(EA_AY_AI_8(), COND_CC() ? 0xff : 0);
30274 }
30275 
30276 
m68k_op_scc_8_pi(void)30277 static void m68k_op_scc_8_pi(void)
30278 {
30279 	m68ki_write_8(EA_AY_PI_8(), COND_CC() ? 0xff : 0);
30280 }
30281 
30282 
m68k_op_scc_8_pi7(void)30283 static void m68k_op_scc_8_pi7(void)
30284 {
30285 	m68ki_write_8(EA_A7_PI_8(), COND_CC() ? 0xff : 0);
30286 }
30287 
30288 
m68k_op_scc_8_pd(void)30289 static void m68k_op_scc_8_pd(void)
30290 {
30291 	m68ki_write_8(EA_AY_PD_8(), COND_CC() ? 0xff : 0);
30292 }
30293 
30294 
m68k_op_scc_8_pd7(void)30295 static void m68k_op_scc_8_pd7(void)
30296 {
30297 	m68ki_write_8(EA_A7_PD_8(), COND_CC() ? 0xff : 0);
30298 }
30299 
30300 
m68k_op_scc_8_di(void)30301 static void m68k_op_scc_8_di(void)
30302 {
30303 	m68ki_write_8(EA_AY_DI_8(), COND_CC() ? 0xff : 0);
30304 }
30305 
30306 
m68k_op_scc_8_ix(void)30307 static void m68k_op_scc_8_ix(void)
30308 {
30309 	m68ki_write_8(EA_AY_IX_8(), COND_CC() ? 0xff : 0);
30310 }
30311 
30312 
m68k_op_scc_8_aw(void)30313 static void m68k_op_scc_8_aw(void)
30314 {
30315 	m68ki_write_8(EA_AW_8(), COND_CC() ? 0xff : 0);
30316 }
30317 
30318 
m68k_op_scc_8_al(void)30319 static void m68k_op_scc_8_al(void)
30320 {
30321 	m68ki_write_8(EA_AL_8(), COND_CC() ? 0xff : 0);
30322 }
30323 
30324 
m68k_op_scs_8_ai(void)30325 static void m68k_op_scs_8_ai(void)
30326 {
30327 	m68ki_write_8(EA_AY_AI_8(), COND_CS() ? 0xff : 0);
30328 }
30329 
30330 
m68k_op_scs_8_pi(void)30331 static void m68k_op_scs_8_pi(void)
30332 {
30333 	m68ki_write_8(EA_AY_PI_8(), COND_CS() ? 0xff : 0);
30334 }
30335 
30336 
m68k_op_scs_8_pi7(void)30337 static void m68k_op_scs_8_pi7(void)
30338 {
30339 	m68ki_write_8(EA_A7_PI_8(), COND_CS() ? 0xff : 0);
30340 }
30341 
30342 
m68k_op_scs_8_pd(void)30343 static void m68k_op_scs_8_pd(void)
30344 {
30345 	m68ki_write_8(EA_AY_PD_8(), COND_CS() ? 0xff : 0);
30346 }
30347 
30348 
m68k_op_scs_8_pd7(void)30349 static void m68k_op_scs_8_pd7(void)
30350 {
30351 	m68ki_write_8(EA_A7_PD_8(), COND_CS() ? 0xff : 0);
30352 }
30353 
30354 
m68k_op_scs_8_di(void)30355 static void m68k_op_scs_8_di(void)
30356 {
30357 	m68ki_write_8(EA_AY_DI_8(), COND_CS() ? 0xff : 0);
30358 }
30359 
30360 
m68k_op_scs_8_ix(void)30361 static void m68k_op_scs_8_ix(void)
30362 {
30363 	m68ki_write_8(EA_AY_IX_8(), COND_CS() ? 0xff : 0);
30364 }
30365 
30366 
m68k_op_scs_8_aw(void)30367 static void m68k_op_scs_8_aw(void)
30368 {
30369 	m68ki_write_8(EA_AW_8(), COND_CS() ? 0xff : 0);
30370 }
30371 
30372 
m68k_op_scs_8_al(void)30373 static void m68k_op_scs_8_al(void)
30374 {
30375 	m68ki_write_8(EA_AL_8(), COND_CS() ? 0xff : 0);
30376 }
30377 
30378 
m68k_op_sne_8_ai(void)30379 static void m68k_op_sne_8_ai(void)
30380 {
30381 	m68ki_write_8(EA_AY_AI_8(), COND_NE() ? 0xff : 0);
30382 }
30383 
30384 
m68k_op_sne_8_pi(void)30385 static void m68k_op_sne_8_pi(void)
30386 {
30387 	m68ki_write_8(EA_AY_PI_8(), COND_NE() ? 0xff : 0);
30388 }
30389 
30390 
m68k_op_sne_8_pi7(void)30391 static void m68k_op_sne_8_pi7(void)
30392 {
30393 	m68ki_write_8(EA_A7_PI_8(), COND_NE() ? 0xff : 0);
30394 }
30395 
30396 
m68k_op_sne_8_pd(void)30397 static void m68k_op_sne_8_pd(void)
30398 {
30399 	m68ki_write_8(EA_AY_PD_8(), COND_NE() ? 0xff : 0);
30400 }
30401 
30402 
m68k_op_sne_8_pd7(void)30403 static void m68k_op_sne_8_pd7(void)
30404 {
30405 	m68ki_write_8(EA_A7_PD_8(), COND_NE() ? 0xff : 0);
30406 }
30407 
30408 
m68k_op_sne_8_di(void)30409 static void m68k_op_sne_8_di(void)
30410 {
30411 	m68ki_write_8(EA_AY_DI_8(), COND_NE() ? 0xff : 0);
30412 }
30413 
30414 
m68k_op_sne_8_ix(void)30415 static void m68k_op_sne_8_ix(void)
30416 {
30417 	m68ki_write_8(EA_AY_IX_8(), COND_NE() ? 0xff : 0);
30418 }
30419 
30420 
m68k_op_sne_8_aw(void)30421 static void m68k_op_sne_8_aw(void)
30422 {
30423 	m68ki_write_8(EA_AW_8(), COND_NE() ? 0xff : 0);
30424 }
30425 
30426 
m68k_op_sne_8_al(void)30427 static void m68k_op_sne_8_al(void)
30428 {
30429 	m68ki_write_8(EA_AL_8(), COND_NE() ? 0xff : 0);
30430 }
30431 
30432 
m68k_op_seq_8_ai(void)30433 static void m68k_op_seq_8_ai(void)
30434 {
30435 	m68ki_write_8(EA_AY_AI_8(), COND_EQ() ? 0xff : 0);
30436 }
30437 
30438 
m68k_op_seq_8_pi(void)30439 static void m68k_op_seq_8_pi(void)
30440 {
30441 	m68ki_write_8(EA_AY_PI_8(), COND_EQ() ? 0xff : 0);
30442 }
30443 
30444 
m68k_op_seq_8_pi7(void)30445 static void m68k_op_seq_8_pi7(void)
30446 {
30447 	m68ki_write_8(EA_A7_PI_8(), COND_EQ() ? 0xff : 0);
30448 }
30449 
30450 
m68k_op_seq_8_pd(void)30451 static void m68k_op_seq_8_pd(void)
30452 {
30453 	m68ki_write_8(EA_AY_PD_8(), COND_EQ() ? 0xff : 0);
30454 }
30455 
30456 
m68k_op_seq_8_pd7(void)30457 static void m68k_op_seq_8_pd7(void)
30458 {
30459 	m68ki_write_8(EA_A7_PD_8(), COND_EQ() ? 0xff : 0);
30460 }
30461 
30462 
m68k_op_seq_8_di(void)30463 static void m68k_op_seq_8_di(void)
30464 {
30465 	m68ki_write_8(EA_AY_DI_8(), COND_EQ() ? 0xff : 0);
30466 }
30467 
30468 
m68k_op_seq_8_ix(void)30469 static void m68k_op_seq_8_ix(void)
30470 {
30471 	m68ki_write_8(EA_AY_IX_8(), COND_EQ() ? 0xff : 0);
30472 }
30473 
30474 
m68k_op_seq_8_aw(void)30475 static void m68k_op_seq_8_aw(void)
30476 {
30477 	m68ki_write_8(EA_AW_8(), COND_EQ() ? 0xff : 0);
30478 }
30479 
30480 
m68k_op_seq_8_al(void)30481 static void m68k_op_seq_8_al(void)
30482 {
30483 	m68ki_write_8(EA_AL_8(), COND_EQ() ? 0xff : 0);
30484 }
30485 
30486 
m68k_op_svc_8_ai(void)30487 static void m68k_op_svc_8_ai(void)
30488 {
30489 	m68ki_write_8(EA_AY_AI_8(), COND_VC() ? 0xff : 0);
30490 }
30491 
30492 
m68k_op_svc_8_pi(void)30493 static void m68k_op_svc_8_pi(void)
30494 {
30495 	m68ki_write_8(EA_AY_PI_8(), COND_VC() ? 0xff : 0);
30496 }
30497 
30498 
m68k_op_svc_8_pi7(void)30499 static void m68k_op_svc_8_pi7(void)
30500 {
30501 	m68ki_write_8(EA_A7_PI_8(), COND_VC() ? 0xff : 0);
30502 }
30503 
30504 
m68k_op_svc_8_pd(void)30505 static void m68k_op_svc_8_pd(void)
30506 {
30507 	m68ki_write_8(EA_AY_PD_8(), COND_VC() ? 0xff : 0);
30508 }
30509 
30510 
m68k_op_svc_8_pd7(void)30511 static void m68k_op_svc_8_pd7(void)
30512 {
30513 	m68ki_write_8(EA_A7_PD_8(), COND_VC() ? 0xff : 0);
30514 }
30515 
30516 
m68k_op_svc_8_di(void)30517 static void m68k_op_svc_8_di(void)
30518 {
30519 	m68ki_write_8(EA_AY_DI_8(), COND_VC() ? 0xff : 0);
30520 }
30521 
30522 
m68k_op_svc_8_ix(void)30523 static void m68k_op_svc_8_ix(void)
30524 {
30525 	m68ki_write_8(EA_AY_IX_8(), COND_VC() ? 0xff : 0);
30526 }
30527 
30528 
m68k_op_svc_8_aw(void)30529 static void m68k_op_svc_8_aw(void)
30530 {
30531 	m68ki_write_8(EA_AW_8(), COND_VC() ? 0xff : 0);
30532 }
30533 
30534 
m68k_op_svc_8_al(void)30535 static void m68k_op_svc_8_al(void)
30536 {
30537 	m68ki_write_8(EA_AL_8(), COND_VC() ? 0xff : 0);
30538 }
30539 
30540 
m68k_op_svs_8_ai(void)30541 static void m68k_op_svs_8_ai(void)
30542 {
30543 	m68ki_write_8(EA_AY_AI_8(), COND_VS() ? 0xff : 0);
30544 }
30545 
30546 
m68k_op_svs_8_pi(void)30547 static void m68k_op_svs_8_pi(void)
30548 {
30549 	m68ki_write_8(EA_AY_PI_8(), COND_VS() ? 0xff : 0);
30550 }
30551 
30552 
m68k_op_svs_8_pi7(void)30553 static void m68k_op_svs_8_pi7(void)
30554 {
30555 	m68ki_write_8(EA_A7_PI_8(), COND_VS() ? 0xff : 0);
30556 }
30557 
30558 
m68k_op_svs_8_pd(void)30559 static void m68k_op_svs_8_pd(void)
30560 {
30561 	m68ki_write_8(EA_AY_PD_8(), COND_VS() ? 0xff : 0);
30562 }
30563 
30564 
m68k_op_svs_8_pd7(void)30565 static void m68k_op_svs_8_pd7(void)
30566 {
30567 	m68ki_write_8(EA_A7_PD_8(), COND_VS() ? 0xff : 0);
30568 }
30569 
30570 
m68k_op_svs_8_di(void)30571 static void m68k_op_svs_8_di(void)
30572 {
30573 	m68ki_write_8(EA_AY_DI_8(), COND_VS() ? 0xff : 0);
30574 }
30575 
30576 
m68k_op_svs_8_ix(void)30577 static void m68k_op_svs_8_ix(void)
30578 {
30579 	m68ki_write_8(EA_AY_IX_8(), COND_VS() ? 0xff : 0);
30580 }
30581 
30582 
m68k_op_svs_8_aw(void)30583 static void m68k_op_svs_8_aw(void)
30584 {
30585 	m68ki_write_8(EA_AW_8(), COND_VS() ? 0xff : 0);
30586 }
30587 
30588 
m68k_op_svs_8_al(void)30589 static void m68k_op_svs_8_al(void)
30590 {
30591 	m68ki_write_8(EA_AL_8(), COND_VS() ? 0xff : 0);
30592 }
30593 
30594 
m68k_op_spl_8_ai(void)30595 static void m68k_op_spl_8_ai(void)
30596 {
30597 	m68ki_write_8(EA_AY_AI_8(), COND_PL() ? 0xff : 0);
30598 }
30599 
30600 
m68k_op_spl_8_pi(void)30601 static void m68k_op_spl_8_pi(void)
30602 {
30603 	m68ki_write_8(EA_AY_PI_8(), COND_PL() ? 0xff : 0);
30604 }
30605 
30606 
m68k_op_spl_8_pi7(void)30607 static void m68k_op_spl_8_pi7(void)
30608 {
30609 	m68ki_write_8(EA_A7_PI_8(), COND_PL() ? 0xff : 0);
30610 }
30611 
30612 
m68k_op_spl_8_pd(void)30613 static void m68k_op_spl_8_pd(void)
30614 {
30615 	m68ki_write_8(EA_AY_PD_8(), COND_PL() ? 0xff : 0);
30616 }
30617 
30618 
m68k_op_spl_8_pd7(void)30619 static void m68k_op_spl_8_pd7(void)
30620 {
30621 	m68ki_write_8(EA_A7_PD_8(), COND_PL() ? 0xff : 0);
30622 }
30623 
30624 
m68k_op_spl_8_di(void)30625 static void m68k_op_spl_8_di(void)
30626 {
30627 	m68ki_write_8(EA_AY_DI_8(), COND_PL() ? 0xff : 0);
30628 }
30629 
30630 
m68k_op_spl_8_ix(void)30631 static void m68k_op_spl_8_ix(void)
30632 {
30633 	m68ki_write_8(EA_AY_IX_8(), COND_PL() ? 0xff : 0);
30634 }
30635 
30636 
m68k_op_spl_8_aw(void)30637 static void m68k_op_spl_8_aw(void)
30638 {
30639 	m68ki_write_8(EA_AW_8(), COND_PL() ? 0xff : 0);
30640 }
30641 
30642 
m68k_op_spl_8_al(void)30643 static void m68k_op_spl_8_al(void)
30644 {
30645 	m68ki_write_8(EA_AL_8(), COND_PL() ? 0xff : 0);
30646 }
30647 
30648 
m68k_op_smi_8_ai(void)30649 static void m68k_op_smi_8_ai(void)
30650 {
30651 	m68ki_write_8(EA_AY_AI_8(), COND_MI() ? 0xff : 0);
30652 }
30653 
30654 
m68k_op_smi_8_pi(void)30655 static void m68k_op_smi_8_pi(void)
30656 {
30657 	m68ki_write_8(EA_AY_PI_8(), COND_MI() ? 0xff : 0);
30658 }
30659 
30660 
m68k_op_smi_8_pi7(void)30661 static void m68k_op_smi_8_pi7(void)
30662 {
30663 	m68ki_write_8(EA_A7_PI_8(), COND_MI() ? 0xff : 0);
30664 }
30665 
30666 
m68k_op_smi_8_pd(void)30667 static void m68k_op_smi_8_pd(void)
30668 {
30669 	m68ki_write_8(EA_AY_PD_8(), COND_MI() ? 0xff : 0);
30670 }
30671 
30672 
m68k_op_smi_8_pd7(void)30673 static void m68k_op_smi_8_pd7(void)
30674 {
30675 	m68ki_write_8(EA_A7_PD_8(), COND_MI() ? 0xff : 0);
30676 }
30677 
30678 
m68k_op_smi_8_di(void)30679 static void m68k_op_smi_8_di(void)
30680 {
30681 	m68ki_write_8(EA_AY_DI_8(), COND_MI() ? 0xff : 0);
30682 }
30683 
30684 
m68k_op_smi_8_ix(void)30685 static void m68k_op_smi_8_ix(void)
30686 {
30687 	m68ki_write_8(EA_AY_IX_8(), COND_MI() ? 0xff : 0);
30688 }
30689 
30690 
m68k_op_smi_8_aw(void)30691 static void m68k_op_smi_8_aw(void)
30692 {
30693 	m68ki_write_8(EA_AW_8(), COND_MI() ? 0xff : 0);
30694 }
30695 
30696 
m68k_op_smi_8_al(void)30697 static void m68k_op_smi_8_al(void)
30698 {
30699 	m68ki_write_8(EA_AL_8(), COND_MI() ? 0xff : 0);
30700 }
30701 
30702 
m68k_op_sge_8_ai(void)30703 static void m68k_op_sge_8_ai(void)
30704 {
30705 	m68ki_write_8(EA_AY_AI_8(), COND_GE() ? 0xff : 0);
30706 }
30707 
30708 
m68k_op_sge_8_pi(void)30709 static void m68k_op_sge_8_pi(void)
30710 {
30711 	m68ki_write_8(EA_AY_PI_8(), COND_GE() ? 0xff : 0);
30712 }
30713 
30714 
m68k_op_sge_8_pi7(void)30715 static void m68k_op_sge_8_pi7(void)
30716 {
30717 	m68ki_write_8(EA_A7_PI_8(), COND_GE() ? 0xff : 0);
30718 }
30719 
30720 
m68k_op_sge_8_pd(void)30721 static void m68k_op_sge_8_pd(void)
30722 {
30723 	m68ki_write_8(EA_AY_PD_8(), COND_GE() ? 0xff : 0);
30724 }
30725 
30726 
m68k_op_sge_8_pd7(void)30727 static void m68k_op_sge_8_pd7(void)
30728 {
30729 	m68ki_write_8(EA_A7_PD_8(), COND_GE() ? 0xff : 0);
30730 }
30731 
30732 
m68k_op_sge_8_di(void)30733 static void m68k_op_sge_8_di(void)
30734 {
30735 	m68ki_write_8(EA_AY_DI_8(), COND_GE() ? 0xff : 0);
30736 }
30737 
30738 
m68k_op_sge_8_ix(void)30739 static void m68k_op_sge_8_ix(void)
30740 {
30741 	m68ki_write_8(EA_AY_IX_8(), COND_GE() ? 0xff : 0);
30742 }
30743 
30744 
m68k_op_sge_8_aw(void)30745 static void m68k_op_sge_8_aw(void)
30746 {
30747 	m68ki_write_8(EA_AW_8(), COND_GE() ? 0xff : 0);
30748 }
30749 
30750 
m68k_op_sge_8_al(void)30751 static void m68k_op_sge_8_al(void)
30752 {
30753 	m68ki_write_8(EA_AL_8(), COND_GE() ? 0xff : 0);
30754 }
30755 
30756 
m68k_op_slt_8_ai(void)30757 static void m68k_op_slt_8_ai(void)
30758 {
30759 	m68ki_write_8(EA_AY_AI_8(), COND_LT() ? 0xff : 0);
30760 }
30761 
30762 
m68k_op_slt_8_pi(void)30763 static void m68k_op_slt_8_pi(void)
30764 {
30765 	m68ki_write_8(EA_AY_PI_8(), COND_LT() ? 0xff : 0);
30766 }
30767 
30768 
m68k_op_slt_8_pi7(void)30769 static void m68k_op_slt_8_pi7(void)
30770 {
30771 	m68ki_write_8(EA_A7_PI_8(), COND_LT() ? 0xff : 0);
30772 }
30773 
30774 
m68k_op_slt_8_pd(void)30775 static void m68k_op_slt_8_pd(void)
30776 {
30777 	m68ki_write_8(EA_AY_PD_8(), COND_LT() ? 0xff : 0);
30778 }
30779 
30780 
m68k_op_slt_8_pd7(void)30781 static void m68k_op_slt_8_pd7(void)
30782 {
30783 	m68ki_write_8(EA_A7_PD_8(), COND_LT() ? 0xff : 0);
30784 }
30785 
30786 
m68k_op_slt_8_di(void)30787 static void m68k_op_slt_8_di(void)
30788 {
30789 	m68ki_write_8(EA_AY_DI_8(), COND_LT() ? 0xff : 0);
30790 }
30791 
30792 
m68k_op_slt_8_ix(void)30793 static void m68k_op_slt_8_ix(void)
30794 {
30795 	m68ki_write_8(EA_AY_IX_8(), COND_LT() ? 0xff : 0);
30796 }
30797 
30798 
m68k_op_slt_8_aw(void)30799 static void m68k_op_slt_8_aw(void)
30800 {
30801 	m68ki_write_8(EA_AW_8(), COND_LT() ? 0xff : 0);
30802 }
30803 
30804 
m68k_op_slt_8_al(void)30805 static void m68k_op_slt_8_al(void)
30806 {
30807 	m68ki_write_8(EA_AL_8(), COND_LT() ? 0xff : 0);
30808 }
30809 
30810 
m68k_op_sgt_8_ai(void)30811 static void m68k_op_sgt_8_ai(void)
30812 {
30813 	m68ki_write_8(EA_AY_AI_8(), COND_GT() ? 0xff : 0);
30814 }
30815 
30816 
m68k_op_sgt_8_pi(void)30817 static void m68k_op_sgt_8_pi(void)
30818 {
30819 	m68ki_write_8(EA_AY_PI_8(), COND_GT() ? 0xff : 0);
30820 }
30821 
30822 
m68k_op_sgt_8_pi7(void)30823 static void m68k_op_sgt_8_pi7(void)
30824 {
30825 	m68ki_write_8(EA_A7_PI_8(), COND_GT() ? 0xff : 0);
30826 }
30827 
30828 
m68k_op_sgt_8_pd(void)30829 static void m68k_op_sgt_8_pd(void)
30830 {
30831 	m68ki_write_8(EA_AY_PD_8(), COND_GT() ? 0xff : 0);
30832 }
30833 
30834 
m68k_op_sgt_8_pd7(void)30835 static void m68k_op_sgt_8_pd7(void)
30836 {
30837 	m68ki_write_8(EA_A7_PD_8(), COND_GT() ? 0xff : 0);
30838 }
30839 
30840 
m68k_op_sgt_8_di(void)30841 static void m68k_op_sgt_8_di(void)
30842 {
30843 	m68ki_write_8(EA_AY_DI_8(), COND_GT() ? 0xff : 0);
30844 }
30845 
30846 
m68k_op_sgt_8_ix(void)30847 static void m68k_op_sgt_8_ix(void)
30848 {
30849 	m68ki_write_8(EA_AY_IX_8(), COND_GT() ? 0xff : 0);
30850 }
30851 
30852 
m68k_op_sgt_8_aw(void)30853 static void m68k_op_sgt_8_aw(void)
30854 {
30855 	m68ki_write_8(EA_AW_8(), COND_GT() ? 0xff : 0);
30856 }
30857 
30858 
m68k_op_sgt_8_al(void)30859 static void m68k_op_sgt_8_al(void)
30860 {
30861 	m68ki_write_8(EA_AL_8(), COND_GT() ? 0xff : 0);
30862 }
30863 
30864 
m68k_op_sle_8_ai(void)30865 static void m68k_op_sle_8_ai(void)
30866 {
30867 	m68ki_write_8(EA_AY_AI_8(), COND_LE() ? 0xff : 0);
30868 }
30869 
30870 
m68k_op_sle_8_pi(void)30871 static void m68k_op_sle_8_pi(void)
30872 {
30873 	m68ki_write_8(EA_AY_PI_8(), COND_LE() ? 0xff : 0);
30874 }
30875 
30876 
m68k_op_sle_8_pi7(void)30877 static void m68k_op_sle_8_pi7(void)
30878 {
30879 	m68ki_write_8(EA_A7_PI_8(), COND_LE() ? 0xff : 0);
30880 }
30881 
30882 
m68k_op_sle_8_pd(void)30883 static void m68k_op_sle_8_pd(void)
30884 {
30885 	m68ki_write_8(EA_AY_PD_8(), COND_LE() ? 0xff : 0);
30886 }
30887 
30888 
m68k_op_sle_8_pd7(void)30889 static void m68k_op_sle_8_pd7(void)
30890 {
30891 	m68ki_write_8(EA_A7_PD_8(), COND_LE() ? 0xff : 0);
30892 }
30893 
30894 
m68k_op_sle_8_di(void)30895 static void m68k_op_sle_8_di(void)
30896 {
30897 	m68ki_write_8(EA_AY_DI_8(), COND_LE() ? 0xff : 0);
30898 }
30899 
30900 
m68k_op_sle_8_ix(void)30901 static void m68k_op_sle_8_ix(void)
30902 {
30903 	m68ki_write_8(EA_AY_IX_8(), COND_LE() ? 0xff : 0);
30904 }
30905 
30906 
m68k_op_sle_8_aw(void)30907 static void m68k_op_sle_8_aw(void)
30908 {
30909 	m68ki_write_8(EA_AW_8(), COND_LE() ? 0xff : 0);
30910 }
30911 
30912 
m68k_op_sle_8_al(void)30913 static void m68k_op_sle_8_al(void)
30914 {
30915 	m68ki_write_8(EA_AL_8(), COND_LE() ? 0xff : 0);
30916 }
30917 
30918 
m68k_op_stop(void)30919 static void m68k_op_stop(void)
30920 {
30921 	if(FLAG_S)
30922 	{
30923 		uint new_sr = OPER_I_16();
30924 		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
30925 		CPU_STOPPED |= STOP_LEVEL_STOP;
30926 		m68ki_set_sr(new_sr);
30927 		m68ki_remaining_cycles = 0;
30928 		return;
30929 	}
30930 	m68ki_exception_privilege_violation();
30931 }
30932 
30933 
m68k_op_sub_8_er_d(void)30934 static void m68k_op_sub_8_er_d(void)
30935 {
30936 	uint* r_dst = &DX;
30937 	uint src = MASK_OUT_ABOVE_8(DY);
30938 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
30939 	uint res = dst - src;
30940 
30941 	FLAG_N = NFLAG_8(res);
30942 	FLAG_X = FLAG_C = CFLAG_8(res);
30943 	FLAG_V = VFLAG_SUB_8(src, dst, res);
30944 	FLAG_Z = MASK_OUT_ABOVE_8(res);
30945 
30946 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
30947 }
30948 
30949 
m68k_op_sub_8_er_ai(void)30950 static void m68k_op_sub_8_er_ai(void)
30951 {
30952 	uint* r_dst = &DX;
30953 	uint src = OPER_AY_AI_8();
30954 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
30955 	uint res = dst - src;
30956 
30957 	FLAG_N = NFLAG_8(res);
30958 	FLAG_X = FLAG_C = CFLAG_8(res);
30959 	FLAG_V = VFLAG_SUB_8(src, dst, res);
30960 	FLAG_Z = MASK_OUT_ABOVE_8(res);
30961 
30962 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
30963 }
30964 
30965 
m68k_op_sub_8_er_pi(void)30966 static void m68k_op_sub_8_er_pi(void)
30967 {
30968 	uint* r_dst = &DX;
30969 	uint src = OPER_AY_PI_8();
30970 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
30971 	uint res = dst - src;
30972 
30973 	FLAG_N = NFLAG_8(res);
30974 	FLAG_X = FLAG_C = CFLAG_8(res);
30975 	FLAG_V = VFLAG_SUB_8(src, dst, res);
30976 	FLAG_Z = MASK_OUT_ABOVE_8(res);
30977 
30978 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
30979 }
30980 
30981 
m68k_op_sub_8_er_pi7(void)30982 static void m68k_op_sub_8_er_pi7(void)
30983 {
30984 	uint* r_dst = &DX;
30985 	uint src = OPER_A7_PI_8();
30986 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
30987 	uint res = dst - src;
30988 
30989 	FLAG_N = NFLAG_8(res);
30990 	FLAG_X = FLAG_C = CFLAG_8(res);
30991 	FLAG_V = VFLAG_SUB_8(src, dst, res);
30992 	FLAG_Z = MASK_OUT_ABOVE_8(res);
30993 
30994 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
30995 }
30996 
30997 
m68k_op_sub_8_er_pd(void)30998 static void m68k_op_sub_8_er_pd(void)
30999 {
31000 	uint* r_dst = &DX;
31001 	uint src = OPER_AY_PD_8();
31002 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
31003 	uint res = dst - src;
31004 
31005 	FLAG_N = NFLAG_8(res);
31006 	FLAG_X = FLAG_C = CFLAG_8(res);
31007 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31008 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31009 
31010 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
31011 }
31012 
31013 
m68k_op_sub_8_er_pd7(void)31014 static void m68k_op_sub_8_er_pd7(void)
31015 {
31016 	uint* r_dst = &DX;
31017 	uint src = OPER_A7_PD_8();
31018 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
31019 	uint res = dst - src;
31020 
31021 	FLAG_N = NFLAG_8(res);
31022 	FLAG_X = FLAG_C = CFLAG_8(res);
31023 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31024 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31025 
31026 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
31027 }
31028 
31029 
m68k_op_sub_8_er_di(void)31030 static void m68k_op_sub_8_er_di(void)
31031 {
31032 	uint* r_dst = &DX;
31033 	uint src = OPER_AY_DI_8();
31034 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
31035 	uint res = dst - src;
31036 
31037 	FLAG_N = NFLAG_8(res);
31038 	FLAG_X = FLAG_C = CFLAG_8(res);
31039 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31040 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31041 
31042 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
31043 }
31044 
31045 
m68k_op_sub_8_er_ix(void)31046 static void m68k_op_sub_8_er_ix(void)
31047 {
31048 	uint* r_dst = &DX;
31049 	uint src = OPER_AY_IX_8();
31050 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
31051 	uint res = dst - src;
31052 
31053 	FLAG_N = NFLAG_8(res);
31054 	FLAG_X = FLAG_C = CFLAG_8(res);
31055 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31056 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31057 
31058 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
31059 }
31060 
31061 
m68k_op_sub_8_er_aw(void)31062 static void m68k_op_sub_8_er_aw(void)
31063 {
31064 	uint* r_dst = &DX;
31065 	uint src = OPER_AW_8();
31066 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
31067 	uint res = dst - src;
31068 
31069 	FLAG_N = NFLAG_8(res);
31070 	FLAG_X = FLAG_C = CFLAG_8(res);
31071 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31072 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31073 
31074 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
31075 }
31076 
31077 
m68k_op_sub_8_er_al(void)31078 static void m68k_op_sub_8_er_al(void)
31079 {
31080 	uint* r_dst = &DX;
31081 	uint src = OPER_AL_8();
31082 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
31083 	uint res = dst - src;
31084 
31085 	FLAG_N = NFLAG_8(res);
31086 	FLAG_X = FLAG_C = CFLAG_8(res);
31087 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31088 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31089 
31090 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
31091 }
31092 
31093 
m68k_op_sub_8_er_pcdi(void)31094 static void m68k_op_sub_8_er_pcdi(void)
31095 {
31096 	uint* r_dst = &DX;
31097 	uint src = OPER_PCDI_8();
31098 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
31099 	uint res = dst - src;
31100 
31101 	FLAG_N = NFLAG_8(res);
31102 	FLAG_X = FLAG_C = CFLAG_8(res);
31103 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31104 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31105 
31106 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
31107 }
31108 
31109 
m68k_op_sub_8_er_pcix(void)31110 static void m68k_op_sub_8_er_pcix(void)
31111 {
31112 	uint* r_dst = &DX;
31113 	uint src = OPER_PCIX_8();
31114 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
31115 	uint res = dst - src;
31116 
31117 	FLAG_N = NFLAG_8(res);
31118 	FLAG_X = FLAG_C = CFLAG_8(res);
31119 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31120 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31121 
31122 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
31123 }
31124 
31125 
m68k_op_sub_8_er_i(void)31126 static void m68k_op_sub_8_er_i(void)
31127 {
31128 	uint* r_dst = &DX;
31129 	uint src = OPER_I_8();
31130 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
31131 	uint res = dst - src;
31132 
31133 	FLAG_N = NFLAG_8(res);
31134 	FLAG_X = FLAG_C = CFLAG_8(res);
31135 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31136 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31137 
31138 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
31139 }
31140 
31141 
m68k_op_sub_16_er_d(void)31142 static void m68k_op_sub_16_er_d(void)
31143 {
31144 	uint* r_dst = &DX;
31145 	uint src = MASK_OUT_ABOVE_16(DY);
31146 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31147 	uint res = dst - src;
31148 
31149 	FLAG_N = NFLAG_16(res);
31150 	FLAG_X = FLAG_C = CFLAG_16(res);
31151 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31152 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31153 
31154 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31155 }
31156 
31157 
m68k_op_sub_16_er_a(void)31158 static void m68k_op_sub_16_er_a(void)
31159 {
31160 	uint* r_dst = &DX;
31161 	uint src = MASK_OUT_ABOVE_16(AY);
31162 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31163 	uint res = dst - src;
31164 
31165 	FLAG_N = NFLAG_16(res);
31166 	FLAG_X = FLAG_C = CFLAG_16(res);
31167 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31168 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31169 
31170 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31171 }
31172 
31173 
m68k_op_sub_16_er_ai(void)31174 static void m68k_op_sub_16_er_ai(void)
31175 {
31176 	uint* r_dst = &DX;
31177 	uint src = OPER_AY_AI_16();
31178 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31179 	uint res = dst - src;
31180 
31181 	FLAG_N = NFLAG_16(res);
31182 	FLAG_X = FLAG_C = CFLAG_16(res);
31183 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31184 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31185 
31186 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31187 }
31188 
31189 
m68k_op_sub_16_er_pi(void)31190 static void m68k_op_sub_16_er_pi(void)
31191 {
31192 	uint* r_dst = &DX;
31193 	uint src = OPER_AY_PI_16();
31194 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31195 	uint res = dst - src;
31196 
31197 	FLAG_N = NFLAG_16(res);
31198 	FLAG_X = FLAG_C = CFLAG_16(res);
31199 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31200 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31201 
31202 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31203 }
31204 
31205 
m68k_op_sub_16_er_pd(void)31206 static void m68k_op_sub_16_er_pd(void)
31207 {
31208 	uint* r_dst = &DX;
31209 	uint src = OPER_AY_PD_16();
31210 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31211 	uint res = dst - src;
31212 
31213 	FLAG_N = NFLAG_16(res);
31214 	FLAG_X = FLAG_C = CFLAG_16(res);
31215 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31216 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31217 
31218 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31219 }
31220 
31221 
m68k_op_sub_16_er_di(void)31222 static void m68k_op_sub_16_er_di(void)
31223 {
31224 	uint* r_dst = &DX;
31225 	uint src = OPER_AY_DI_16();
31226 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31227 	uint res = dst - src;
31228 
31229 	FLAG_N = NFLAG_16(res);
31230 	FLAG_X = FLAG_C = CFLAG_16(res);
31231 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31232 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31233 
31234 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31235 }
31236 
31237 
m68k_op_sub_16_er_ix(void)31238 static void m68k_op_sub_16_er_ix(void)
31239 {
31240 	uint* r_dst = &DX;
31241 	uint src = OPER_AY_IX_16();
31242 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31243 	uint res = dst - src;
31244 
31245 	FLAG_N = NFLAG_16(res);
31246 	FLAG_X = FLAG_C = CFLAG_16(res);
31247 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31248 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31249 
31250 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31251 }
31252 
31253 
m68k_op_sub_16_er_aw(void)31254 static void m68k_op_sub_16_er_aw(void)
31255 {
31256 	uint* r_dst = &DX;
31257 	uint src = OPER_AW_16();
31258 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31259 	uint res = dst - src;
31260 
31261 	FLAG_N = NFLAG_16(res);
31262 	FLAG_X = FLAG_C = CFLAG_16(res);
31263 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31264 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31265 
31266 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31267 }
31268 
31269 
m68k_op_sub_16_er_al(void)31270 static void m68k_op_sub_16_er_al(void)
31271 {
31272 	uint* r_dst = &DX;
31273 	uint src = OPER_AL_16();
31274 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31275 	uint res = dst - src;
31276 
31277 	FLAG_N = NFLAG_16(res);
31278 	FLAG_X = FLAG_C = CFLAG_16(res);
31279 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31280 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31281 
31282 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31283 }
31284 
31285 
m68k_op_sub_16_er_pcdi(void)31286 static void m68k_op_sub_16_er_pcdi(void)
31287 {
31288 	uint* r_dst = &DX;
31289 	uint src = OPER_PCDI_16();
31290 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31291 	uint res = dst - src;
31292 
31293 	FLAG_N = NFLAG_16(res);
31294 	FLAG_X = FLAG_C = CFLAG_16(res);
31295 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31296 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31297 
31298 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31299 }
31300 
31301 
m68k_op_sub_16_er_pcix(void)31302 static void m68k_op_sub_16_er_pcix(void)
31303 {
31304 	uint* r_dst = &DX;
31305 	uint src = OPER_PCIX_16();
31306 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31307 	uint res = dst - src;
31308 
31309 	FLAG_N = NFLAG_16(res);
31310 	FLAG_X = FLAG_C = CFLAG_16(res);
31311 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31312 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31313 
31314 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31315 }
31316 
31317 
m68k_op_sub_16_er_i(void)31318 static void m68k_op_sub_16_er_i(void)
31319 {
31320 	uint* r_dst = &DX;
31321 	uint src = OPER_I_16();
31322 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
31323 	uint res = dst - src;
31324 
31325 	FLAG_N = NFLAG_16(res);
31326 	FLAG_X = FLAG_C = CFLAG_16(res);
31327 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31328 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31329 
31330 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
31331 }
31332 
31333 
m68k_op_sub_32_er_d(void)31334 static void m68k_op_sub_32_er_d(void)
31335 {
31336 	uint* r_dst = &DX;
31337 	uint src = DY;
31338 	uint dst = *r_dst;
31339 	uint res = dst - src;
31340 
31341 	FLAG_N = NFLAG_32(res);
31342 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31343 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31344 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31345 
31346 	*r_dst = FLAG_Z;
31347 }
31348 
31349 
m68k_op_sub_32_er_a(void)31350 static void m68k_op_sub_32_er_a(void)
31351 {
31352 	uint* r_dst = &DX;
31353 	uint src = AY;
31354 	uint dst = *r_dst;
31355 	uint res = dst - src;
31356 
31357 	FLAG_N = NFLAG_32(res);
31358 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31359 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31360 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31361 
31362 	*r_dst = FLAG_Z;
31363 }
31364 
31365 
m68k_op_sub_32_er_ai(void)31366 static void m68k_op_sub_32_er_ai(void)
31367 {
31368 	uint* r_dst = &DX;
31369 	uint src = OPER_AY_AI_32();
31370 	uint dst = *r_dst;
31371 	uint res = dst - src;
31372 
31373 	FLAG_N = NFLAG_32(res);
31374 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31375 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31376 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31377 
31378 	*r_dst = FLAG_Z;
31379 }
31380 
31381 
m68k_op_sub_32_er_pi(void)31382 static void m68k_op_sub_32_er_pi(void)
31383 {
31384 	uint* r_dst = &DX;
31385 	uint src = OPER_AY_PI_32();
31386 	uint dst = *r_dst;
31387 	uint res = dst - src;
31388 
31389 	FLAG_N = NFLAG_32(res);
31390 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31391 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31392 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31393 
31394 	*r_dst = FLAG_Z;
31395 }
31396 
31397 
m68k_op_sub_32_er_pd(void)31398 static void m68k_op_sub_32_er_pd(void)
31399 {
31400 	uint* r_dst = &DX;
31401 	uint src = OPER_AY_PD_32();
31402 	uint dst = *r_dst;
31403 	uint res = dst - src;
31404 
31405 	FLAG_N = NFLAG_32(res);
31406 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31407 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31408 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31409 
31410 	*r_dst = FLAG_Z;
31411 }
31412 
31413 
m68k_op_sub_32_er_di(void)31414 static void m68k_op_sub_32_er_di(void)
31415 {
31416 	uint* r_dst = &DX;
31417 	uint src = OPER_AY_DI_32();
31418 	uint dst = *r_dst;
31419 	uint res = dst - src;
31420 
31421 	FLAG_N = NFLAG_32(res);
31422 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31423 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31424 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31425 
31426 	*r_dst = FLAG_Z;
31427 }
31428 
31429 
m68k_op_sub_32_er_ix(void)31430 static void m68k_op_sub_32_er_ix(void)
31431 {
31432 	uint* r_dst = &DX;
31433 	uint src = OPER_AY_IX_32();
31434 	uint dst = *r_dst;
31435 	uint res = dst - src;
31436 
31437 	FLAG_N = NFLAG_32(res);
31438 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31439 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31440 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31441 
31442 	*r_dst = FLAG_Z;
31443 }
31444 
31445 
m68k_op_sub_32_er_aw(void)31446 static void m68k_op_sub_32_er_aw(void)
31447 {
31448 	uint* r_dst = &DX;
31449 	uint src = OPER_AW_32();
31450 	uint dst = *r_dst;
31451 	uint res = dst - src;
31452 
31453 	FLAG_N = NFLAG_32(res);
31454 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31455 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31456 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31457 
31458 	*r_dst = FLAG_Z;
31459 }
31460 
31461 
m68k_op_sub_32_er_al(void)31462 static void m68k_op_sub_32_er_al(void)
31463 {
31464 	uint* r_dst = &DX;
31465 	uint src = OPER_AL_32();
31466 	uint dst = *r_dst;
31467 	uint res = dst - src;
31468 
31469 	FLAG_N = NFLAG_32(res);
31470 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31471 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31472 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31473 
31474 	*r_dst = FLAG_Z;
31475 }
31476 
31477 
m68k_op_sub_32_er_pcdi(void)31478 static void m68k_op_sub_32_er_pcdi(void)
31479 {
31480 	uint* r_dst = &DX;
31481 	uint src = OPER_PCDI_32();
31482 	uint dst = *r_dst;
31483 	uint res = dst - src;
31484 
31485 	FLAG_N = NFLAG_32(res);
31486 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31487 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31488 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31489 
31490 	*r_dst = FLAG_Z;
31491 }
31492 
31493 
m68k_op_sub_32_er_pcix(void)31494 static void m68k_op_sub_32_er_pcix(void)
31495 {
31496 	uint* r_dst = &DX;
31497 	uint src = OPER_PCIX_32();
31498 	uint dst = *r_dst;
31499 	uint res = dst - src;
31500 
31501 	FLAG_N = NFLAG_32(res);
31502 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31503 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31504 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31505 
31506 	*r_dst = FLAG_Z;
31507 }
31508 
31509 
m68k_op_sub_32_er_i(void)31510 static void m68k_op_sub_32_er_i(void)
31511 {
31512 	uint* r_dst = &DX;
31513 	uint src = OPER_I_32();
31514 	uint dst = *r_dst;
31515 	uint res = dst - src;
31516 
31517 	FLAG_N = NFLAG_32(res);
31518 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31519 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31520 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31521 
31522 	*r_dst = FLAG_Z;
31523 }
31524 
31525 
m68k_op_sub_8_re_ai(void)31526 static void m68k_op_sub_8_re_ai(void)
31527 {
31528 	uint ea = EA_AY_AI_8();
31529 	uint src = MASK_OUT_ABOVE_8(DX);
31530 	uint dst = m68ki_read_8(ea);
31531 	uint res = dst - src;
31532 
31533 	FLAG_N = NFLAG_8(res);
31534 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31535 	FLAG_X = FLAG_C = CFLAG_8(res);
31536 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31537 
31538 	m68ki_write_8(ea, FLAG_Z);
31539 }
31540 
31541 
m68k_op_sub_8_re_pi(void)31542 static void m68k_op_sub_8_re_pi(void)
31543 {
31544 	uint ea = EA_AY_PI_8();
31545 	uint src = MASK_OUT_ABOVE_8(DX);
31546 	uint dst = m68ki_read_8(ea);
31547 	uint res = dst - src;
31548 
31549 	FLAG_N = NFLAG_8(res);
31550 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31551 	FLAG_X = FLAG_C = CFLAG_8(res);
31552 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31553 
31554 	m68ki_write_8(ea, FLAG_Z);
31555 }
31556 
31557 
m68k_op_sub_8_re_pi7(void)31558 static void m68k_op_sub_8_re_pi7(void)
31559 {
31560 	uint ea = EA_A7_PI_8();
31561 	uint src = MASK_OUT_ABOVE_8(DX);
31562 	uint dst = m68ki_read_8(ea);
31563 	uint res = dst - src;
31564 
31565 	FLAG_N = NFLAG_8(res);
31566 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31567 	FLAG_X = FLAG_C = CFLAG_8(res);
31568 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31569 
31570 	m68ki_write_8(ea, FLAG_Z);
31571 }
31572 
31573 
m68k_op_sub_8_re_pd(void)31574 static void m68k_op_sub_8_re_pd(void)
31575 {
31576 	uint ea = EA_AY_PD_8();
31577 	uint src = MASK_OUT_ABOVE_8(DX);
31578 	uint dst = m68ki_read_8(ea);
31579 	uint res = dst - src;
31580 
31581 	FLAG_N = NFLAG_8(res);
31582 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31583 	FLAG_X = FLAG_C = CFLAG_8(res);
31584 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31585 
31586 	m68ki_write_8(ea, FLAG_Z);
31587 }
31588 
31589 
m68k_op_sub_8_re_pd7(void)31590 static void m68k_op_sub_8_re_pd7(void)
31591 {
31592 	uint ea = EA_A7_PD_8();
31593 	uint src = MASK_OUT_ABOVE_8(DX);
31594 	uint dst = m68ki_read_8(ea);
31595 	uint res = dst - src;
31596 
31597 	FLAG_N = NFLAG_8(res);
31598 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31599 	FLAG_X = FLAG_C = CFLAG_8(res);
31600 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31601 
31602 	m68ki_write_8(ea, FLAG_Z);
31603 }
31604 
31605 
m68k_op_sub_8_re_di(void)31606 static void m68k_op_sub_8_re_di(void)
31607 {
31608 	uint ea = EA_AY_DI_8();
31609 	uint src = MASK_OUT_ABOVE_8(DX);
31610 	uint dst = m68ki_read_8(ea);
31611 	uint res = dst - src;
31612 
31613 	FLAG_N = NFLAG_8(res);
31614 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31615 	FLAG_X = FLAG_C = CFLAG_8(res);
31616 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31617 
31618 	m68ki_write_8(ea, FLAG_Z);
31619 }
31620 
31621 
m68k_op_sub_8_re_ix(void)31622 static void m68k_op_sub_8_re_ix(void)
31623 {
31624 	uint ea = EA_AY_IX_8();
31625 	uint src = MASK_OUT_ABOVE_8(DX);
31626 	uint dst = m68ki_read_8(ea);
31627 	uint res = dst - src;
31628 
31629 	FLAG_N = NFLAG_8(res);
31630 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31631 	FLAG_X = FLAG_C = CFLAG_8(res);
31632 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31633 
31634 	m68ki_write_8(ea, FLAG_Z);
31635 }
31636 
31637 
m68k_op_sub_8_re_aw(void)31638 static void m68k_op_sub_8_re_aw(void)
31639 {
31640 	uint ea = EA_AW_8();
31641 	uint src = MASK_OUT_ABOVE_8(DX);
31642 	uint dst = m68ki_read_8(ea);
31643 	uint res = dst - src;
31644 
31645 	FLAG_N = NFLAG_8(res);
31646 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31647 	FLAG_X = FLAG_C = CFLAG_8(res);
31648 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31649 
31650 	m68ki_write_8(ea, FLAG_Z);
31651 }
31652 
31653 
m68k_op_sub_8_re_al(void)31654 static void m68k_op_sub_8_re_al(void)
31655 {
31656 	uint ea = EA_AL_8();
31657 	uint src = MASK_OUT_ABOVE_8(DX);
31658 	uint dst = m68ki_read_8(ea);
31659 	uint res = dst - src;
31660 
31661 	FLAG_N = NFLAG_8(res);
31662 	FLAG_Z = MASK_OUT_ABOVE_8(res);
31663 	FLAG_X = FLAG_C = CFLAG_8(res);
31664 	FLAG_V = VFLAG_SUB_8(src, dst, res);
31665 
31666 	m68ki_write_8(ea, FLAG_Z);
31667 }
31668 
31669 
m68k_op_sub_16_re_ai(void)31670 static void m68k_op_sub_16_re_ai(void)
31671 {
31672 	uint ea = EA_AY_AI_16();
31673 	uint src = MASK_OUT_ABOVE_16(DX);
31674 	uint dst = m68ki_read_16(ea);
31675 	uint res = dst - src;
31676 
31677 	FLAG_N = NFLAG_16(res);
31678 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31679 	FLAG_X = FLAG_C = CFLAG_16(res);
31680 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31681 
31682 	m68ki_write_16(ea, FLAG_Z);
31683 }
31684 
31685 
m68k_op_sub_16_re_pi(void)31686 static void m68k_op_sub_16_re_pi(void)
31687 {
31688 	uint ea = EA_AY_PI_16();
31689 	uint src = MASK_OUT_ABOVE_16(DX);
31690 	uint dst = m68ki_read_16(ea);
31691 	uint res = dst - src;
31692 
31693 	FLAG_N = NFLAG_16(res);
31694 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31695 	FLAG_X = FLAG_C = CFLAG_16(res);
31696 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31697 
31698 	m68ki_write_16(ea, FLAG_Z);
31699 }
31700 
31701 
m68k_op_sub_16_re_pd(void)31702 static void m68k_op_sub_16_re_pd(void)
31703 {
31704 	uint ea = EA_AY_PD_16();
31705 	uint src = MASK_OUT_ABOVE_16(DX);
31706 	uint dst = m68ki_read_16(ea);
31707 	uint res = dst - src;
31708 
31709 	FLAG_N = NFLAG_16(res);
31710 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31711 	FLAG_X = FLAG_C = CFLAG_16(res);
31712 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31713 
31714 	m68ki_write_16(ea, FLAG_Z);
31715 }
31716 
31717 
m68k_op_sub_16_re_di(void)31718 static void m68k_op_sub_16_re_di(void)
31719 {
31720 	uint ea = EA_AY_DI_16();
31721 	uint src = MASK_OUT_ABOVE_16(DX);
31722 	uint dst = m68ki_read_16(ea);
31723 	uint res = dst - src;
31724 
31725 	FLAG_N = NFLAG_16(res);
31726 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31727 	FLAG_X = FLAG_C = CFLAG_16(res);
31728 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31729 
31730 	m68ki_write_16(ea, FLAG_Z);
31731 }
31732 
31733 
m68k_op_sub_16_re_ix(void)31734 static void m68k_op_sub_16_re_ix(void)
31735 {
31736 	uint ea = EA_AY_IX_16();
31737 	uint src = MASK_OUT_ABOVE_16(DX);
31738 	uint dst = m68ki_read_16(ea);
31739 	uint res = dst - src;
31740 
31741 	FLAG_N = NFLAG_16(res);
31742 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31743 	FLAG_X = FLAG_C = CFLAG_16(res);
31744 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31745 
31746 	m68ki_write_16(ea, FLAG_Z);
31747 }
31748 
31749 
m68k_op_sub_16_re_aw(void)31750 static void m68k_op_sub_16_re_aw(void)
31751 {
31752 	uint ea = EA_AW_16();
31753 	uint src = MASK_OUT_ABOVE_16(DX);
31754 	uint dst = m68ki_read_16(ea);
31755 	uint res = dst - src;
31756 
31757 	FLAG_N = NFLAG_16(res);
31758 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31759 	FLAG_X = FLAG_C = CFLAG_16(res);
31760 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31761 
31762 	m68ki_write_16(ea, FLAG_Z);
31763 }
31764 
31765 
m68k_op_sub_16_re_al(void)31766 static void m68k_op_sub_16_re_al(void)
31767 {
31768 	uint ea = EA_AL_16();
31769 	uint src = MASK_OUT_ABOVE_16(DX);
31770 	uint dst = m68ki_read_16(ea);
31771 	uint res = dst - src;
31772 
31773 	FLAG_N = NFLAG_16(res);
31774 	FLAG_Z = MASK_OUT_ABOVE_16(res);
31775 	FLAG_X = FLAG_C = CFLAG_16(res);
31776 	FLAG_V = VFLAG_SUB_16(src, dst, res);
31777 
31778 	m68ki_write_16(ea, FLAG_Z);
31779 }
31780 
31781 
m68k_op_sub_32_re_ai(void)31782 static void m68k_op_sub_32_re_ai(void)
31783 {
31784 	uint ea = EA_AY_AI_32();
31785 	uint src = DX;
31786 	uint dst = m68ki_read_32(ea);
31787 	uint res = dst - src;
31788 
31789 	FLAG_N = NFLAG_32(res);
31790 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31791 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31792 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31793 
31794 	m68ki_write_32(ea, FLAG_Z);
31795 }
31796 
31797 
m68k_op_sub_32_re_pi(void)31798 static void m68k_op_sub_32_re_pi(void)
31799 {
31800 	uint ea = EA_AY_PI_32();
31801 	uint src = DX;
31802 	uint dst = m68ki_read_32(ea);
31803 	uint res = dst - src;
31804 
31805 	FLAG_N = NFLAG_32(res);
31806 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31807 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31808 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31809 
31810 	m68ki_write_32(ea, FLAG_Z);
31811 }
31812 
31813 
m68k_op_sub_32_re_pd(void)31814 static void m68k_op_sub_32_re_pd(void)
31815 {
31816 	uint ea = EA_AY_PD_32();
31817 	uint src = DX;
31818 	uint dst = m68ki_read_32(ea);
31819 	uint res = dst - src;
31820 
31821 	FLAG_N = NFLAG_32(res);
31822 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31823 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31824 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31825 
31826 	m68ki_write_32(ea, FLAG_Z);
31827 }
31828 
31829 
m68k_op_sub_32_re_di(void)31830 static void m68k_op_sub_32_re_di(void)
31831 {
31832 	uint ea = EA_AY_DI_32();
31833 	uint src = DX;
31834 	uint dst = m68ki_read_32(ea);
31835 	uint res = dst - src;
31836 
31837 	FLAG_N = NFLAG_32(res);
31838 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31839 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31840 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31841 
31842 	m68ki_write_32(ea, FLAG_Z);
31843 }
31844 
31845 
m68k_op_sub_32_re_ix(void)31846 static void m68k_op_sub_32_re_ix(void)
31847 {
31848 	uint ea = EA_AY_IX_32();
31849 	uint src = DX;
31850 	uint dst = m68ki_read_32(ea);
31851 	uint res = dst - src;
31852 
31853 	FLAG_N = NFLAG_32(res);
31854 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31855 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31856 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31857 
31858 	m68ki_write_32(ea, FLAG_Z);
31859 }
31860 
31861 
m68k_op_sub_32_re_aw(void)31862 static void m68k_op_sub_32_re_aw(void)
31863 {
31864 	uint ea = EA_AW_32();
31865 	uint src = DX;
31866 	uint dst = m68ki_read_32(ea);
31867 	uint res = dst - src;
31868 
31869 	FLAG_N = NFLAG_32(res);
31870 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31871 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31872 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31873 
31874 	m68ki_write_32(ea, FLAG_Z);
31875 }
31876 
31877 
m68k_op_sub_32_re_al(void)31878 static void m68k_op_sub_32_re_al(void)
31879 {
31880 	uint ea = EA_AL_32();
31881 	uint src = DX;
31882 	uint dst = m68ki_read_32(ea);
31883 	uint res = dst - src;
31884 
31885 	FLAG_N = NFLAG_32(res);
31886 	FLAG_Z = MASK_OUT_ABOVE_32(res);
31887 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
31888 	FLAG_V = VFLAG_SUB_32(src, dst, res);
31889 
31890 	m68ki_write_32(ea, FLAG_Z);
31891 }
31892 
31893 
m68k_op_suba_16_d(void)31894 static void m68k_op_suba_16_d(void)
31895 {
31896 	uint* r_dst = &AX;
31897 
31898 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(DY));
31899 }
31900 
31901 
m68k_op_suba_16_a(void)31902 static void m68k_op_suba_16_a(void)
31903 {
31904 	uint* r_dst = &AX;
31905 
31906 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(AY));
31907 }
31908 
31909 
m68k_op_suba_16_ai(void)31910 static void m68k_op_suba_16_ai(void)
31911 {
31912 	uint* r_dst = &AX;
31913 	uint src = MAKE_INT_16(OPER_AY_AI_16());
31914 
31915 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
31916 }
31917 
31918 
m68k_op_suba_16_pi(void)31919 static void m68k_op_suba_16_pi(void)
31920 {
31921 	uint* r_dst = &AX;
31922 	uint src = MAKE_INT_16(OPER_AY_PI_16());
31923 
31924 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
31925 }
31926 
31927 
m68k_op_suba_16_pd(void)31928 static void m68k_op_suba_16_pd(void)
31929 {
31930 	uint* r_dst = &AX;
31931 	uint src = MAKE_INT_16(OPER_AY_PD_16());
31932 
31933 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
31934 }
31935 
31936 
m68k_op_suba_16_di(void)31937 static void m68k_op_suba_16_di(void)
31938 {
31939 	uint* r_dst = &AX;
31940 	uint src = MAKE_INT_16(OPER_AY_DI_16());
31941 
31942 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
31943 }
31944 
31945 
m68k_op_suba_16_ix(void)31946 static void m68k_op_suba_16_ix(void)
31947 {
31948 	uint* r_dst = &AX;
31949 	uint src = MAKE_INT_16(OPER_AY_IX_16());
31950 
31951 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
31952 }
31953 
31954 
m68k_op_suba_16_aw(void)31955 static void m68k_op_suba_16_aw(void)
31956 {
31957 	uint* r_dst = &AX;
31958 	uint src = MAKE_INT_16(OPER_AW_16());
31959 
31960 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
31961 }
31962 
31963 
m68k_op_suba_16_al(void)31964 static void m68k_op_suba_16_al(void)
31965 {
31966 	uint* r_dst = &AX;
31967 	uint src = MAKE_INT_16(OPER_AL_16());
31968 
31969 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
31970 }
31971 
31972 
m68k_op_suba_16_pcdi(void)31973 static void m68k_op_suba_16_pcdi(void)
31974 {
31975 	uint* r_dst = &AX;
31976 	uint src = MAKE_INT_16(OPER_PCDI_16());
31977 
31978 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
31979 }
31980 
31981 
m68k_op_suba_16_pcix(void)31982 static void m68k_op_suba_16_pcix(void)
31983 {
31984 	uint* r_dst = &AX;
31985 	uint src = MAKE_INT_16(OPER_PCIX_16());
31986 
31987 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
31988 }
31989 
31990 
m68k_op_suba_16_i(void)31991 static void m68k_op_suba_16_i(void)
31992 {
31993 	uint* r_dst = &AX;
31994 	uint src = MAKE_INT_16(OPER_I_16());
31995 
31996 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
31997 }
31998 
31999 
m68k_op_suba_32_d(void)32000 static void m68k_op_suba_32_d(void)
32001 {
32002 	uint* r_dst = &AX;
32003 
32004 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - DY);
32005 }
32006 
32007 
m68k_op_suba_32_a(void)32008 static void m68k_op_suba_32_a(void)
32009 {
32010 	uint* r_dst = &AX;
32011 
32012 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - AY);
32013 }
32014 
32015 
m68k_op_suba_32_ai(void)32016 static void m68k_op_suba_32_ai(void)
32017 {
32018 	uint* r_dst = &AX;
32019 	uint src = OPER_AY_AI_32();
32020 
32021 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
32022 }
32023 
32024 
m68k_op_suba_32_pi(void)32025 static void m68k_op_suba_32_pi(void)
32026 {
32027 	uint* r_dst = &AX;
32028 	uint src = OPER_AY_PI_32();
32029 
32030 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
32031 }
32032 
32033 
m68k_op_suba_32_pd(void)32034 static void m68k_op_suba_32_pd(void)
32035 {
32036 	uint* r_dst = &AX;
32037 	uint src = OPER_AY_PD_32();
32038 
32039 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
32040 }
32041 
32042 
m68k_op_suba_32_di(void)32043 static void m68k_op_suba_32_di(void)
32044 {
32045 	uint* r_dst = &AX;
32046 	uint src = OPER_AY_DI_32();
32047 
32048 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
32049 }
32050 
32051 
m68k_op_suba_32_ix(void)32052 static void m68k_op_suba_32_ix(void)
32053 {
32054 	uint* r_dst = &AX;
32055 	uint src = OPER_AY_IX_32();
32056 
32057 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
32058 }
32059 
32060 
m68k_op_suba_32_aw(void)32061 static void m68k_op_suba_32_aw(void)
32062 {
32063 	uint* r_dst = &AX;
32064 	uint src = OPER_AW_32();
32065 
32066 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
32067 }
32068 
32069 
m68k_op_suba_32_al(void)32070 static void m68k_op_suba_32_al(void)
32071 {
32072 	uint* r_dst = &AX;
32073 	uint src = OPER_AL_32();
32074 
32075 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
32076 }
32077 
32078 
m68k_op_suba_32_pcdi(void)32079 static void m68k_op_suba_32_pcdi(void)
32080 {
32081 	uint* r_dst = &AX;
32082 	uint src = OPER_PCDI_32();
32083 
32084 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
32085 }
32086 
32087 
m68k_op_suba_32_pcix(void)32088 static void m68k_op_suba_32_pcix(void)
32089 {
32090 	uint* r_dst = &AX;
32091 	uint src = OPER_PCIX_32();
32092 
32093 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
32094 }
32095 
32096 
m68k_op_suba_32_i(void)32097 static void m68k_op_suba_32_i(void)
32098 {
32099 	uint* r_dst = &AX;
32100 	uint src = OPER_I_32();
32101 
32102 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
32103 }
32104 
32105 
m68k_op_subi_8_d(void)32106 static void m68k_op_subi_8_d(void)
32107 {
32108 	uint* r_dst = &DY;
32109 	uint src = OPER_I_8();
32110 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
32111 	uint res = dst - src;
32112 
32113 	FLAG_N = NFLAG_8(res);
32114 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32115 	FLAG_X = FLAG_C = CFLAG_8(res);
32116 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32117 
32118 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
32119 }
32120 
32121 
m68k_op_subi_8_ai(void)32122 static void m68k_op_subi_8_ai(void)
32123 {
32124 	uint src = OPER_I_8();
32125 	uint ea = EA_AY_AI_8();
32126 	uint dst = m68ki_read_8(ea);
32127 	uint res = dst - src;
32128 
32129 	FLAG_N = NFLAG_8(res);
32130 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32131 	FLAG_X = FLAG_C = CFLAG_8(res);
32132 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32133 
32134 	m68ki_write_8(ea, FLAG_Z);
32135 }
32136 
32137 
m68k_op_subi_8_pi(void)32138 static void m68k_op_subi_8_pi(void)
32139 {
32140 	uint src = OPER_I_8();
32141 	uint ea = EA_AY_PI_8();
32142 	uint dst = m68ki_read_8(ea);
32143 	uint res = dst - src;
32144 
32145 	FLAG_N = NFLAG_8(res);
32146 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32147 	FLAG_X = FLAG_C = CFLAG_8(res);
32148 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32149 
32150 	m68ki_write_8(ea, FLAG_Z);
32151 }
32152 
32153 
m68k_op_subi_8_pi7(void)32154 static void m68k_op_subi_8_pi7(void)
32155 {
32156 	uint src = OPER_I_8();
32157 	uint ea = EA_A7_PI_8();
32158 	uint dst = m68ki_read_8(ea);
32159 	uint res = dst - src;
32160 
32161 	FLAG_N = NFLAG_8(res);
32162 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32163 	FLAG_X = FLAG_C = CFLAG_8(res);
32164 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32165 
32166 	m68ki_write_8(ea, FLAG_Z);
32167 }
32168 
32169 
m68k_op_subi_8_pd(void)32170 static void m68k_op_subi_8_pd(void)
32171 {
32172 	uint src = OPER_I_8();
32173 	uint ea = EA_AY_PD_8();
32174 	uint dst = m68ki_read_8(ea);
32175 	uint res = dst - src;
32176 
32177 	FLAG_N = NFLAG_8(res);
32178 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32179 	FLAG_X = FLAG_C = CFLAG_8(res);
32180 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32181 
32182 	m68ki_write_8(ea, FLAG_Z);
32183 }
32184 
32185 
m68k_op_subi_8_pd7(void)32186 static void m68k_op_subi_8_pd7(void)
32187 {
32188 	uint src = OPER_I_8();
32189 	uint ea = EA_A7_PD_8();
32190 	uint dst = m68ki_read_8(ea);
32191 	uint res = dst - src;
32192 
32193 	FLAG_N = NFLAG_8(res);
32194 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32195 	FLAG_X = FLAG_C = CFLAG_8(res);
32196 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32197 
32198 	m68ki_write_8(ea, FLAG_Z);
32199 }
32200 
32201 
m68k_op_subi_8_di(void)32202 static void m68k_op_subi_8_di(void)
32203 {
32204 	uint src = OPER_I_8();
32205 	uint ea = EA_AY_DI_8();
32206 	uint dst = m68ki_read_8(ea);
32207 	uint res = dst - src;
32208 
32209 	FLAG_N = NFLAG_8(res);
32210 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32211 	FLAG_X = FLAG_C = CFLAG_8(res);
32212 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32213 
32214 	m68ki_write_8(ea, FLAG_Z);
32215 }
32216 
32217 
m68k_op_subi_8_ix(void)32218 static void m68k_op_subi_8_ix(void)
32219 {
32220 	uint src = OPER_I_8();
32221 	uint ea = EA_AY_IX_8();
32222 	uint dst = m68ki_read_8(ea);
32223 	uint res = dst - src;
32224 
32225 	FLAG_N = NFLAG_8(res);
32226 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32227 	FLAG_X = FLAG_C = CFLAG_8(res);
32228 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32229 
32230 	m68ki_write_8(ea, FLAG_Z);
32231 }
32232 
32233 
m68k_op_subi_8_aw(void)32234 static void m68k_op_subi_8_aw(void)
32235 {
32236 	uint src = OPER_I_8();
32237 	uint ea = EA_AW_8();
32238 	uint dst = m68ki_read_8(ea);
32239 	uint res = dst - src;
32240 
32241 	FLAG_N = NFLAG_8(res);
32242 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32243 	FLAG_X = FLAG_C = CFLAG_8(res);
32244 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32245 
32246 	m68ki_write_8(ea, FLAG_Z);
32247 }
32248 
32249 
m68k_op_subi_8_al(void)32250 static void m68k_op_subi_8_al(void)
32251 {
32252 	uint src = OPER_I_8();
32253 	uint ea = EA_AL_8();
32254 	uint dst = m68ki_read_8(ea);
32255 	uint res = dst - src;
32256 
32257 	FLAG_N = NFLAG_8(res);
32258 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32259 	FLAG_X = FLAG_C = CFLAG_8(res);
32260 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32261 
32262 	m68ki_write_8(ea, FLAG_Z);
32263 }
32264 
32265 
m68k_op_subi_16_d(void)32266 static void m68k_op_subi_16_d(void)
32267 {
32268 	uint* r_dst = &DY;
32269 	uint src = OPER_I_16();
32270 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
32271 	uint res = dst - src;
32272 
32273 	FLAG_N = NFLAG_16(res);
32274 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32275 	FLAG_X = FLAG_C = CFLAG_16(res);
32276 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32277 
32278 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
32279 }
32280 
32281 
m68k_op_subi_16_ai(void)32282 static void m68k_op_subi_16_ai(void)
32283 {
32284 	uint src = OPER_I_16();
32285 	uint ea = EA_AY_AI_16();
32286 	uint dst = m68ki_read_16(ea);
32287 	uint res = dst - src;
32288 
32289 	FLAG_N = NFLAG_16(res);
32290 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32291 	FLAG_X = FLAG_C = CFLAG_16(res);
32292 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32293 
32294 	m68ki_write_16(ea, FLAG_Z);
32295 }
32296 
32297 
m68k_op_subi_16_pi(void)32298 static void m68k_op_subi_16_pi(void)
32299 {
32300 	uint src = OPER_I_16();
32301 	uint ea = EA_AY_PI_16();
32302 	uint dst = m68ki_read_16(ea);
32303 	uint res = dst - src;
32304 
32305 	FLAG_N = NFLAG_16(res);
32306 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32307 	FLAG_X = FLAG_C = CFLAG_16(res);
32308 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32309 
32310 	m68ki_write_16(ea, FLAG_Z);
32311 }
32312 
32313 
m68k_op_subi_16_pd(void)32314 static void m68k_op_subi_16_pd(void)
32315 {
32316 	uint src = OPER_I_16();
32317 	uint ea = EA_AY_PD_16();
32318 	uint dst = m68ki_read_16(ea);
32319 	uint res = dst - src;
32320 
32321 	FLAG_N = NFLAG_16(res);
32322 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32323 	FLAG_X = FLAG_C = CFLAG_16(res);
32324 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32325 
32326 	m68ki_write_16(ea, FLAG_Z);
32327 }
32328 
32329 
m68k_op_subi_16_di(void)32330 static void m68k_op_subi_16_di(void)
32331 {
32332 	uint src = OPER_I_16();
32333 	uint ea = EA_AY_DI_16();
32334 	uint dst = m68ki_read_16(ea);
32335 	uint res = dst - src;
32336 
32337 	FLAG_N = NFLAG_16(res);
32338 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32339 	FLAG_X = FLAG_C = CFLAG_16(res);
32340 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32341 
32342 	m68ki_write_16(ea, FLAG_Z);
32343 }
32344 
32345 
m68k_op_subi_16_ix(void)32346 static void m68k_op_subi_16_ix(void)
32347 {
32348 	uint src = OPER_I_16();
32349 	uint ea = EA_AY_IX_16();
32350 	uint dst = m68ki_read_16(ea);
32351 	uint res = dst - src;
32352 
32353 	FLAG_N = NFLAG_16(res);
32354 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32355 	FLAG_X = FLAG_C = CFLAG_16(res);
32356 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32357 
32358 	m68ki_write_16(ea, FLAG_Z);
32359 }
32360 
32361 
m68k_op_subi_16_aw(void)32362 static void m68k_op_subi_16_aw(void)
32363 {
32364 	uint src = OPER_I_16();
32365 	uint ea = EA_AW_16();
32366 	uint dst = m68ki_read_16(ea);
32367 	uint res = dst - src;
32368 
32369 	FLAG_N = NFLAG_16(res);
32370 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32371 	FLAG_X = FLAG_C = CFLAG_16(res);
32372 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32373 
32374 	m68ki_write_16(ea, FLAG_Z);
32375 }
32376 
32377 
m68k_op_subi_16_al(void)32378 static void m68k_op_subi_16_al(void)
32379 {
32380 	uint src = OPER_I_16();
32381 	uint ea = EA_AL_16();
32382 	uint dst = m68ki_read_16(ea);
32383 	uint res = dst - src;
32384 
32385 	FLAG_N = NFLAG_16(res);
32386 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32387 	FLAG_X = FLAG_C = CFLAG_16(res);
32388 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32389 
32390 	m68ki_write_16(ea, FLAG_Z);
32391 }
32392 
32393 
m68k_op_subi_32_d(void)32394 static void m68k_op_subi_32_d(void)
32395 {
32396 	uint* r_dst = &DY;
32397 	uint src = OPER_I_32();
32398 	uint dst = *r_dst;
32399 	uint res = dst - src;
32400 
32401 	FLAG_N = NFLAG_32(res);
32402 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32403 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32404 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32405 
32406 	*r_dst = FLAG_Z;
32407 }
32408 
32409 
m68k_op_subi_32_ai(void)32410 static void m68k_op_subi_32_ai(void)
32411 {
32412 	uint src = OPER_I_32();
32413 	uint ea = EA_AY_AI_32();
32414 	uint dst = m68ki_read_32(ea);
32415 	uint res = dst - src;
32416 
32417 	FLAG_N = NFLAG_32(res);
32418 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32419 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32420 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32421 
32422 	m68ki_write_32(ea, FLAG_Z);
32423 }
32424 
32425 
m68k_op_subi_32_pi(void)32426 static void m68k_op_subi_32_pi(void)
32427 {
32428 	uint src = OPER_I_32();
32429 	uint ea = EA_AY_PI_32();
32430 	uint dst = m68ki_read_32(ea);
32431 	uint res = dst - src;
32432 
32433 	FLAG_N = NFLAG_32(res);
32434 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32435 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32436 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32437 
32438 	m68ki_write_32(ea, FLAG_Z);
32439 }
32440 
32441 
m68k_op_subi_32_pd(void)32442 static void m68k_op_subi_32_pd(void)
32443 {
32444 	uint src = OPER_I_32();
32445 	uint ea = EA_AY_PD_32();
32446 	uint dst = m68ki_read_32(ea);
32447 	uint res = dst - src;
32448 
32449 	FLAG_N = NFLAG_32(res);
32450 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32451 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32452 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32453 
32454 	m68ki_write_32(ea, FLAG_Z);
32455 }
32456 
32457 
m68k_op_subi_32_di(void)32458 static void m68k_op_subi_32_di(void)
32459 {
32460 	uint src = OPER_I_32();
32461 	uint ea = EA_AY_DI_32();
32462 	uint dst = m68ki_read_32(ea);
32463 	uint res = dst - src;
32464 
32465 	FLAG_N = NFLAG_32(res);
32466 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32467 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32468 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32469 
32470 	m68ki_write_32(ea, FLAG_Z);
32471 }
32472 
32473 
m68k_op_subi_32_ix(void)32474 static void m68k_op_subi_32_ix(void)
32475 {
32476 	uint src = OPER_I_32();
32477 	uint ea = EA_AY_IX_32();
32478 	uint dst = m68ki_read_32(ea);
32479 	uint res = dst - src;
32480 
32481 	FLAG_N = NFLAG_32(res);
32482 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32483 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32484 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32485 
32486 	m68ki_write_32(ea, FLAG_Z);
32487 }
32488 
32489 
m68k_op_subi_32_aw(void)32490 static void m68k_op_subi_32_aw(void)
32491 {
32492 	uint src = OPER_I_32();
32493 	uint ea = EA_AW_32();
32494 	uint dst = m68ki_read_32(ea);
32495 	uint res = dst - src;
32496 
32497 	FLAG_N = NFLAG_32(res);
32498 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32499 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32500 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32501 
32502 	m68ki_write_32(ea, FLAG_Z);
32503 }
32504 
32505 
m68k_op_subi_32_al(void)32506 static void m68k_op_subi_32_al(void)
32507 {
32508 	uint src = OPER_I_32();
32509 	uint ea = EA_AL_32();
32510 	uint dst = m68ki_read_32(ea);
32511 	uint res = dst - src;
32512 
32513 	FLAG_N = NFLAG_32(res);
32514 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32515 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32516 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32517 
32518 	m68ki_write_32(ea, FLAG_Z);
32519 }
32520 
32521 
m68k_op_subq_8_d(void)32522 static void m68k_op_subq_8_d(void)
32523 {
32524 	uint* r_dst = &DY;
32525 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32526 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
32527 	uint res = dst - src;
32528 
32529 	FLAG_N = NFLAG_8(res);
32530 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32531 	FLAG_X = FLAG_C = CFLAG_8(res);
32532 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32533 
32534 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
32535 }
32536 
32537 
m68k_op_subq_8_ai(void)32538 static void m68k_op_subq_8_ai(void)
32539 {
32540 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32541 	uint ea = EA_AY_AI_8();
32542 	uint dst = m68ki_read_8(ea);
32543 	uint res = dst - src;
32544 
32545 	FLAG_N = NFLAG_8(res);
32546 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32547 	FLAG_X = FLAG_C = CFLAG_8(res);
32548 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32549 
32550 	m68ki_write_8(ea, FLAG_Z);
32551 }
32552 
32553 
m68k_op_subq_8_pi(void)32554 static void m68k_op_subq_8_pi(void)
32555 {
32556 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32557 	uint ea = EA_AY_PI_8();
32558 	uint dst = m68ki_read_8(ea);
32559 	uint res = dst - src;
32560 
32561 	FLAG_N = NFLAG_8(res);
32562 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32563 	FLAG_X = FLAG_C = CFLAG_8(res);
32564 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32565 
32566 	m68ki_write_8(ea, FLAG_Z);
32567 }
32568 
32569 
m68k_op_subq_8_pi7(void)32570 static void m68k_op_subq_8_pi7(void)
32571 {
32572 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32573 	uint ea = EA_A7_PI_8();
32574 	uint dst = m68ki_read_8(ea);
32575 	uint res = dst - src;
32576 
32577 	FLAG_N = NFLAG_8(res);
32578 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32579 	FLAG_X = FLAG_C = CFLAG_8(res);
32580 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32581 
32582 	m68ki_write_8(ea, FLAG_Z);
32583 }
32584 
32585 
m68k_op_subq_8_pd(void)32586 static void m68k_op_subq_8_pd(void)
32587 {
32588 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32589 	uint ea = EA_AY_PD_8();
32590 	uint dst = m68ki_read_8(ea);
32591 	uint res = dst - src;
32592 
32593 	FLAG_N = NFLAG_8(res);
32594 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32595 	FLAG_X = FLAG_C = CFLAG_8(res);
32596 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32597 
32598 	m68ki_write_8(ea, FLAG_Z);
32599 }
32600 
32601 
m68k_op_subq_8_pd7(void)32602 static void m68k_op_subq_8_pd7(void)
32603 {
32604 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32605 	uint ea = EA_A7_PD_8();
32606 	uint dst = m68ki_read_8(ea);
32607 	uint res = dst - src;
32608 
32609 	FLAG_N = NFLAG_8(res);
32610 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32611 	FLAG_X = FLAG_C = CFLAG_8(res);
32612 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32613 
32614 	m68ki_write_8(ea, FLAG_Z);
32615 }
32616 
32617 
m68k_op_subq_8_di(void)32618 static void m68k_op_subq_8_di(void)
32619 {
32620 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32621 	uint ea = EA_AY_DI_8();
32622 	uint dst = m68ki_read_8(ea);
32623 	uint res = dst - src;
32624 
32625 	FLAG_N = NFLAG_8(res);
32626 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32627 	FLAG_X = FLAG_C = CFLAG_8(res);
32628 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32629 
32630 	m68ki_write_8(ea, FLAG_Z);
32631 }
32632 
32633 
m68k_op_subq_8_ix(void)32634 static void m68k_op_subq_8_ix(void)
32635 {
32636 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32637 	uint ea = EA_AY_IX_8();
32638 	uint dst = m68ki_read_8(ea);
32639 	uint res = dst - src;
32640 
32641 	FLAG_N = NFLAG_8(res);
32642 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32643 	FLAG_X = FLAG_C = CFLAG_8(res);
32644 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32645 
32646 	m68ki_write_8(ea, FLAG_Z);
32647 }
32648 
32649 
m68k_op_subq_8_aw(void)32650 static void m68k_op_subq_8_aw(void)
32651 {
32652 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32653 	uint ea = EA_AW_8();
32654 	uint dst = m68ki_read_8(ea);
32655 	uint res = dst - src;
32656 
32657 	FLAG_N = NFLAG_8(res);
32658 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32659 	FLAG_X = FLAG_C = CFLAG_8(res);
32660 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32661 
32662 	m68ki_write_8(ea, FLAG_Z);
32663 }
32664 
32665 
m68k_op_subq_8_al(void)32666 static void m68k_op_subq_8_al(void)
32667 {
32668 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32669 	uint ea = EA_AL_8();
32670 	uint dst = m68ki_read_8(ea);
32671 	uint res = dst - src;
32672 
32673 	FLAG_N = NFLAG_8(res);
32674 	FLAG_Z = MASK_OUT_ABOVE_8(res);
32675 	FLAG_X = FLAG_C = CFLAG_8(res);
32676 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32677 
32678 	m68ki_write_8(ea, FLAG_Z);
32679 }
32680 
32681 
m68k_op_subq_16_d(void)32682 static void m68k_op_subq_16_d(void)
32683 {
32684 	uint* r_dst = &DY;
32685 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32686 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
32687 	uint res = dst - src;
32688 
32689 	FLAG_N = NFLAG_16(res);
32690 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32691 	FLAG_X = FLAG_C = CFLAG_16(res);
32692 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32693 
32694 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
32695 }
32696 
32697 
m68k_op_subq_16_a(void)32698 static void m68k_op_subq_16_a(void)
32699 {
32700 	uint* r_dst = &AY;
32701 
32702 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1));
32703 }
32704 
32705 
m68k_op_subq_16_ai(void)32706 static void m68k_op_subq_16_ai(void)
32707 {
32708 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32709 	uint ea = EA_AY_AI_16();
32710 	uint dst = m68ki_read_16(ea);
32711 	uint res = dst - src;
32712 
32713 	FLAG_N = NFLAG_16(res);
32714 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32715 	FLAG_X = FLAG_C = CFLAG_16(res);
32716 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32717 
32718 	m68ki_write_16(ea, FLAG_Z);
32719 }
32720 
32721 
m68k_op_subq_16_pi(void)32722 static void m68k_op_subq_16_pi(void)
32723 {
32724 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32725 	uint ea = EA_AY_PI_16();
32726 	uint dst = m68ki_read_16(ea);
32727 	uint res = dst - src;
32728 
32729 	FLAG_N = NFLAG_16(res);
32730 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32731 	FLAG_X = FLAG_C = CFLAG_16(res);
32732 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32733 
32734 	m68ki_write_16(ea, FLAG_Z);
32735 }
32736 
32737 
m68k_op_subq_16_pd(void)32738 static void m68k_op_subq_16_pd(void)
32739 {
32740 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32741 	uint ea = EA_AY_PD_16();
32742 	uint dst = m68ki_read_16(ea);
32743 	uint res = dst - src;
32744 
32745 	FLAG_N = NFLAG_16(res);
32746 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32747 	FLAG_X = FLAG_C = CFLAG_16(res);
32748 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32749 
32750 	m68ki_write_16(ea, FLAG_Z);
32751 }
32752 
32753 
m68k_op_subq_16_di(void)32754 static void m68k_op_subq_16_di(void)
32755 {
32756 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32757 	uint ea = EA_AY_DI_16();
32758 	uint dst = m68ki_read_16(ea);
32759 	uint res = dst - src;
32760 
32761 	FLAG_N = NFLAG_16(res);
32762 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32763 	FLAG_X = FLAG_C = CFLAG_16(res);
32764 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32765 
32766 	m68ki_write_16(ea, FLAG_Z);
32767 }
32768 
32769 
m68k_op_subq_16_ix(void)32770 static void m68k_op_subq_16_ix(void)
32771 {
32772 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32773 	uint ea = EA_AY_IX_16();
32774 	uint dst = m68ki_read_16(ea);
32775 	uint res = dst - src;
32776 
32777 	FLAG_N = NFLAG_16(res);
32778 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32779 	FLAG_X = FLAG_C = CFLAG_16(res);
32780 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32781 
32782 	m68ki_write_16(ea, FLAG_Z);
32783 }
32784 
32785 
m68k_op_subq_16_aw(void)32786 static void m68k_op_subq_16_aw(void)
32787 {
32788 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32789 	uint ea = EA_AW_16();
32790 	uint dst = m68ki_read_16(ea);
32791 	uint res = dst - src;
32792 
32793 	FLAG_N = NFLAG_16(res);
32794 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32795 	FLAG_X = FLAG_C = CFLAG_16(res);
32796 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32797 
32798 	m68ki_write_16(ea, FLAG_Z);
32799 }
32800 
32801 
m68k_op_subq_16_al(void)32802 static void m68k_op_subq_16_al(void)
32803 {
32804 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32805 	uint ea = EA_AL_16();
32806 	uint dst = m68ki_read_16(ea);
32807 	uint res = dst - src;
32808 
32809 	FLAG_N = NFLAG_16(res);
32810 	FLAG_Z = MASK_OUT_ABOVE_16(res);
32811 	FLAG_X = FLAG_C = CFLAG_16(res);
32812 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32813 
32814 	m68ki_write_16(ea, FLAG_Z);
32815 }
32816 
32817 
m68k_op_subq_32_d(void)32818 static void m68k_op_subq_32_d(void)
32819 {
32820 	uint* r_dst = &DY;
32821 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32822 	uint dst = *r_dst;
32823 	uint res = dst - src;
32824 
32825 	FLAG_N = NFLAG_32(res);
32826 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32827 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32828 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32829 
32830 	*r_dst = FLAG_Z;
32831 }
32832 
32833 
m68k_op_subq_32_a(void)32834 static void m68k_op_subq_32_a(void)
32835 {
32836 	uint* r_dst = &AY;
32837 
32838 	*r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1));
32839 }
32840 
32841 
m68k_op_subq_32_ai(void)32842 static void m68k_op_subq_32_ai(void)
32843 {
32844 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32845 	uint ea = EA_AY_AI_32();
32846 	uint dst = m68ki_read_32(ea);
32847 	uint res = dst - src;
32848 
32849 	FLAG_N = NFLAG_32(res);
32850 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32851 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32852 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32853 
32854 	m68ki_write_32(ea, FLAG_Z);
32855 }
32856 
32857 
m68k_op_subq_32_pi(void)32858 static void m68k_op_subq_32_pi(void)
32859 {
32860 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32861 	uint ea = EA_AY_PI_32();
32862 	uint dst = m68ki_read_32(ea);
32863 	uint res = dst - src;
32864 
32865 	FLAG_N = NFLAG_32(res);
32866 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32867 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32868 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32869 
32870 	m68ki_write_32(ea, FLAG_Z);
32871 }
32872 
32873 
m68k_op_subq_32_pd(void)32874 static void m68k_op_subq_32_pd(void)
32875 {
32876 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32877 	uint ea = EA_AY_PD_32();
32878 	uint dst = m68ki_read_32(ea);
32879 	uint res = dst - src;
32880 
32881 	FLAG_N = NFLAG_32(res);
32882 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32883 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32884 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32885 
32886 	m68ki_write_32(ea, FLAG_Z);
32887 }
32888 
32889 
m68k_op_subq_32_di(void)32890 static void m68k_op_subq_32_di(void)
32891 {
32892 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32893 	uint ea = EA_AY_DI_32();
32894 	uint dst = m68ki_read_32(ea);
32895 	uint res = dst - src;
32896 
32897 	FLAG_N = NFLAG_32(res);
32898 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32899 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32900 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32901 
32902 	m68ki_write_32(ea, FLAG_Z);
32903 }
32904 
32905 
m68k_op_subq_32_ix(void)32906 static void m68k_op_subq_32_ix(void)
32907 {
32908 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32909 	uint ea = EA_AY_IX_32();
32910 	uint dst = m68ki_read_32(ea);
32911 	uint res = dst - src;
32912 
32913 	FLAG_N = NFLAG_32(res);
32914 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32915 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32916 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32917 
32918 	m68ki_write_32(ea, FLAG_Z);
32919 }
32920 
32921 
m68k_op_subq_32_aw(void)32922 static void m68k_op_subq_32_aw(void)
32923 {
32924 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32925 	uint ea = EA_AW_32();
32926 	uint dst = m68ki_read_32(ea);
32927 	uint res = dst - src;
32928 
32929 	FLAG_N = NFLAG_32(res);
32930 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32931 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32932 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32933 
32934 	m68ki_write_32(ea, FLAG_Z);
32935 }
32936 
32937 
m68k_op_subq_32_al(void)32938 static void m68k_op_subq_32_al(void)
32939 {
32940 	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
32941 	uint ea = EA_AL_32();
32942 	uint dst = m68ki_read_32(ea);
32943 	uint res = dst - src;
32944 
32945 	FLAG_N = NFLAG_32(res);
32946 	FLAG_Z = MASK_OUT_ABOVE_32(res);
32947 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32948 	FLAG_V = VFLAG_SUB_32(src, dst, res);
32949 
32950 	m68ki_write_32(ea, FLAG_Z);
32951 }
32952 
32953 
m68k_op_subx_8_rr(void)32954 static void m68k_op_subx_8_rr(void)
32955 {
32956 	uint* r_dst = &DX;
32957 	uint src = MASK_OUT_ABOVE_8(DY);
32958 	uint dst = MASK_OUT_ABOVE_8(*r_dst);
32959 	uint res = dst - src - XFLAG_AS_1();
32960 
32961 	FLAG_N = NFLAG_8(res);
32962 	FLAG_X = FLAG_C = CFLAG_8(res);
32963 	FLAG_V = VFLAG_SUB_8(src, dst, res);
32964 
32965 	res = MASK_OUT_ABOVE_8(res);
32966 	FLAG_Z |= res;
32967 
32968 	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
32969 }
32970 
32971 
m68k_op_subx_16_rr(void)32972 static void m68k_op_subx_16_rr(void)
32973 {
32974 	uint* r_dst = &DX;
32975 	uint src = MASK_OUT_ABOVE_16(DY);
32976 	uint dst = MASK_OUT_ABOVE_16(*r_dst);
32977 	uint res = dst - src - XFLAG_AS_1();
32978 
32979 	FLAG_N = NFLAG_16(res);
32980 	FLAG_X = FLAG_C = CFLAG_16(res);
32981 	FLAG_V = VFLAG_SUB_16(src, dst, res);
32982 
32983 	res = MASK_OUT_ABOVE_16(res);
32984 	FLAG_Z |= res;
32985 
32986 	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
32987 }
32988 
32989 
m68k_op_subx_32_rr(void)32990 static void m68k_op_subx_32_rr(void)
32991 {
32992 	uint* r_dst = &DX;
32993 	uint src = DY;
32994 	uint dst = *r_dst;
32995 	uint res = dst - src - XFLAG_AS_1();
32996 
32997 	FLAG_N = NFLAG_32(res);
32998 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
32999 	FLAG_V = VFLAG_SUB_32(src, dst, res);
33000 
33001 	res = MASK_OUT_ABOVE_32(res);
33002 	FLAG_Z |= res;
33003 
33004 	*r_dst = res;
33005 }
33006 
33007 
m68k_op_subx_8_mm_ax7(void)33008 static void m68k_op_subx_8_mm_ax7(void)
33009 {
33010 	uint src = OPER_AY_PD_8();
33011 	uint ea  = EA_A7_PD_8();
33012 	uint dst = m68ki_read_8(ea);
33013 	uint res = dst - src - XFLAG_AS_1();
33014 
33015 	FLAG_N = NFLAG_8(res);
33016 	FLAG_X = FLAG_C = CFLAG_8(res);
33017 	FLAG_V = VFLAG_SUB_8(src, dst, res);
33018 
33019 	res = MASK_OUT_ABOVE_8(res);
33020 	FLAG_Z |= res;
33021 
33022 	m68ki_write_8(ea, res);
33023 }
33024 
33025 
m68k_op_subx_8_mm_ay7(void)33026 static void m68k_op_subx_8_mm_ay7(void)
33027 {
33028 	uint src = OPER_A7_PD_8();
33029 	uint ea  = EA_AX_PD_8();
33030 	uint dst = m68ki_read_8(ea);
33031 	uint res = dst - src - XFLAG_AS_1();
33032 
33033 	FLAG_N = NFLAG_8(res);
33034 	FLAG_X = FLAG_C = CFLAG_8(res);
33035 	FLAG_V = VFLAG_SUB_8(src, dst, res);
33036 
33037 	res = MASK_OUT_ABOVE_8(res);
33038 	FLAG_Z |= res;
33039 
33040 	m68ki_write_8(ea, res);
33041 }
33042 
33043 
m68k_op_subx_8_mm_axy7(void)33044 static void m68k_op_subx_8_mm_axy7(void)
33045 {
33046 	uint src = OPER_A7_PD_8();
33047 	uint ea  = EA_A7_PD_8();
33048 	uint dst = m68ki_read_8(ea);
33049 	uint res = dst - src - XFLAG_AS_1();
33050 
33051 	FLAG_N = NFLAG_8(res);
33052 	FLAG_X = FLAG_C = CFLAG_8(res);
33053 	FLAG_V = VFLAG_SUB_8(src, dst, res);
33054 
33055 	res = MASK_OUT_ABOVE_8(res);
33056 	FLAG_Z |= res;
33057 
33058 	m68ki_write_8(ea, res);
33059 }
33060 
33061 
m68k_op_subx_8_mm(void)33062 static void m68k_op_subx_8_mm(void)
33063 {
33064 	uint src = OPER_AY_PD_8();
33065 	uint ea  = EA_AX_PD_8();
33066 	uint dst = m68ki_read_8(ea);
33067 	uint res = dst - src - XFLAG_AS_1();
33068 
33069 	FLAG_N = NFLAG_8(res);
33070 	FLAG_X = FLAG_C = CFLAG_8(res);
33071 	FLAG_V = VFLAG_SUB_8(src, dst, res);
33072 
33073 	res = MASK_OUT_ABOVE_8(res);
33074 	FLAG_Z |= res;
33075 
33076 	m68ki_write_8(ea, res);
33077 }
33078 
33079 
m68k_op_subx_16_mm(void)33080 static void m68k_op_subx_16_mm(void)
33081 {
33082 	uint src = OPER_AY_PD_16();
33083 	uint ea  = EA_AX_PD_16();
33084 	uint dst = m68ki_read_16(ea);
33085 	uint res = dst - src - XFLAG_AS_1();
33086 
33087 	FLAG_N = NFLAG_16(res);
33088 	FLAG_X = FLAG_C = CFLAG_16(res);
33089 	FLAG_V = VFLAG_SUB_16(src, dst, res);
33090 
33091 	res = MASK_OUT_ABOVE_16(res);
33092 	FLAG_Z |= res;
33093 
33094 	m68ki_write_16(ea, res);
33095 }
33096 
33097 
m68k_op_subx_32_mm(void)33098 static void m68k_op_subx_32_mm(void)
33099 {
33100 	uint src = OPER_AY_PD_32();
33101 	uint ea  = EA_AX_PD_32();
33102 	uint dst = m68ki_read_32(ea);
33103 	uint res = dst - src - XFLAG_AS_1();
33104 
33105 	FLAG_N = NFLAG_32(res);
33106 	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
33107 	FLAG_V = VFLAG_SUB_32(src, dst, res);
33108 
33109 	res = MASK_OUT_ABOVE_32(res);
33110 	FLAG_Z |= res;
33111 
33112 	m68ki_write_32(ea, res);
33113 }
33114 
33115 
m68k_op_swap_32(void)33116 static void m68k_op_swap_32(void)
33117 {
33118 	uint* r_dst = &DY;
33119 
33120 	FLAG_Z = MASK_OUT_ABOVE_32(*r_dst<<16);
33121 	*r_dst = (*r_dst>>16) | FLAG_Z;
33122 
33123 	FLAG_Z = *r_dst;
33124 	FLAG_N = NFLAG_32(*r_dst);
33125 	FLAG_C = CFLAG_CLEAR;
33126 	FLAG_V = VFLAG_CLEAR;
33127 }
33128 
33129 
m68k_op_tas_8_d(void)33130 static void m68k_op_tas_8_d(void)
33131 {
33132 	uint* r_dst = &DY;
33133 
33134 	FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
33135 	FLAG_N = NFLAG_8(*r_dst);
33136 	FLAG_V = VFLAG_CLEAR;
33137 	FLAG_C = CFLAG_CLEAR;
33138 	*r_dst |= 0x80;
33139 }
33140 
33141 
m68k_op_tas_8_ai(void)33142 static void m68k_op_tas_8_ai(void)
33143 {
33144 	uint ea = EA_AY_AI_8();
33145 	uint dst = m68ki_read_8(ea);
33146 	uint allow_writeback;
33147 
33148 	FLAG_Z = dst;
33149 	FLAG_N = NFLAG_8(dst);
33150 	FLAG_V = VFLAG_CLEAR;
33151 	FLAG_C = CFLAG_CLEAR;
33152 
33153 	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
33154        disabled in order to function properly.  Some Amiga software may also rely
33155        on this, but only when accessing specific addresses so additional functionality
33156        will be needed. */
33157 	allow_writeback = m68ki_tas_callback();
33158 
33159 	if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
33160 }
33161 
33162 
m68k_op_tas_8_pi(void)33163 static void m68k_op_tas_8_pi(void)
33164 {
33165 	uint ea = EA_AY_PI_8();
33166 	uint dst = m68ki_read_8(ea);
33167 	uint allow_writeback;
33168 
33169 	FLAG_Z = dst;
33170 	FLAG_N = NFLAG_8(dst);
33171 	FLAG_V = VFLAG_CLEAR;
33172 	FLAG_C = CFLAG_CLEAR;
33173 
33174 	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
33175        disabled in order to function properly.  Some Amiga software may also rely
33176        on this, but only when accessing specific addresses so additional functionality
33177        will be needed. */
33178 	allow_writeback = m68ki_tas_callback();
33179 
33180 	if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
33181 }
33182 
33183 
m68k_op_tas_8_pi7(void)33184 static void m68k_op_tas_8_pi7(void)
33185 {
33186 	uint ea = EA_A7_PI_8();
33187 	uint dst = m68ki_read_8(ea);
33188 	uint allow_writeback;
33189 
33190 	FLAG_Z = dst;
33191 	FLAG_N = NFLAG_8(dst);
33192 	FLAG_V = VFLAG_CLEAR;
33193 	FLAG_C = CFLAG_CLEAR;
33194 
33195 	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
33196        disabled in order to function properly.  Some Amiga software may also rely
33197        on this, but only when accessing specific addresses so additional functionality
33198        will be needed. */
33199 	allow_writeback = m68ki_tas_callback();
33200 
33201 	if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
33202 }
33203 
33204 
m68k_op_tas_8_pd(void)33205 static void m68k_op_tas_8_pd(void)
33206 {
33207 	uint ea = EA_AY_PD_8();
33208 	uint dst = m68ki_read_8(ea);
33209 	uint allow_writeback;
33210 
33211 	FLAG_Z = dst;
33212 	FLAG_N = NFLAG_8(dst);
33213 	FLAG_V = VFLAG_CLEAR;
33214 	FLAG_C = CFLAG_CLEAR;
33215 
33216 	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
33217        disabled in order to function properly.  Some Amiga software may also rely
33218        on this, but only when accessing specific addresses so additional functionality
33219        will be needed. */
33220 	allow_writeback = m68ki_tas_callback();
33221 
33222 	if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
33223 }
33224 
33225 
m68k_op_tas_8_pd7(void)33226 static void m68k_op_tas_8_pd7(void)
33227 {
33228 	uint ea = EA_A7_PD_8();
33229 	uint dst = m68ki_read_8(ea);
33230 	uint allow_writeback;
33231 
33232 	FLAG_Z = dst;
33233 	FLAG_N = NFLAG_8(dst);
33234 	FLAG_V = VFLAG_CLEAR;
33235 	FLAG_C = CFLAG_CLEAR;
33236 
33237 	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
33238        disabled in order to function properly.  Some Amiga software may also rely
33239        on this, but only when accessing specific addresses so additional functionality
33240        will be needed. */
33241 	allow_writeback = m68ki_tas_callback();
33242 
33243 	if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
33244 }
33245 
33246 
m68k_op_tas_8_di(void)33247 static void m68k_op_tas_8_di(void)
33248 {
33249 	uint ea = EA_AY_DI_8();
33250 	uint dst = m68ki_read_8(ea);
33251 	uint allow_writeback;
33252 
33253 	FLAG_Z = dst;
33254 	FLAG_N = NFLAG_8(dst);
33255 	FLAG_V = VFLAG_CLEAR;
33256 	FLAG_C = CFLAG_CLEAR;
33257 
33258 	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
33259        disabled in order to function properly.  Some Amiga software may also rely
33260        on this, but only when accessing specific addresses so additional functionality
33261        will be needed. */
33262 	allow_writeback = m68ki_tas_callback();
33263 
33264 	if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
33265 }
33266 
33267 
m68k_op_tas_8_ix(void)33268 static void m68k_op_tas_8_ix(void)
33269 {
33270 	uint ea = EA_AY_IX_8();
33271 	uint dst = m68ki_read_8(ea);
33272 	uint allow_writeback;
33273 
33274 	FLAG_Z = dst;
33275 	FLAG_N = NFLAG_8(dst);
33276 	FLAG_V = VFLAG_CLEAR;
33277 	FLAG_C = CFLAG_CLEAR;
33278 
33279 	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
33280        disabled in order to function properly.  Some Amiga software may also rely
33281        on this, but only when accessing specific addresses so additional functionality
33282        will be needed. */
33283 	allow_writeback = m68ki_tas_callback();
33284 
33285 	if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
33286 }
33287 
33288 
m68k_op_tas_8_aw(void)33289 static void m68k_op_tas_8_aw(void)
33290 {
33291 	uint ea = EA_AW_8();
33292 	uint dst = m68ki_read_8(ea);
33293 	uint allow_writeback;
33294 
33295 	FLAG_Z = dst;
33296 	FLAG_N = NFLAG_8(dst);
33297 	FLAG_V = VFLAG_CLEAR;
33298 	FLAG_C = CFLAG_CLEAR;
33299 
33300 	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
33301        disabled in order to function properly.  Some Amiga software may also rely
33302        on this, but only when accessing specific addresses so additional functionality
33303        will be needed. */
33304 	allow_writeback = m68ki_tas_callback();
33305 
33306 	if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
33307 }
33308 
33309 
m68k_op_tas_8_al(void)33310 static void m68k_op_tas_8_al(void)
33311 {
33312 	uint ea = EA_AL_8();
33313 	uint dst = m68ki_read_8(ea);
33314 	uint allow_writeback;
33315 
33316 	FLAG_Z = dst;
33317 	FLAG_N = NFLAG_8(dst);
33318 	FLAG_V = VFLAG_CLEAR;
33319 	FLAG_C = CFLAG_CLEAR;
33320 
33321 	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
33322        disabled in order to function properly.  Some Amiga software may also rely
33323        on this, but only when accessing specific addresses so additional functionality
33324        will be needed. */
33325 	allow_writeback = m68ki_tas_callback();
33326 
33327 	if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
33328 }
33329 
33330 
m68k_op_trap(void)33331 static void m68k_op_trap(void)
33332 {
33333 	/* Trap#n stacks exception frame type 0 */
33334 	m68ki_exception_trapN(EXCEPTION_TRAP_BASE + (REG_IR & 0xf));	/* HJB 990403 */
33335 }
33336 
33337 
m68k_op_trapt(void)33338 static void m68k_op_trapt(void)
33339 {
33340 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33341 	{
33342 		m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33343 		return;
33344 	}
33345 	m68ki_exception_illegal();
33346 }
33347 
33348 
m68k_op_trapt_16(void)33349 static void m68k_op_trapt_16(void)
33350 {
33351 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33352 	{
33353 		m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33354 		return;
33355 	}
33356 	m68ki_exception_illegal();
33357 }
33358 
33359 
m68k_op_trapt_32(void)33360 static void m68k_op_trapt_32(void)
33361 {
33362 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33363 	{
33364 		m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33365 		return;
33366 	}
33367 	m68ki_exception_illegal();
33368 }
33369 
33370 
m68k_op_trapf(void)33371 static void m68k_op_trapf(void)
33372 {
33373 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33374 	{
33375 		return;
33376 	}
33377 	m68ki_exception_illegal();
33378 }
33379 
33380 
m68k_op_trapf_16(void)33381 static void m68k_op_trapf_16(void)
33382 {
33383 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33384 	{
33385 		REG_PC += 2;
33386 		return;
33387 	}
33388 	m68ki_exception_illegal();
33389 }
33390 
33391 
m68k_op_trapf_32(void)33392 static void m68k_op_trapf_32(void)
33393 {
33394 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33395 	{
33396 		REG_PC += 4;
33397 		return;
33398 	}
33399 	m68ki_exception_illegal();
33400 }
33401 
33402 
m68k_op_traphi(void)33403 static void m68k_op_traphi(void)
33404 {
33405 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33406 	{
33407 		if(COND_HI())
33408 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33409 		return;
33410 	}
33411 	m68ki_exception_illegal();
33412 }
33413 
33414 
m68k_op_trapls(void)33415 static void m68k_op_trapls(void)
33416 {
33417 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33418 	{
33419 		if(COND_LS())
33420 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33421 		return;
33422 	}
33423 	m68ki_exception_illegal();
33424 }
33425 
33426 
m68k_op_trapcc(void)33427 static void m68k_op_trapcc(void)
33428 {
33429 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33430 	{
33431 		if(COND_CC())
33432 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33433 		return;
33434 	}
33435 	m68ki_exception_illegal();
33436 }
33437 
33438 
m68k_op_trapcs(void)33439 static void m68k_op_trapcs(void)
33440 {
33441 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33442 	{
33443 		if(COND_CS())
33444 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33445 		return;
33446 	}
33447 	m68ki_exception_illegal();
33448 }
33449 
33450 
m68k_op_trapne(void)33451 static void m68k_op_trapne(void)
33452 {
33453 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33454 	{
33455 		if(COND_NE())
33456 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33457 		return;
33458 	}
33459 	m68ki_exception_illegal();
33460 }
33461 
33462 
m68k_op_trapeq(void)33463 static void m68k_op_trapeq(void)
33464 {
33465 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33466 	{
33467 		if(COND_EQ())
33468 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33469 		return;
33470 	}
33471 	m68ki_exception_illegal();
33472 }
33473 
33474 
m68k_op_trapvc(void)33475 static void m68k_op_trapvc(void)
33476 {
33477 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33478 	{
33479 		if(COND_VC())
33480 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33481 		return;
33482 	}
33483 	m68ki_exception_illegal();
33484 }
33485 
33486 
m68k_op_trapvs(void)33487 static void m68k_op_trapvs(void)
33488 {
33489 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33490 	{
33491 		if(COND_VS())
33492 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33493 		return;
33494 	}
33495 	m68ki_exception_illegal();
33496 }
33497 
33498 
m68k_op_trappl(void)33499 static void m68k_op_trappl(void)
33500 {
33501 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33502 	{
33503 		if(COND_PL())
33504 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33505 		return;
33506 	}
33507 	m68ki_exception_illegal();
33508 }
33509 
33510 
m68k_op_trapmi(void)33511 static void m68k_op_trapmi(void)
33512 {
33513 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33514 	{
33515 		if(COND_MI())
33516 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33517 		return;
33518 	}
33519 	m68ki_exception_illegal();
33520 }
33521 
33522 
m68k_op_trapge(void)33523 static void m68k_op_trapge(void)
33524 {
33525 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33526 	{
33527 		if(COND_GE())
33528 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33529 		return;
33530 	}
33531 	m68ki_exception_illegal();
33532 }
33533 
33534 
m68k_op_traplt(void)33535 static void m68k_op_traplt(void)
33536 {
33537 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33538 	{
33539 		if(COND_LT())
33540 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33541 		return;
33542 	}
33543 	m68ki_exception_illegal();
33544 }
33545 
33546 
m68k_op_trapgt(void)33547 static void m68k_op_trapgt(void)
33548 {
33549 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33550 	{
33551 		if(COND_GT())
33552 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33553 		return;
33554 	}
33555 	m68ki_exception_illegal();
33556 }
33557 
33558 
m68k_op_traple(void)33559 static void m68k_op_traple(void)
33560 {
33561 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33562 	{
33563 		if(COND_LE())
33564 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33565 		return;
33566 	}
33567 	m68ki_exception_illegal();
33568 }
33569 
33570 
m68k_op_traphi_16(void)33571 static void m68k_op_traphi_16(void)
33572 {
33573 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33574 	{
33575 		if(COND_HI())
33576 		{
33577 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33578 			return;
33579 		}
33580 		REG_PC += 2;
33581 		return;
33582 	}
33583 	m68ki_exception_illegal();
33584 }
33585 
33586 
m68k_op_trapls_16(void)33587 static void m68k_op_trapls_16(void)
33588 {
33589 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33590 	{
33591 		if(COND_LS())
33592 		{
33593 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33594 			return;
33595 		}
33596 		REG_PC += 2;
33597 		return;
33598 	}
33599 	m68ki_exception_illegal();
33600 }
33601 
33602 
m68k_op_trapcc_16(void)33603 static void m68k_op_trapcc_16(void)
33604 {
33605 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33606 	{
33607 		if(COND_CC())
33608 		{
33609 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33610 			return;
33611 		}
33612 		REG_PC += 2;
33613 		return;
33614 	}
33615 	m68ki_exception_illegal();
33616 }
33617 
33618 
m68k_op_trapcs_16(void)33619 static void m68k_op_trapcs_16(void)
33620 {
33621 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33622 	{
33623 		if(COND_CS())
33624 		{
33625 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33626 			return;
33627 		}
33628 		REG_PC += 2;
33629 		return;
33630 	}
33631 	m68ki_exception_illegal();
33632 }
33633 
33634 
m68k_op_trapne_16(void)33635 static void m68k_op_trapne_16(void)
33636 {
33637 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33638 	{
33639 		if(COND_NE())
33640 		{
33641 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33642 			return;
33643 		}
33644 		REG_PC += 2;
33645 		return;
33646 	}
33647 	m68ki_exception_illegal();
33648 }
33649 
33650 
m68k_op_trapeq_16(void)33651 static void m68k_op_trapeq_16(void)
33652 {
33653 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33654 	{
33655 		if(COND_EQ())
33656 		{
33657 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33658 			return;
33659 		}
33660 		REG_PC += 2;
33661 		return;
33662 	}
33663 	m68ki_exception_illegal();
33664 }
33665 
33666 
m68k_op_trapvc_16(void)33667 static void m68k_op_trapvc_16(void)
33668 {
33669 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33670 	{
33671 		if(COND_VC())
33672 		{
33673 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33674 			return;
33675 		}
33676 		REG_PC += 2;
33677 		return;
33678 	}
33679 	m68ki_exception_illegal();
33680 }
33681 
33682 
m68k_op_trapvs_16(void)33683 static void m68k_op_trapvs_16(void)
33684 {
33685 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33686 	{
33687 		if(COND_VS())
33688 		{
33689 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33690 			return;
33691 		}
33692 		REG_PC += 2;
33693 		return;
33694 	}
33695 	m68ki_exception_illegal();
33696 }
33697 
33698 
m68k_op_trappl_16(void)33699 static void m68k_op_trappl_16(void)
33700 {
33701 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33702 	{
33703 		if(COND_PL())
33704 		{
33705 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33706 			return;
33707 		}
33708 		REG_PC += 2;
33709 		return;
33710 	}
33711 	m68ki_exception_illegal();
33712 }
33713 
33714 
m68k_op_trapmi_16(void)33715 static void m68k_op_trapmi_16(void)
33716 {
33717 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33718 	{
33719 		if(COND_MI())
33720 		{
33721 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33722 			return;
33723 		}
33724 		REG_PC += 2;
33725 		return;
33726 	}
33727 	m68ki_exception_illegal();
33728 }
33729 
33730 
m68k_op_trapge_16(void)33731 static void m68k_op_trapge_16(void)
33732 {
33733 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33734 	{
33735 		if(COND_GE())
33736 		{
33737 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33738 			return;
33739 		}
33740 		REG_PC += 2;
33741 		return;
33742 	}
33743 	m68ki_exception_illegal();
33744 }
33745 
33746 
m68k_op_traplt_16(void)33747 static void m68k_op_traplt_16(void)
33748 {
33749 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33750 	{
33751 		if(COND_LT())
33752 		{
33753 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33754 			return;
33755 		}
33756 		REG_PC += 2;
33757 		return;
33758 	}
33759 	m68ki_exception_illegal();
33760 }
33761 
33762 
m68k_op_trapgt_16(void)33763 static void m68k_op_trapgt_16(void)
33764 {
33765 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33766 	{
33767 		if(COND_GT())
33768 		{
33769 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33770 			return;
33771 		}
33772 		REG_PC += 2;
33773 		return;
33774 	}
33775 	m68ki_exception_illegal();
33776 }
33777 
33778 
m68k_op_traple_16(void)33779 static void m68k_op_traple_16(void)
33780 {
33781 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33782 	{
33783 		if(COND_LE())
33784 		{
33785 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33786 			return;
33787 		}
33788 		REG_PC += 2;
33789 		return;
33790 	}
33791 	m68ki_exception_illegal();
33792 }
33793 
33794 
m68k_op_traphi_32(void)33795 static void m68k_op_traphi_32(void)
33796 {
33797 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33798 	{
33799 		if(COND_HI())
33800 		{
33801 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33802 			return;
33803 		}
33804 		REG_PC += 4;
33805 		return;
33806 	}
33807 	m68ki_exception_illegal();
33808 }
33809 
33810 
m68k_op_trapls_32(void)33811 static void m68k_op_trapls_32(void)
33812 {
33813 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33814 	{
33815 		if(COND_LS())
33816 		{
33817 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33818 			return;
33819 		}
33820 		REG_PC += 4;
33821 		return;
33822 	}
33823 	m68ki_exception_illegal();
33824 }
33825 
33826 
m68k_op_trapcc_32(void)33827 static void m68k_op_trapcc_32(void)
33828 {
33829 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33830 	{
33831 		if(COND_CC())
33832 		{
33833 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33834 			return;
33835 		}
33836 		REG_PC += 4;
33837 		return;
33838 	}
33839 	m68ki_exception_illegal();
33840 }
33841 
33842 
m68k_op_trapcs_32(void)33843 static void m68k_op_trapcs_32(void)
33844 {
33845 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33846 	{
33847 		if(COND_CS())
33848 		{
33849 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33850 			return;
33851 		}
33852 		REG_PC += 4;
33853 		return;
33854 	}
33855 	m68ki_exception_illegal();
33856 }
33857 
33858 
m68k_op_trapne_32(void)33859 static void m68k_op_trapne_32(void)
33860 {
33861 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33862 	{
33863 		if(COND_NE())
33864 		{
33865 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33866 			return;
33867 		}
33868 		REG_PC += 4;
33869 		return;
33870 	}
33871 	m68ki_exception_illegal();
33872 }
33873 
33874 
m68k_op_trapeq_32(void)33875 static void m68k_op_trapeq_32(void)
33876 {
33877 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33878 	{
33879 		if(COND_EQ())
33880 		{
33881 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33882 			return;
33883 		}
33884 		REG_PC += 4;
33885 		return;
33886 	}
33887 	m68ki_exception_illegal();
33888 }
33889 
33890 
m68k_op_trapvc_32(void)33891 static void m68k_op_trapvc_32(void)
33892 {
33893 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33894 	{
33895 		if(COND_VC())
33896 		{
33897 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33898 			return;
33899 		}
33900 		REG_PC += 4;
33901 		return;
33902 	}
33903 	m68ki_exception_illegal();
33904 }
33905 
33906 
m68k_op_trapvs_32(void)33907 static void m68k_op_trapvs_32(void)
33908 {
33909 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33910 	{
33911 		if(COND_VS())
33912 		{
33913 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33914 			return;
33915 		}
33916 		REG_PC += 4;
33917 		return;
33918 	}
33919 	m68ki_exception_illegal();
33920 }
33921 
33922 
m68k_op_trappl_32(void)33923 static void m68k_op_trappl_32(void)
33924 {
33925 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33926 	{
33927 		if(COND_PL())
33928 		{
33929 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33930 			return;
33931 		}
33932 		REG_PC += 4;
33933 		return;
33934 	}
33935 	m68ki_exception_illegal();
33936 }
33937 
33938 
m68k_op_trapmi_32(void)33939 static void m68k_op_trapmi_32(void)
33940 {
33941 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33942 	{
33943 		if(COND_MI())
33944 		{
33945 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33946 			return;
33947 		}
33948 		REG_PC += 4;
33949 		return;
33950 	}
33951 	m68ki_exception_illegal();
33952 }
33953 
33954 
m68k_op_trapge_32(void)33955 static void m68k_op_trapge_32(void)
33956 {
33957 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33958 	{
33959 		if(COND_GE())
33960 		{
33961 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33962 			return;
33963 		}
33964 		REG_PC += 4;
33965 		return;
33966 	}
33967 	m68ki_exception_illegal();
33968 }
33969 
33970 
m68k_op_traplt_32(void)33971 static void m68k_op_traplt_32(void)
33972 {
33973 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33974 	{
33975 		if(COND_LT())
33976 		{
33977 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33978 			return;
33979 		}
33980 		REG_PC += 4;
33981 		return;
33982 	}
33983 	m68ki_exception_illegal();
33984 }
33985 
33986 
m68k_op_trapgt_32(void)33987 static void m68k_op_trapgt_32(void)
33988 {
33989 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
33990 	{
33991 		if(COND_GT())
33992 		{
33993 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
33994 			return;
33995 		}
33996 		REG_PC += 4;
33997 		return;
33998 	}
33999 	m68ki_exception_illegal();
34000 }
34001 
34002 
m68k_op_traple_32(void)34003 static void m68k_op_traple_32(void)
34004 {
34005 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34006 	{
34007 		if(COND_LE())
34008 		{
34009 			m68ki_exception_trap(EXCEPTION_TRAPV);	/* HJB 990403 */
34010 			return;
34011 		}
34012 		REG_PC += 4;
34013 		return;
34014 	}
34015 	m68ki_exception_illegal();
34016 }
34017 
34018 
m68k_op_trapv(void)34019 static void m68k_op_trapv(void)
34020 {
34021 	if(COND_VC())
34022 	{
34023 		return;
34024 	}
34025 	m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
34026 }
34027 
34028 
m68k_op_tst_8_d(void)34029 static void m68k_op_tst_8_d(void)
34030 {
34031 	uint res = MASK_OUT_ABOVE_8(DY);
34032 
34033 	FLAG_N = NFLAG_8(res);
34034 	FLAG_Z = res;
34035 	FLAG_V = VFLAG_CLEAR;
34036 	FLAG_C = CFLAG_CLEAR;
34037 }
34038 
34039 
m68k_op_tst_8_ai(void)34040 static void m68k_op_tst_8_ai(void)
34041 {
34042 	uint res = OPER_AY_AI_8();
34043 
34044 	FLAG_N = NFLAG_8(res);
34045 	FLAG_Z = res;
34046 	FLAG_V = VFLAG_CLEAR;
34047 	FLAG_C = CFLAG_CLEAR;
34048 }
34049 
34050 
m68k_op_tst_8_pi(void)34051 static void m68k_op_tst_8_pi(void)
34052 {
34053 	uint res = OPER_AY_PI_8();
34054 
34055 	FLAG_N = NFLAG_8(res);
34056 	FLAG_Z = res;
34057 	FLAG_V = VFLAG_CLEAR;
34058 	FLAG_C = CFLAG_CLEAR;
34059 }
34060 
34061 
m68k_op_tst_8_pi7(void)34062 static void m68k_op_tst_8_pi7(void)
34063 {
34064 	uint res = OPER_A7_PI_8();
34065 
34066 	FLAG_N = NFLAG_8(res);
34067 	FLAG_Z = res;
34068 	FLAG_V = VFLAG_CLEAR;
34069 	FLAG_C = CFLAG_CLEAR;
34070 }
34071 
34072 
m68k_op_tst_8_pd(void)34073 static void m68k_op_tst_8_pd(void)
34074 {
34075 	uint res = OPER_AY_PD_8();
34076 
34077 	FLAG_N = NFLAG_8(res);
34078 	FLAG_Z = res;
34079 	FLAG_V = VFLAG_CLEAR;
34080 	FLAG_C = CFLAG_CLEAR;
34081 }
34082 
34083 
m68k_op_tst_8_pd7(void)34084 static void m68k_op_tst_8_pd7(void)
34085 {
34086 	uint res = OPER_A7_PD_8();
34087 
34088 	FLAG_N = NFLAG_8(res);
34089 	FLAG_Z = res;
34090 	FLAG_V = VFLAG_CLEAR;
34091 	FLAG_C = CFLAG_CLEAR;
34092 }
34093 
34094 
m68k_op_tst_8_di(void)34095 static void m68k_op_tst_8_di(void)
34096 {
34097 	uint res = OPER_AY_DI_8();
34098 
34099 	FLAG_N = NFLAG_8(res);
34100 	FLAG_Z = res;
34101 	FLAG_V = VFLAG_CLEAR;
34102 	FLAG_C = CFLAG_CLEAR;
34103 }
34104 
34105 
m68k_op_tst_8_ix(void)34106 static void m68k_op_tst_8_ix(void)
34107 {
34108 	uint res = OPER_AY_IX_8();
34109 
34110 	FLAG_N = NFLAG_8(res);
34111 	FLAG_Z = res;
34112 	FLAG_V = VFLAG_CLEAR;
34113 	FLAG_C = CFLAG_CLEAR;
34114 }
34115 
34116 
m68k_op_tst_8_aw(void)34117 static void m68k_op_tst_8_aw(void)
34118 {
34119 	uint res = OPER_AW_8();
34120 
34121 	FLAG_N = NFLAG_8(res);
34122 	FLAG_Z = res;
34123 	FLAG_V = VFLAG_CLEAR;
34124 	FLAG_C = CFLAG_CLEAR;
34125 }
34126 
34127 
m68k_op_tst_8_al(void)34128 static void m68k_op_tst_8_al(void)
34129 {
34130 	uint res = OPER_AL_8();
34131 
34132 	FLAG_N = NFLAG_8(res);
34133 	FLAG_Z = res;
34134 	FLAG_V = VFLAG_CLEAR;
34135 	FLAG_C = CFLAG_CLEAR;
34136 }
34137 
34138 
m68k_op_tst_8_pcdi(void)34139 static void m68k_op_tst_8_pcdi(void)
34140 {
34141 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34142 	{
34143 		uint res = OPER_PCDI_8();
34144 
34145 		FLAG_N = NFLAG_8(res);
34146 		FLAG_Z = res;
34147 		FLAG_V = VFLAG_CLEAR;
34148 		FLAG_C = CFLAG_CLEAR;
34149 		return;
34150 	}
34151 	m68ki_exception_illegal();
34152 }
34153 
34154 
m68k_op_tst_8_pcix(void)34155 static void m68k_op_tst_8_pcix(void)
34156 {
34157 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34158 	{
34159 		uint res = OPER_PCIX_8();
34160 
34161 		FLAG_N = NFLAG_8(res);
34162 		FLAG_Z = res;
34163 		FLAG_V = VFLAG_CLEAR;
34164 		FLAG_C = CFLAG_CLEAR;
34165 		return;
34166 	}
34167 	m68ki_exception_illegal();
34168 }
34169 
34170 
m68k_op_tst_8_i(void)34171 static void m68k_op_tst_8_i(void)
34172 {
34173 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34174 	{
34175 		uint res = OPER_I_8();
34176 
34177 		FLAG_N = NFLAG_8(res);
34178 		FLAG_Z = res;
34179 		FLAG_V = VFLAG_CLEAR;
34180 		FLAG_C = CFLAG_CLEAR;
34181 		return;
34182 	}
34183 	m68ki_exception_illegal();
34184 }
34185 
34186 
m68k_op_tst_16_d(void)34187 static void m68k_op_tst_16_d(void)
34188 {
34189 	uint res = MASK_OUT_ABOVE_16(DY);
34190 
34191 	FLAG_N = NFLAG_16(res);
34192 	FLAG_Z = res;
34193 	FLAG_V = VFLAG_CLEAR;
34194 	FLAG_C = CFLAG_CLEAR;
34195 }
34196 
34197 
m68k_op_tst_16_a(void)34198 static void m68k_op_tst_16_a(void)
34199 {
34200 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34201 	{
34202 		uint res = MAKE_INT_16(AY);
34203 
34204 		FLAG_N = NFLAG_16(res);
34205 		FLAG_Z = res;
34206 		FLAG_V = VFLAG_CLEAR;
34207 		FLAG_C = CFLAG_CLEAR;
34208 		return;
34209 	}
34210 	m68ki_exception_illegal();
34211 }
34212 
34213 
m68k_op_tst_16_ai(void)34214 static void m68k_op_tst_16_ai(void)
34215 {
34216 	uint res = OPER_AY_AI_16();
34217 
34218 	FLAG_N = NFLAG_16(res);
34219 	FLAG_Z = res;
34220 	FLAG_V = VFLAG_CLEAR;
34221 	FLAG_C = CFLAG_CLEAR;
34222 }
34223 
34224 
m68k_op_tst_16_pi(void)34225 static void m68k_op_tst_16_pi(void)
34226 {
34227 	uint res = OPER_AY_PI_16();
34228 
34229 	FLAG_N = NFLAG_16(res);
34230 	FLAG_Z = res;
34231 	FLAG_V = VFLAG_CLEAR;
34232 	FLAG_C = CFLAG_CLEAR;
34233 }
34234 
34235 
m68k_op_tst_16_pd(void)34236 static void m68k_op_tst_16_pd(void)
34237 {
34238 	uint res = OPER_AY_PD_16();
34239 
34240 	FLAG_N = NFLAG_16(res);
34241 	FLAG_Z = res;
34242 	FLAG_V = VFLAG_CLEAR;
34243 	FLAG_C = CFLAG_CLEAR;
34244 }
34245 
34246 
m68k_op_tst_16_di(void)34247 static void m68k_op_tst_16_di(void)
34248 {
34249 	uint res = OPER_AY_DI_16();
34250 
34251 	FLAG_N = NFLAG_16(res);
34252 	FLAG_Z = res;
34253 	FLAG_V = VFLAG_CLEAR;
34254 	FLAG_C = CFLAG_CLEAR;
34255 }
34256 
34257 
m68k_op_tst_16_ix(void)34258 static void m68k_op_tst_16_ix(void)
34259 {
34260 	uint res = OPER_AY_IX_16();
34261 
34262 	FLAG_N = NFLAG_16(res);
34263 	FLAG_Z = res;
34264 	FLAG_V = VFLAG_CLEAR;
34265 	FLAG_C = CFLAG_CLEAR;
34266 }
34267 
34268 
m68k_op_tst_16_aw(void)34269 static void m68k_op_tst_16_aw(void)
34270 {
34271 	uint res = OPER_AW_16();
34272 
34273 	FLAG_N = NFLAG_16(res);
34274 	FLAG_Z = res;
34275 	FLAG_V = VFLAG_CLEAR;
34276 	FLAG_C = CFLAG_CLEAR;
34277 }
34278 
34279 
m68k_op_tst_16_al(void)34280 static void m68k_op_tst_16_al(void)
34281 {
34282 	uint res = OPER_AL_16();
34283 
34284 	FLAG_N = NFLAG_16(res);
34285 	FLAG_Z = res;
34286 	FLAG_V = VFLAG_CLEAR;
34287 	FLAG_C = CFLAG_CLEAR;
34288 }
34289 
34290 
m68k_op_tst_16_pcdi(void)34291 static void m68k_op_tst_16_pcdi(void)
34292 {
34293 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34294 	{
34295 		uint res = OPER_PCDI_16();
34296 
34297 		FLAG_N = NFLAG_16(res);
34298 		FLAG_Z = res;
34299 		FLAG_V = VFLAG_CLEAR;
34300 		FLAG_C = CFLAG_CLEAR;
34301 		return;
34302 	}
34303 	m68ki_exception_illegal();
34304 }
34305 
34306 
m68k_op_tst_16_pcix(void)34307 static void m68k_op_tst_16_pcix(void)
34308 {
34309 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34310 	{
34311 		uint res = OPER_PCIX_16();
34312 
34313 		FLAG_N = NFLAG_16(res);
34314 		FLAG_Z = res;
34315 		FLAG_V = VFLAG_CLEAR;
34316 		FLAG_C = CFLAG_CLEAR;
34317 		return;
34318 	}
34319 	m68ki_exception_illegal();
34320 }
34321 
34322 
m68k_op_tst_16_i(void)34323 static void m68k_op_tst_16_i(void)
34324 {
34325 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34326 	{
34327 		uint res = OPER_I_16();
34328 
34329 		FLAG_N = NFLAG_16(res);
34330 		FLAG_Z = res;
34331 		FLAG_V = VFLAG_CLEAR;
34332 		FLAG_C = CFLAG_CLEAR;
34333 		return;
34334 	}
34335 	m68ki_exception_illegal();
34336 }
34337 
34338 
m68k_op_tst_32_d(void)34339 static void m68k_op_tst_32_d(void)
34340 {
34341 	uint res = DY;
34342 
34343 	FLAG_N = NFLAG_32(res);
34344 	FLAG_Z = res;
34345 	FLAG_V = VFLAG_CLEAR;
34346 	FLAG_C = CFLAG_CLEAR;
34347 }
34348 
34349 
m68k_op_tst_32_a(void)34350 static void m68k_op_tst_32_a(void)
34351 {
34352 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34353 	{
34354 		uint res = AY;
34355 
34356 		FLAG_N = NFLAG_32(res);
34357 		FLAG_Z = res;
34358 		FLAG_V = VFLAG_CLEAR;
34359 		FLAG_C = CFLAG_CLEAR;
34360 		return;
34361 	}
34362 	m68ki_exception_illegal();
34363 }
34364 
34365 
m68k_op_tst_32_ai(void)34366 static void m68k_op_tst_32_ai(void)
34367 {
34368 	uint res = OPER_AY_AI_32();
34369 
34370 	FLAG_N = NFLAG_32(res);
34371 	FLAG_Z = res;
34372 	FLAG_V = VFLAG_CLEAR;
34373 	FLAG_C = CFLAG_CLEAR;
34374 }
34375 
34376 
m68k_op_tst_32_pi(void)34377 static void m68k_op_tst_32_pi(void)
34378 {
34379 	uint res = OPER_AY_PI_32();
34380 
34381 	FLAG_N = NFLAG_32(res);
34382 	FLAG_Z = res;
34383 	FLAG_V = VFLAG_CLEAR;
34384 	FLAG_C = CFLAG_CLEAR;
34385 }
34386 
34387 
m68k_op_tst_32_pd(void)34388 static void m68k_op_tst_32_pd(void)
34389 {
34390 	uint res = OPER_AY_PD_32();
34391 
34392 	FLAG_N = NFLAG_32(res);
34393 	FLAG_Z = res;
34394 	FLAG_V = VFLAG_CLEAR;
34395 	FLAG_C = CFLAG_CLEAR;
34396 }
34397 
34398 
m68k_op_tst_32_di(void)34399 static void m68k_op_tst_32_di(void)
34400 {
34401 	uint res = OPER_AY_DI_32();
34402 
34403 	FLAG_N = NFLAG_32(res);
34404 	FLAG_Z = res;
34405 	FLAG_V = VFLAG_CLEAR;
34406 	FLAG_C = CFLAG_CLEAR;
34407 }
34408 
34409 
m68k_op_tst_32_ix(void)34410 static void m68k_op_tst_32_ix(void)
34411 {
34412 	uint res = OPER_AY_IX_32();
34413 
34414 	FLAG_N = NFLAG_32(res);
34415 	FLAG_Z = res;
34416 	FLAG_V = VFLAG_CLEAR;
34417 	FLAG_C = CFLAG_CLEAR;
34418 }
34419 
34420 
m68k_op_tst_32_aw(void)34421 static void m68k_op_tst_32_aw(void)
34422 {
34423 	uint res = OPER_AW_32();
34424 
34425 	FLAG_N = NFLAG_32(res);
34426 	FLAG_Z = res;
34427 	FLAG_V = VFLAG_CLEAR;
34428 	FLAG_C = CFLAG_CLEAR;
34429 }
34430 
34431 
m68k_op_tst_32_al(void)34432 static void m68k_op_tst_32_al(void)
34433 {
34434 	uint res = OPER_AL_32();
34435 
34436 	FLAG_N = NFLAG_32(res);
34437 	FLAG_Z = res;
34438 	FLAG_V = VFLAG_CLEAR;
34439 	FLAG_C = CFLAG_CLEAR;
34440 }
34441 
34442 
m68k_op_tst_32_pcdi(void)34443 static void m68k_op_tst_32_pcdi(void)
34444 {
34445 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34446 	{
34447 		uint res = OPER_PCDI_32();
34448 
34449 		FLAG_N = NFLAG_32(res);
34450 		FLAG_Z = res;
34451 		FLAG_V = VFLAG_CLEAR;
34452 		FLAG_C = CFLAG_CLEAR;
34453 		return;
34454 	}
34455 	m68ki_exception_illegal();
34456 }
34457 
34458 
m68k_op_tst_32_pcix(void)34459 static void m68k_op_tst_32_pcix(void)
34460 {
34461 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34462 	{
34463 		uint res = OPER_PCIX_32();
34464 
34465 		FLAG_N = NFLAG_32(res);
34466 		FLAG_Z = res;
34467 		FLAG_V = VFLAG_CLEAR;
34468 		FLAG_C = CFLAG_CLEAR;
34469 		return;
34470 	}
34471 	m68ki_exception_illegal();
34472 }
34473 
34474 
m68k_op_tst_32_i(void)34475 static void m68k_op_tst_32_i(void)
34476 {
34477 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34478 	{
34479 		uint res = OPER_I_32();
34480 
34481 		FLAG_N = NFLAG_32(res);
34482 		FLAG_Z = res;
34483 		FLAG_V = VFLAG_CLEAR;
34484 		FLAG_C = CFLAG_CLEAR;
34485 		return;
34486 	}
34487 	m68ki_exception_illegal();
34488 }
34489 
34490 
m68k_op_unlk_32_a7(void)34491 static void m68k_op_unlk_32_a7(void)
34492 {
34493 	REG_A[7] = m68ki_read_32(REG_A[7]);
34494 }
34495 
34496 
m68k_op_unlk_32(void)34497 static void m68k_op_unlk_32(void)
34498 {
34499 	uint* r_dst = &AY;
34500 
34501 	REG_A[7] = *r_dst;
34502 	*r_dst = m68ki_pull_32();
34503 }
34504 
34505 
m68k_op_unpk_16_rr(void)34506 static void m68k_op_unpk_16_rr(void)
34507 {
34508 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34509 	{
34510 		/* Note: DX and DY are reversed in Motorola's docs */
34511 		uint src = DY;
34512 		uint* r_dst = &DX;
34513 
34514 		*r_dst = MASK_OUT_BELOW_16(*r_dst) | (((((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16()) & 0xffff);
34515 		return;
34516 	}
34517 	m68ki_exception_illegal();
34518 }
34519 
34520 
m68k_op_unpk_16_mm_ax7(void)34521 static void m68k_op_unpk_16_mm_ax7(void)
34522 {
34523 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34524 	{
34525 		/* Note: AX and AY are reversed in Motorola's docs */
34526 		uint src = OPER_AY_PD_8();
34527 		uint ea_dst;
34528 
34529 		src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
34530 		ea_dst = EA_A7_PD_8();
34531 		m68ki_write_8(ea_dst, src & 0xff);
34532 		ea_dst = EA_A7_PD_8();
34533 		m68ki_write_8(ea_dst, (src >> 8) & 0xff);
34534 		return;
34535 	}
34536 	m68ki_exception_illegal();
34537 }
34538 
34539 
m68k_op_unpk_16_mm_ay7(void)34540 static void m68k_op_unpk_16_mm_ay7(void)
34541 {
34542 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34543 	{
34544 		/* Note: AX and AY are reversed in Motorola's docs */
34545 		uint src = OPER_A7_PD_8();
34546 		uint ea_dst;
34547 
34548 		src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
34549 		ea_dst = EA_AX_PD_8();
34550 		m68ki_write_8(ea_dst, src & 0xff);
34551 		ea_dst = EA_AX_PD_8();
34552 		m68ki_write_8(ea_dst, (src >> 8) & 0xff);
34553 		return;
34554 	}
34555 	m68ki_exception_illegal();
34556 }
34557 
34558 
m68k_op_unpk_16_mm_axy7(void)34559 static void m68k_op_unpk_16_mm_axy7(void)
34560 {
34561 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34562 	{
34563 		uint src = OPER_A7_PD_8();
34564 		uint ea_dst;
34565 
34566 		src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
34567 		ea_dst = EA_A7_PD_8();
34568 		m68ki_write_8(ea_dst, src & 0xff);
34569 		ea_dst = EA_A7_PD_8();
34570 		m68ki_write_8(ea_dst, (src >> 8) & 0xff);
34571 		return;
34572 	}
34573 	m68ki_exception_illegal();
34574 }
34575 
34576 
m68k_op_unpk_16_mm(void)34577 static void m68k_op_unpk_16_mm(void)
34578 {
34579 	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
34580 	{
34581 		/* Note: AX and AY are reversed in Motorola's docs */
34582 		uint src = OPER_AY_PD_8();
34583 		uint ea_dst;
34584 
34585 		src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
34586 		ea_dst = EA_AX_PD_8();
34587 		m68ki_write_8(ea_dst, src & 0xff);
34588 		ea_dst = EA_AX_PD_8();
34589 		m68ki_write_8(ea_dst, (src >> 8) & 0xff);
34590 		return;
34591 	}
34592 	m68ki_exception_illegal();
34593 }
34594 
34595 
34596 /* ======================================================================== */
34597 /* ============================== END OF FILE ============================= */
34598 /* ======================================================================== */
34599 
34600 
34601 /* ======================================================================== */
34602 /* ========================= OPCODE TABLE BUILDER ========================= */
34603 /* ======================================================================== */
34604 
34605 #include "m68kops.h"
34606 
34607 #define NUM_CPU_TYPES 4
34608 
34609 void  (*m68ki_instruction_jump_table[0x10000])(void); /* opcode handler jump table */
34610 unsigned char m68ki_cycles[NUM_CPU_TYPES][0x10000]; /* Cycles used by CPU type */
34611 
34612 /* This is used to generate the opcode handler jump table */
34613 typedef struct
34614 {
34615 	void (*opcode_handler)(void);        /* handler function */
34616 	unsigned int  mask;                  /* mask on opcode */
34617 	unsigned int  match;                 /* what to match after masking */
34618 	unsigned char cycles[NUM_CPU_TYPES]; /* cycles each cpu type takes */
34619 } opcode_handler_struct;
34620 
34621 
34622 /* Opcode handler table */
34623 static const opcode_handler_struct m68k_opcode_handler_table[] =
34624 {
34625 /*   function                      mask    match    000  010  020  040 */
34626 
34627 
34628 	{m68k_op_1010                , 0xf000, 0xa000, {  4,   4,   4,   4}},
34629 	{m68k_op_1111                , 0xf000, 0xf000, {  4,   4,   4,   4}},
34630 	{m68k_op_moveq_32            , 0xf100, 0x7000, {  4,   4,   2,   2}},
34631 	{m68k_op_cpbcc_32            , 0xf180, 0xf080, {  0,   0,   4,   0}},
34632 	{m68k_op_cpgen_32            , 0xf1c0, 0xf000, {  0,   0,   4,   0}},
34633 	{m68k_op_cpscc_32            , 0xf1c0, 0xf040, {  0,   0,   4,   0}},
34634 	{m68k_op_bra_8               , 0xff00, 0x6000, { 10,  10,  10,  10}},
34635 	{m68k_op_bsr_8               , 0xff00, 0x6100, { 18,  18,   7,   7}},
34636 	{m68k_op_bhi_8               , 0xff00, 0x6200, { 10,  10,   6,   6}},
34637 	{m68k_op_bls_8               , 0xff00, 0x6300, { 10,  10,   6,   6}},
34638 	{m68k_op_bcc_8               , 0xff00, 0x6400, { 10,  10,   6,   6}},
34639 	{m68k_op_bcs_8               , 0xff00, 0x6500, { 10,  10,   6,   6}},
34640 	{m68k_op_bne_8               , 0xff00, 0x6600, { 10,  10,   6,   6}},
34641 	{m68k_op_beq_8               , 0xff00, 0x6700, { 10,  10,   6,   6}},
34642 	{m68k_op_bvc_8               , 0xff00, 0x6800, { 10,  10,   6,   6}},
34643 	{m68k_op_bvs_8               , 0xff00, 0x6900, { 10,  10,   6,   6}},
34644 	{m68k_op_bpl_8               , 0xff00, 0x6a00, { 10,  10,   6,   6}},
34645 	{m68k_op_bmi_8               , 0xff00, 0x6b00, { 10,  10,   6,   6}},
34646 	{m68k_op_bge_8               , 0xff00, 0x6c00, { 10,  10,   6,   6}},
34647 	{m68k_op_blt_8               , 0xff00, 0x6d00, { 10,  10,   6,   6}},
34648 	{m68k_op_bgt_8               , 0xff00, 0x6e00, { 10,  10,   6,   6}},
34649 	{m68k_op_ble_8               , 0xff00, 0x6f00, { 10,  10,   6,   6}},
34650 	{m68k_op_040fpu0_32          , 0xff00, 0xf200, {  0,   0,   0,   0}},
34651 	{m68k_op_040fpu1_32          , 0xff00, 0xf300, {  0,   0,   0,   0}},
34652 	{m68k_op_btst_32_r_d         , 0xf1f8, 0x0100, {  6,   6,   4,   4}},
34653 	{m68k_op_movep_16_er         , 0xf1f8, 0x0108, { 16,  16,  12,  12}},
34654 	{m68k_op_btst_8_r_ai         , 0xf1f8, 0x0110, {  8,   8,   8,   8}},
34655 	{m68k_op_btst_8_r_pi         , 0xf1f8, 0x0118, {  8,   8,   8,   8}},
34656 	{m68k_op_btst_8_r_pd         , 0xf1f8, 0x0120, { 10,  10,   9,   9}},
34657 	{m68k_op_btst_8_r_di         , 0xf1f8, 0x0128, { 12,  12,   9,   9}},
34658 	{m68k_op_btst_8_r_ix         , 0xf1f8, 0x0130, { 14,  14,  11,  11}},
34659 	{m68k_op_bchg_32_r_d         , 0xf1f8, 0x0140, {  8,   8,   4,   4}},
34660 	{m68k_op_movep_32_er         , 0xf1f8, 0x0148, { 24,  24,  18,  18}},
34661 	{m68k_op_bchg_8_r_ai         , 0xf1f8, 0x0150, { 12,  12,   8,   8}},
34662 	{m68k_op_bchg_8_r_pi         , 0xf1f8, 0x0158, { 12,  12,   8,   8}},
34663 	{m68k_op_bchg_8_r_pd         , 0xf1f8, 0x0160, { 14,  14,   9,   9}},
34664 	{m68k_op_bchg_8_r_di         , 0xf1f8, 0x0168, { 16,  16,   9,   9}},
34665 	{m68k_op_bchg_8_r_ix         , 0xf1f8, 0x0170, { 18,  18,  11,  11}},
34666 	{m68k_op_bclr_32_r_d         , 0xf1f8, 0x0180, { 10,  10,   4,   4}},
34667 	{m68k_op_movep_16_re         , 0xf1f8, 0x0188, { 16,  16,  11,  11}},
34668 	{m68k_op_bclr_8_r_ai         , 0xf1f8, 0x0190, { 12,  14,   8,   8}},
34669 	{m68k_op_bclr_8_r_pi         , 0xf1f8, 0x0198, { 12,  14,   8,   8}},
34670 	{m68k_op_bclr_8_r_pd         , 0xf1f8, 0x01a0, { 14,  16,   9,   9}},
34671 	{m68k_op_bclr_8_r_di         , 0xf1f8, 0x01a8, { 16,  18,   9,   9}},
34672 	{m68k_op_bclr_8_r_ix         , 0xf1f8, 0x01b0, { 18,  20,  11,  11}},
34673 	{m68k_op_bset_32_r_d         , 0xf1f8, 0x01c0, {  8,   8,   4,   4}},
34674 	{m68k_op_movep_32_re         , 0xf1f8, 0x01c8, { 24,  24,  17,  17}},
34675 	{m68k_op_bset_8_r_ai         , 0xf1f8, 0x01d0, { 12,  12,   8,   8}},
34676 	{m68k_op_bset_8_r_pi         , 0xf1f8, 0x01d8, { 12,  12,   8,   8}},
34677 	{m68k_op_bset_8_r_pd         , 0xf1f8, 0x01e0, { 14,  14,   9,   9}},
34678 	{m68k_op_bset_8_r_di         , 0xf1f8, 0x01e8, { 16,  16,   9,   9}},
34679 	{m68k_op_bset_8_r_ix         , 0xf1f8, 0x01f0, { 18,  18,  11,  11}},
34680 	{m68k_op_move_8_d_d          , 0xf1f8, 0x1000, {  4,   4,   2,   2}},
34681 	{m68k_op_move_8_d_ai         , 0xf1f8, 0x1010, {  8,   8,   6,   6}},
34682 	{m68k_op_move_8_d_pi         , 0xf1f8, 0x1018, {  8,   8,   6,   6}},
34683 	{m68k_op_move_8_d_pd         , 0xf1f8, 0x1020, { 10,  10,   7,   7}},
34684 	{m68k_op_move_8_d_di         , 0xf1f8, 0x1028, { 12,  12,   7,   7}},
34685 	{m68k_op_move_8_d_ix         , 0xf1f8, 0x1030, { 14,  14,   9,   9}},
34686 	{m68k_op_move_8_ai_d         , 0xf1f8, 0x1080, {  8,   8,   4,   4}},
34687 	{m68k_op_move_8_ai_ai        , 0xf1f8, 0x1090, { 12,  12,   8,   8}},
34688 	{m68k_op_move_8_ai_pi        , 0xf1f8, 0x1098, { 12,  12,   8,   8}},
34689 	{m68k_op_move_8_ai_pd        , 0xf1f8, 0x10a0, { 14,  14,   9,   9}},
34690 	{m68k_op_move_8_ai_di        , 0xf1f8, 0x10a8, { 16,  16,   9,   9}},
34691 	{m68k_op_move_8_ai_ix        , 0xf1f8, 0x10b0, { 18,  18,  11,  11}},
34692 	{m68k_op_move_8_pi_d         , 0xf1f8, 0x10c0, {  8,   8,   4,   4}},
34693 	{m68k_op_move_8_pi_ai        , 0xf1f8, 0x10d0, { 12,  12,   8,   8}},
34694 	{m68k_op_move_8_pi_pi        , 0xf1f8, 0x10d8, { 12,  12,   8,   8}},
34695 	{m68k_op_move_8_pi_pd        , 0xf1f8, 0x10e0, { 14,  14,   9,   9}},
34696 	{m68k_op_move_8_pi_di        , 0xf1f8, 0x10e8, { 16,  16,   9,   9}},
34697 	{m68k_op_move_8_pi_ix        , 0xf1f8, 0x10f0, { 18,  18,  11,  11}},
34698 	{m68k_op_move_8_pd_d         , 0xf1f8, 0x1100, {  8,   8,   5,   5}},
34699 	{m68k_op_move_8_pd_ai        , 0xf1f8, 0x1110, { 12,  12,   9,   9}},
34700 	{m68k_op_move_8_pd_pi        , 0xf1f8, 0x1118, { 12,  12,   9,   9}},
34701 	{m68k_op_move_8_pd_pd        , 0xf1f8, 0x1120, { 14,  14,  10,  10}},
34702 	{m68k_op_move_8_pd_di        , 0xf1f8, 0x1128, { 16,  16,  10,  10}},
34703 	{m68k_op_move_8_pd_ix        , 0xf1f8, 0x1130, { 18,  18,  12,  12}},
34704 	{m68k_op_move_8_di_d         , 0xf1f8, 0x1140, { 12,  12,   5,   5}},
34705 	{m68k_op_move_8_di_ai        , 0xf1f8, 0x1150, { 16,  16,   9,   9}},
34706 	{m68k_op_move_8_di_pi        , 0xf1f8, 0x1158, { 16,  16,   9,   9}},
34707 	{m68k_op_move_8_di_pd        , 0xf1f8, 0x1160, { 18,  18,  10,  10}},
34708 	{m68k_op_move_8_di_di        , 0xf1f8, 0x1168, { 20,  20,  10,  10}},
34709 	{m68k_op_move_8_di_ix        , 0xf1f8, 0x1170, { 22,  22,  12,  12}},
34710 	{m68k_op_move_8_ix_d         , 0xf1f8, 0x1180, { 14,  14,   7,   7}},
34711 	{m68k_op_move_8_ix_ai        , 0xf1f8, 0x1190, { 18,  18,  11,  11}},
34712 	{m68k_op_move_8_ix_pi        , 0xf1f8, 0x1198, { 18,  18,  11,  11}},
34713 	{m68k_op_move_8_ix_pd        , 0xf1f8, 0x11a0, { 20,  20,  12,  12}},
34714 	{m68k_op_move_8_ix_di        , 0xf1f8, 0x11a8, { 22,  22,  12,  12}},
34715 	{m68k_op_move_8_ix_ix        , 0xf1f8, 0x11b0, { 24,  24,  14,  14}},
34716 	{m68k_op_move_32_d_d         , 0xf1f8, 0x2000, {  4,   4,   2,   2}},
34717 	{m68k_op_move_32_d_a         , 0xf1f8, 0x2008, {  4,   4,   2,   2}},
34718 	{m68k_op_move_32_d_ai        , 0xf1f8, 0x2010, { 12,  12,   6,   6}},
34719 	{m68k_op_move_32_d_pi        , 0xf1f8, 0x2018, { 12,  12,   6,   6}},
34720 	{m68k_op_move_32_d_pd        , 0xf1f8, 0x2020, { 14,  14,   7,   7}},
34721 	{m68k_op_move_32_d_di        , 0xf1f8, 0x2028, { 16,  16,   7,   7}},
34722 	{m68k_op_move_32_d_ix        , 0xf1f8, 0x2030, { 18,  18,   9,   9}},
34723 	{m68k_op_movea_32_d          , 0xf1f8, 0x2040, {  4,   4,   2,   2}},
34724 	{m68k_op_movea_32_a          , 0xf1f8, 0x2048, {  4,   4,   2,   2}},
34725 	{m68k_op_movea_32_ai         , 0xf1f8, 0x2050, { 12,  12,   6,   6}},
34726 	{m68k_op_movea_32_pi         , 0xf1f8, 0x2058, { 12,  12,   6,   6}},
34727 	{m68k_op_movea_32_pd         , 0xf1f8, 0x2060, { 14,  14,   7,   7}},
34728 	{m68k_op_movea_32_di         , 0xf1f8, 0x2068, { 16,  16,   7,   7}},
34729 	{m68k_op_movea_32_ix         , 0xf1f8, 0x2070, { 18,  18,   9,   9}},
34730 	{m68k_op_move_32_ai_d        , 0xf1f8, 0x2080, { 12,  12,   4,   4}},
34731 	{m68k_op_move_32_ai_a        , 0xf1f8, 0x2088, { 12,  12,   4,   4}},
34732 	{m68k_op_move_32_ai_ai       , 0xf1f8, 0x2090, { 20,  20,   8,   8}},
34733 	{m68k_op_move_32_ai_pi       , 0xf1f8, 0x2098, { 20,  20,   8,   8}},
34734 	{m68k_op_move_32_ai_pd       , 0xf1f8, 0x20a0, { 22,  22,   9,   9}},
34735 	{m68k_op_move_32_ai_di       , 0xf1f8, 0x20a8, { 24,  24,   9,   9}},
34736 	{m68k_op_move_32_ai_ix       , 0xf1f8, 0x20b0, { 26,  26,  11,  11}},
34737 	{m68k_op_move_32_pi_d        , 0xf1f8, 0x20c0, { 12,  12,   4,   4}},
34738 	{m68k_op_move_32_pi_a        , 0xf1f8, 0x20c8, { 12,  12,   4,   4}},
34739 	{m68k_op_move_32_pi_ai       , 0xf1f8, 0x20d0, { 20,  20,   8,   8}},
34740 	{m68k_op_move_32_pi_pi       , 0xf1f8, 0x20d8, { 20,  20,   8,   8}},
34741 	{m68k_op_move_32_pi_pd       , 0xf1f8, 0x20e0, { 22,  22,   9,   9}},
34742 	{m68k_op_move_32_pi_di       , 0xf1f8, 0x20e8, { 24,  24,   9,   9}},
34743 	{m68k_op_move_32_pi_ix       , 0xf1f8, 0x20f0, { 26,  26,  11,  11}},
34744 	{m68k_op_move_32_pd_d        , 0xf1f8, 0x2100, { 12,  14,   5,   5}},
34745 	{m68k_op_move_32_pd_a        , 0xf1f8, 0x2108, { 12,  14,   5,   5}},
34746 	{m68k_op_move_32_pd_ai       , 0xf1f8, 0x2110, { 20,  22,   9,   9}},
34747 	{m68k_op_move_32_pd_pi       , 0xf1f8, 0x2118, { 20,  22,   9,   9}},
34748 	{m68k_op_move_32_pd_pd       , 0xf1f8, 0x2120, { 22,  24,  10,  10}},
34749 	{m68k_op_move_32_pd_di       , 0xf1f8, 0x2128, { 24,  26,  10,  10}},
34750 	{m68k_op_move_32_pd_ix       , 0xf1f8, 0x2130, { 26,  28,  12,  12}},
34751 	{m68k_op_move_32_di_d        , 0xf1f8, 0x2140, { 16,  16,   5,   5}},
34752 	{m68k_op_move_32_di_a        , 0xf1f8, 0x2148, { 16,  16,   5,   5}},
34753 	{m68k_op_move_32_di_ai       , 0xf1f8, 0x2150, { 24,  24,   9,   9}},
34754 	{m68k_op_move_32_di_pi       , 0xf1f8, 0x2158, { 24,  24,   9,   9}},
34755 	{m68k_op_move_32_di_pd       , 0xf1f8, 0x2160, { 26,  26,  10,  10}},
34756 	{m68k_op_move_32_di_di       , 0xf1f8, 0x2168, { 28,  28,  10,  10}},
34757 	{m68k_op_move_32_di_ix       , 0xf1f8, 0x2170, { 30,  30,  12,  12}},
34758 	{m68k_op_move_32_ix_d        , 0xf1f8, 0x2180, { 18,  18,   7,   7}},
34759 	{m68k_op_move_32_ix_a        , 0xf1f8, 0x2188, { 18,  18,   7,   7}},
34760 	{m68k_op_move_32_ix_ai       , 0xf1f8, 0x2190, { 26,  26,  11,  11}},
34761 	{m68k_op_move_32_ix_pi       , 0xf1f8, 0x2198, { 26,  26,  11,  11}},
34762 	{m68k_op_move_32_ix_pd       , 0xf1f8, 0x21a0, { 28,  28,  12,  12}},
34763 	{m68k_op_move_32_ix_di       , 0xf1f8, 0x21a8, { 30,  30,  12,  12}},
34764 	{m68k_op_move_32_ix_ix       , 0xf1f8, 0x21b0, { 32,  32,  14,  14}},
34765 	{m68k_op_move_16_d_d         , 0xf1f8, 0x3000, {  4,   4,   2,   2}},
34766 	{m68k_op_move_16_d_a         , 0xf1f8, 0x3008, {  4,   4,   2,   2}},
34767 	{m68k_op_move_16_d_ai        , 0xf1f8, 0x3010, {  8,   8,   6,   6}},
34768 	{m68k_op_move_16_d_pi        , 0xf1f8, 0x3018, {  8,   8,   6,   6}},
34769 	{m68k_op_move_16_d_pd        , 0xf1f8, 0x3020, { 10,  10,   7,   7}},
34770 	{m68k_op_move_16_d_di        , 0xf1f8, 0x3028, { 12,  12,   7,   7}},
34771 	{m68k_op_move_16_d_ix        , 0xf1f8, 0x3030, { 14,  14,   9,   9}},
34772 	{m68k_op_movea_16_d          , 0xf1f8, 0x3040, {  4,   4,   2,   2}},
34773 	{m68k_op_movea_16_a          , 0xf1f8, 0x3048, {  4,   4,   2,   2}},
34774 	{m68k_op_movea_16_ai         , 0xf1f8, 0x3050, {  8,   8,   6,   6}},
34775 	{m68k_op_movea_16_pi         , 0xf1f8, 0x3058, {  8,   8,   6,   6}},
34776 	{m68k_op_movea_16_pd         , 0xf1f8, 0x3060, { 10,  10,   7,   7}},
34777 	{m68k_op_movea_16_di         , 0xf1f8, 0x3068, { 12,  12,   7,   7}},
34778 	{m68k_op_movea_16_ix         , 0xf1f8, 0x3070, { 14,  14,   9,   9}},
34779 	{m68k_op_move_16_ai_d        , 0xf1f8, 0x3080, {  8,   8,   4,   4}},
34780 	{m68k_op_move_16_ai_a        , 0xf1f8, 0x3088, {  8,   8,   4,   4}},
34781 	{m68k_op_move_16_ai_ai       , 0xf1f8, 0x3090, { 12,  12,   8,   8}},
34782 	{m68k_op_move_16_ai_pi       , 0xf1f8, 0x3098, { 12,  12,   8,   8}},
34783 	{m68k_op_move_16_ai_pd       , 0xf1f8, 0x30a0, { 14,  14,   9,   9}},
34784 	{m68k_op_move_16_ai_di       , 0xf1f8, 0x30a8, { 16,  16,   9,   9}},
34785 	{m68k_op_move_16_ai_ix       , 0xf1f8, 0x30b0, { 18,  18,  11,  11}},
34786 	{m68k_op_move_16_pi_d        , 0xf1f8, 0x30c0, {  8,   8,   4,   4}},
34787 	{m68k_op_move_16_pi_a        , 0xf1f8, 0x30c8, {  8,   8,   4,   4}},
34788 	{m68k_op_move_16_pi_ai       , 0xf1f8, 0x30d0, { 12,  12,   8,   8}},
34789 	{m68k_op_move_16_pi_pi       , 0xf1f8, 0x30d8, { 12,  12,   8,   8}},
34790 	{m68k_op_move_16_pi_pd       , 0xf1f8, 0x30e0, { 14,  14,   9,   9}},
34791 	{m68k_op_move_16_pi_di       , 0xf1f8, 0x30e8, { 16,  16,   9,   9}},
34792 	{m68k_op_move_16_pi_ix       , 0xf1f8, 0x30f0, { 18,  18,  11,  11}},
34793 	{m68k_op_move_16_pd_d        , 0xf1f8, 0x3100, {  8,   8,   5,   5}},
34794 	{m68k_op_move_16_pd_a        , 0xf1f8, 0x3108, {  8,   8,   5,   5}},
34795 	{m68k_op_move_16_pd_ai       , 0xf1f8, 0x3110, { 12,  12,   9,   9}},
34796 	{m68k_op_move_16_pd_pi       , 0xf1f8, 0x3118, { 12,  12,   9,   9}},
34797 	{m68k_op_move_16_pd_pd       , 0xf1f8, 0x3120, { 14,  14,  10,  10}},
34798 	{m68k_op_move_16_pd_di       , 0xf1f8, 0x3128, { 16,  16,  10,  10}},
34799 	{m68k_op_move_16_pd_ix       , 0xf1f8, 0x3130, { 18,  18,  12,  12}},
34800 	{m68k_op_move_16_di_d        , 0xf1f8, 0x3140, { 12,  12,   5,   5}},
34801 	{m68k_op_move_16_di_a        , 0xf1f8, 0x3148, { 12,  12,   5,   5}},
34802 	{m68k_op_move_16_di_ai       , 0xf1f8, 0x3150, { 16,  16,   9,   9}},
34803 	{m68k_op_move_16_di_pi       , 0xf1f8, 0x3158, { 16,  16,   9,   9}},
34804 	{m68k_op_move_16_di_pd       , 0xf1f8, 0x3160, { 18,  18,  10,  10}},
34805 	{m68k_op_move_16_di_di       , 0xf1f8, 0x3168, { 20,  20,  10,  10}},
34806 	{m68k_op_move_16_di_ix       , 0xf1f8, 0x3170, { 22,  22,  12,  12}},
34807 	{m68k_op_move_16_ix_d        , 0xf1f8, 0x3180, { 14,  14,   7,   7}},
34808 	{m68k_op_move_16_ix_a        , 0xf1f8, 0x3188, { 14,  14,   7,   7}},
34809 	{m68k_op_move_16_ix_ai       , 0xf1f8, 0x3190, { 18,  18,  11,  11}},
34810 	{m68k_op_move_16_ix_pi       , 0xf1f8, 0x3198, { 18,  18,  11,  11}},
34811 	{m68k_op_move_16_ix_pd       , 0xf1f8, 0x31a0, { 20,  20,  12,  12}},
34812 	{m68k_op_move_16_ix_di       , 0xf1f8, 0x31a8, { 22,  22,  12,  12}},
34813 	{m68k_op_move_16_ix_ix       , 0xf1f8, 0x31b0, { 24,  24,  14,  14}},
34814 	{m68k_op_chk_32_d            , 0xf1f8, 0x4100, {  0,   0,   8,   8}},
34815 	{m68k_op_chk_32_ai           , 0xf1f8, 0x4110, {  0,   0,  12,  12}},
34816 	{m68k_op_chk_32_pi           , 0xf1f8, 0x4118, {  0,   0,  12,  12}},
34817 	{m68k_op_chk_32_pd           , 0xf1f8, 0x4120, {  0,   0,  13,  13}},
34818 	{m68k_op_chk_32_di           , 0xf1f8, 0x4128, {  0,   0,  13,  13}},
34819 	{m68k_op_chk_32_ix           , 0xf1f8, 0x4130, {  0,   0,  15,  15}},
34820 	{m68k_op_chk_16_d            , 0xf1f8, 0x4180, { 10,   8,   8,   8}},
34821 	{m68k_op_chk_16_ai           , 0xf1f8, 0x4190, { 14,  12,  12,  12}},
34822 	{m68k_op_chk_16_pi           , 0xf1f8, 0x4198, { 14,  12,  12,  12}},
34823 	{m68k_op_chk_16_pd           , 0xf1f8, 0x41a0, { 16,  14,  13,  13}},
34824 	{m68k_op_chk_16_di           , 0xf1f8, 0x41a8, { 18,  16,  13,  13}},
34825 	{m68k_op_chk_16_ix           , 0xf1f8, 0x41b0, { 20,  18,  15,  15}},
34826 	{m68k_op_lea_32_ai           , 0xf1f8, 0x41d0, {  4,   4,   6,   6}},
34827 	{m68k_op_lea_32_di           , 0xf1f8, 0x41e8, {  8,   8,   7,   7}},
34828 	{m68k_op_lea_32_ix           , 0xf1f8, 0x41f0, { 12,  12,   9,   9}},
34829 	{m68k_op_addq_8_d            , 0xf1f8, 0x5000, {  4,   4,   2,   2}},
34830 	{m68k_op_addq_8_ai           , 0xf1f8, 0x5010, { 12,  12,   8,   8}},
34831 	{m68k_op_addq_8_pi           , 0xf1f8, 0x5018, { 12,  12,   8,   8}},
34832 	{m68k_op_addq_8_pd           , 0xf1f8, 0x5020, { 14,  14,   9,   9}},
34833 	{m68k_op_addq_8_di           , 0xf1f8, 0x5028, { 16,  16,   9,   9}},
34834 	{m68k_op_addq_8_ix           , 0xf1f8, 0x5030, { 18,  18,  11,  11}},
34835 	{m68k_op_addq_16_d           , 0xf1f8, 0x5040, {  4,   4,   2,   2}},
34836 	{m68k_op_addq_16_a           , 0xf1f8, 0x5048, {  4,   4,   2,   2}},
34837 	{m68k_op_addq_16_ai          , 0xf1f8, 0x5050, { 12,  12,   8,   8}},
34838 	{m68k_op_addq_16_pi          , 0xf1f8, 0x5058, { 12,  12,   8,   8}},
34839 	{m68k_op_addq_16_pd          , 0xf1f8, 0x5060, { 14,  14,   9,   9}},
34840 	{m68k_op_addq_16_di          , 0xf1f8, 0x5068, { 16,  16,   9,   9}},
34841 	{m68k_op_addq_16_ix          , 0xf1f8, 0x5070, { 18,  18,  11,  11}},
34842 	{m68k_op_addq_32_d           , 0xf1f8, 0x5080, {  8,   8,   2,   2}},
34843 	{m68k_op_addq_32_a           , 0xf1f8, 0x5088, {  8,   8,   2,   2}},
34844 	{m68k_op_addq_32_ai          , 0xf1f8, 0x5090, { 20,  20,   8,   8}},
34845 	{m68k_op_addq_32_pi          , 0xf1f8, 0x5098, { 20,  20,   8,   8}},
34846 	{m68k_op_addq_32_pd          , 0xf1f8, 0x50a0, { 22,  22,   9,   9}},
34847 	{m68k_op_addq_32_di          , 0xf1f8, 0x50a8, { 24,  24,   9,   9}},
34848 	{m68k_op_addq_32_ix          , 0xf1f8, 0x50b0, { 26,  26,  11,  11}},
34849 	{m68k_op_subq_8_d            , 0xf1f8, 0x5100, {  4,   4,   2,   2}},
34850 	{m68k_op_subq_8_ai           , 0xf1f8, 0x5110, { 12,  12,   8,   8}},
34851 	{m68k_op_subq_8_pi           , 0xf1f8, 0x5118, { 12,  12,   8,   8}},
34852 	{m68k_op_subq_8_pd           , 0xf1f8, 0x5120, { 14,  14,   9,   9}},
34853 	{m68k_op_subq_8_di           , 0xf1f8, 0x5128, { 16,  16,   9,   9}},
34854 	{m68k_op_subq_8_ix           , 0xf1f8, 0x5130, { 18,  18,  11,  11}},
34855 	{m68k_op_subq_16_d           , 0xf1f8, 0x5140, {  4,   4,   2,   2}},
34856 	{m68k_op_subq_16_a           , 0xf1f8, 0x5148, {  8,   4,   2,   2}},
34857 	{m68k_op_subq_16_ai          , 0xf1f8, 0x5150, { 12,  12,   8,   8}},
34858 	{m68k_op_subq_16_pi          , 0xf1f8, 0x5158, { 12,  12,   8,   8}},
34859 	{m68k_op_subq_16_pd          , 0xf1f8, 0x5160, { 14,  14,   9,   9}},
34860 	{m68k_op_subq_16_di          , 0xf1f8, 0x5168, { 16,  16,   9,   9}},
34861 	{m68k_op_subq_16_ix          , 0xf1f8, 0x5170, { 18,  18,  11,  11}},
34862 	{m68k_op_subq_32_d           , 0xf1f8, 0x5180, {  8,   8,   2,   2}},
34863 	{m68k_op_subq_32_a           , 0xf1f8, 0x5188, {  8,   8,   2,   2}},
34864 	{m68k_op_subq_32_ai          , 0xf1f8, 0x5190, { 20,  20,   8,   8}},
34865 	{m68k_op_subq_32_pi          , 0xf1f8, 0x5198, { 20,  20,   8,   8}},
34866 	{m68k_op_subq_32_pd          , 0xf1f8, 0x51a0, { 22,  22,   9,   9}},
34867 	{m68k_op_subq_32_di          , 0xf1f8, 0x51a8, { 24,  24,   9,   9}},
34868 	{m68k_op_subq_32_ix          , 0xf1f8, 0x51b0, { 26,  26,  11,  11}},
34869 	{m68k_op_or_8_er_d           , 0xf1f8, 0x8000, {  4,   4,   2,   2}},
34870 	{m68k_op_or_8_er_ai          , 0xf1f8, 0x8010, {  8,   8,   6,   6}},
34871 	{m68k_op_or_8_er_pi          , 0xf1f8, 0x8018, {  8,   8,   6,   6}},
34872 	{m68k_op_or_8_er_pd          , 0xf1f8, 0x8020, { 10,  10,   7,   7}},
34873 	{m68k_op_or_8_er_di          , 0xf1f8, 0x8028, { 12,  12,   7,   7}},
34874 	{m68k_op_or_8_er_ix          , 0xf1f8, 0x8030, { 14,  14,   9,   9}},
34875 	{m68k_op_or_16_er_d          , 0xf1f8, 0x8040, {  4,   4,   2,   2}},
34876 	{m68k_op_or_16_er_ai         , 0xf1f8, 0x8050, {  8,   8,   6,   6}},
34877 	{m68k_op_or_16_er_pi         , 0xf1f8, 0x8058, {  8,   8,   6,   6}},
34878 	{m68k_op_or_16_er_pd         , 0xf1f8, 0x8060, { 10,  10,   7,   7}},
34879 	{m68k_op_or_16_er_di         , 0xf1f8, 0x8068, { 12,  12,   7,   7}},
34880 	{m68k_op_or_16_er_ix         , 0xf1f8, 0x8070, { 14,  14,   9,   9}},
34881 	{m68k_op_or_32_er_d          , 0xf1f8, 0x8080, {  8,   6,   2,   2}},
34882 	{m68k_op_or_32_er_ai         , 0xf1f8, 0x8090, { 14,  14,   6,   6}},
34883 	{m68k_op_or_32_er_pi         , 0xf1f8, 0x8098, { 14,  14,   6,   6}},
34884 	{m68k_op_or_32_er_pd         , 0xf1f8, 0x80a0, { 16,  16,   7,   7}},
34885 	{m68k_op_or_32_er_di         , 0xf1f8, 0x80a8, { 18,  18,   7,   7}},
34886 	{m68k_op_or_32_er_ix         , 0xf1f8, 0x80b0, { 20,  20,   9,   9}},
34887 	{m68k_op_divu_16_d           , 0xf1f8, 0x80c0, {140, 108,  44,  44}},
34888 	{m68k_op_divu_16_ai          , 0xf1f8, 0x80d0, {144, 112,  48,  48}},
34889 	{m68k_op_divu_16_pi          , 0xf1f8, 0x80d8, {144, 112,  48,  48}},
34890 	{m68k_op_divu_16_pd          , 0xf1f8, 0x80e0, {146, 114,  49,  49}},
34891 	{m68k_op_divu_16_di          , 0xf1f8, 0x80e8, {148, 116,  49,  49}},
34892 	{m68k_op_divu_16_ix          , 0xf1f8, 0x80f0, {150, 118,  51,  51}},
34893 	{m68k_op_sbcd_8_rr           , 0xf1f8, 0x8100, {  6,   6,   4,   4}},
34894 	{m68k_op_sbcd_8_mm           , 0xf1f8, 0x8108, { 18,  18,  16,  16}},
34895 	{m68k_op_or_8_re_ai          , 0xf1f8, 0x8110, { 12,  12,   8,   8}},
34896 	{m68k_op_or_8_re_pi          , 0xf1f8, 0x8118, { 12,  12,   8,   8}},
34897 	{m68k_op_or_8_re_pd          , 0xf1f8, 0x8120, { 14,  14,   9,   9}},
34898 	{m68k_op_or_8_re_di          , 0xf1f8, 0x8128, { 16,  16,   9,   9}},
34899 	{m68k_op_or_8_re_ix          , 0xf1f8, 0x8130, { 18,  18,  11,  11}},
34900 	{m68k_op_pack_16_rr          , 0xf1f8, 0x8140, {  0,   0,   6,   6}},
34901 	{m68k_op_pack_16_mm          , 0xf1f8, 0x8148, {  0,   0,  13,  13}},
34902 	{m68k_op_or_16_re_ai         , 0xf1f8, 0x8150, { 12,  12,   8,   8}},
34903 	{m68k_op_or_16_re_pi         , 0xf1f8, 0x8158, { 12,  12,   8,   8}},
34904 	{m68k_op_or_16_re_pd         , 0xf1f8, 0x8160, { 14,  14,   9,   9}},
34905 	{m68k_op_or_16_re_di         , 0xf1f8, 0x8168, { 16,  16,   9,   9}},
34906 	{m68k_op_or_16_re_ix         , 0xf1f8, 0x8170, { 18,  18,  11,  11}},
34907 	{m68k_op_unpk_16_rr          , 0xf1f8, 0x8180, {  0,   0,   8,   8}},
34908 	{m68k_op_unpk_16_mm          , 0xf1f8, 0x8188, {  0,   0,  13,  13}},
34909 	{m68k_op_or_32_re_ai         , 0xf1f8, 0x8190, { 20,  20,   8,   8}},
34910 	{m68k_op_or_32_re_pi         , 0xf1f8, 0x8198, { 20,  20,   8,   8}},
34911 	{m68k_op_or_32_re_pd         , 0xf1f8, 0x81a0, { 22,  22,   9,   9}},
34912 	{m68k_op_or_32_re_di         , 0xf1f8, 0x81a8, { 24,  24,   9,   9}},
34913 	{m68k_op_or_32_re_ix         , 0xf1f8, 0x81b0, { 26,  26,  11,  11}},
34914 	{m68k_op_divs_16_d           , 0xf1f8, 0x81c0, {158, 122,  56,  56}},
34915 	{m68k_op_divs_16_ai          , 0xf1f8, 0x81d0, {162, 126,  60,  60}},
34916 	{m68k_op_divs_16_pi          , 0xf1f8, 0x81d8, {162, 126,  60,  60}},
34917 	{m68k_op_divs_16_pd          , 0xf1f8, 0x81e0, {164, 128,  61,  61}},
34918 	{m68k_op_divs_16_di          , 0xf1f8, 0x81e8, {166, 130,  61,  61}},
34919 	{m68k_op_divs_16_ix          , 0xf1f8, 0x81f0, {168, 132,  63,  63}},
34920 	{m68k_op_sub_8_er_d          , 0xf1f8, 0x9000, {  4,   4,   2,   2}},
34921 	{m68k_op_sub_8_er_ai         , 0xf1f8, 0x9010, {  8,   8,   6,   6}},
34922 	{m68k_op_sub_8_er_pi         , 0xf1f8, 0x9018, {  8,   8,   6,   6}},
34923 	{m68k_op_sub_8_er_pd         , 0xf1f8, 0x9020, { 10,  10,   7,   7}},
34924 	{m68k_op_sub_8_er_di         , 0xf1f8, 0x9028, { 12,  12,   7,   7}},
34925 	{m68k_op_sub_8_er_ix         , 0xf1f8, 0x9030, { 14,  14,   9,   9}},
34926 	{m68k_op_sub_16_er_d         , 0xf1f8, 0x9040, {  4,   4,   2,   2}},
34927 	{m68k_op_sub_16_er_a         , 0xf1f8, 0x9048, {  4,   4,   2,   2}},
34928 	{m68k_op_sub_16_er_ai        , 0xf1f8, 0x9050, {  8,   8,   6,   6}},
34929 	{m68k_op_sub_16_er_pi        , 0xf1f8, 0x9058, {  8,   8,   6,   6}},
34930 	{m68k_op_sub_16_er_pd        , 0xf1f8, 0x9060, { 10,  10,   7,   7}},
34931 	{m68k_op_sub_16_er_di        , 0xf1f8, 0x9068, { 12,  12,   7,   7}},
34932 	{m68k_op_sub_16_er_ix        , 0xf1f8, 0x9070, { 14,  14,   9,   9}},
34933 	{m68k_op_sub_32_er_d         , 0xf1f8, 0x9080, {  8,   6,   2,   2}},
34934 	{m68k_op_sub_32_er_a         , 0xf1f8, 0x9088, {  8,   6,   2,   2}},
34935 	{m68k_op_sub_32_er_ai        , 0xf1f8, 0x9090, { 14,  14,   6,   6}},
34936 	{m68k_op_sub_32_er_pi        , 0xf1f8, 0x9098, { 14,  14,   6,   6}},
34937 	{m68k_op_sub_32_er_pd        , 0xf1f8, 0x90a0, { 16,  16,   7,   7}},
34938 	{m68k_op_sub_32_er_di        , 0xf1f8, 0x90a8, { 18,  18,   7,   7}},
34939 	{m68k_op_sub_32_er_ix        , 0xf1f8, 0x90b0, { 20,  20,   9,   9}},
34940 	{m68k_op_suba_16_d           , 0xf1f8, 0x90c0, {  8,   8,   2,   2}},
34941 	{m68k_op_suba_16_a           , 0xf1f8, 0x90c8, {  8,   8,   2,   2}},
34942 	{m68k_op_suba_16_ai          , 0xf1f8, 0x90d0, { 12,  12,   6,   6}},
34943 	{m68k_op_suba_16_pi          , 0xf1f8, 0x90d8, { 12,  12,   6,   6}},
34944 	{m68k_op_suba_16_pd          , 0xf1f8, 0x90e0, { 14,  14,   7,   7}},
34945 	{m68k_op_suba_16_di          , 0xf1f8, 0x90e8, { 16,  16,   7,   7}},
34946 	{m68k_op_suba_16_ix          , 0xf1f8, 0x90f0, { 18,  18,   9,   9}},
34947 	{m68k_op_subx_8_rr           , 0xf1f8, 0x9100, {  4,   4,   2,   2}},
34948 	{m68k_op_subx_8_mm           , 0xf1f8, 0x9108, { 18,  18,  12,  12}},
34949 	{m68k_op_sub_8_re_ai         , 0xf1f8, 0x9110, { 12,  12,   8,   8}},
34950 	{m68k_op_sub_8_re_pi         , 0xf1f8, 0x9118, { 12,  12,   8,   8}},
34951 	{m68k_op_sub_8_re_pd         , 0xf1f8, 0x9120, { 14,  14,   9,   9}},
34952 	{m68k_op_sub_8_re_di         , 0xf1f8, 0x9128, { 16,  16,   9,   9}},
34953 	{m68k_op_sub_8_re_ix         , 0xf1f8, 0x9130, { 18,  18,  11,  11}},
34954 	{m68k_op_subx_16_rr          , 0xf1f8, 0x9140, {  4,   4,   2,   2}},
34955 	{m68k_op_subx_16_mm          , 0xf1f8, 0x9148, { 18,  18,  12,  12}},
34956 	{m68k_op_sub_16_re_ai        , 0xf1f8, 0x9150, { 12,  12,   8,   8}},
34957 	{m68k_op_sub_16_re_pi        , 0xf1f8, 0x9158, { 12,  12,   8,   8}},
34958 	{m68k_op_sub_16_re_pd        , 0xf1f8, 0x9160, { 14,  14,   9,   9}},
34959 	{m68k_op_sub_16_re_di        , 0xf1f8, 0x9168, { 16,  16,   9,   9}},
34960 	{m68k_op_sub_16_re_ix        , 0xf1f8, 0x9170, { 18,  18,  11,  11}},
34961 	{m68k_op_subx_32_rr          , 0xf1f8, 0x9180, {  8,   6,   2,   2}},
34962 	{m68k_op_subx_32_mm          , 0xf1f8, 0x9188, { 30,  30,  12,  12}},
34963 	{m68k_op_sub_32_re_ai        , 0xf1f8, 0x9190, { 20,  20,   8,   8}},
34964 	{m68k_op_sub_32_re_pi        , 0xf1f8, 0x9198, { 20,  20,   8,   8}},
34965 	{m68k_op_sub_32_re_pd        , 0xf1f8, 0x91a0, { 22,  22,   9,   9}},
34966 	{m68k_op_sub_32_re_di        , 0xf1f8, 0x91a8, { 24,  24,   9,   9}},
34967 	{m68k_op_sub_32_re_ix        , 0xf1f8, 0x91b0, { 26,  26,  11,  11}},
34968 	{m68k_op_suba_32_d           , 0xf1f8, 0x91c0, {  8,   6,   2,   2}},
34969 	{m68k_op_suba_32_a           , 0xf1f8, 0x91c8, {  8,   6,   2,   2}},
34970 	{m68k_op_suba_32_ai          , 0xf1f8, 0x91d0, { 14,  14,   6,   6}},
34971 	{m68k_op_suba_32_pi          , 0xf1f8, 0x91d8, { 14,  14,   6,   6}},
34972 	{m68k_op_suba_32_pd          , 0xf1f8, 0x91e0, { 16,  16,   7,   7}},
34973 	{m68k_op_suba_32_di          , 0xf1f8, 0x91e8, { 18,  18,   7,   7}},
34974 	{m68k_op_suba_32_ix          , 0xf1f8, 0x91f0, { 20,  20,   9,   9}},
34975 	{m68k_op_cmp_8_d             , 0xf1f8, 0xb000, {  4,   4,   2,   2}},
34976 	{m68k_op_cmp_8_ai            , 0xf1f8, 0xb010, {  8,   8,   6,   6}},
34977 	{m68k_op_cmp_8_pi            , 0xf1f8, 0xb018, {  8,   8,   6,   6}},
34978 	{m68k_op_cmp_8_pd            , 0xf1f8, 0xb020, { 10,  10,   7,   7}},
34979 	{m68k_op_cmp_8_di            , 0xf1f8, 0xb028, { 12,  12,   7,   7}},
34980 	{m68k_op_cmp_8_ix            , 0xf1f8, 0xb030, { 14,  14,   9,   9}},
34981 	{m68k_op_cmp_16_d            , 0xf1f8, 0xb040, {  4,   4,   2,   2}},
34982 	{m68k_op_cmp_16_a            , 0xf1f8, 0xb048, {  4,   4,   2,   2}},
34983 	{m68k_op_cmp_16_ai           , 0xf1f8, 0xb050, {  8,   8,   6,   6}},
34984 	{m68k_op_cmp_16_pi           , 0xf1f8, 0xb058, {  8,   8,   6,   6}},
34985 	{m68k_op_cmp_16_pd           , 0xf1f8, 0xb060, { 10,  10,   7,   7}},
34986 	{m68k_op_cmp_16_di           , 0xf1f8, 0xb068, { 12,  12,   7,   7}},
34987 	{m68k_op_cmp_16_ix           , 0xf1f8, 0xb070, { 14,  14,   9,   9}},
34988 	{m68k_op_cmp_32_d            , 0xf1f8, 0xb080, {  6,   6,   2,   2}},
34989 	{m68k_op_cmp_32_a            , 0xf1f8, 0xb088, {  6,   6,   2,   2}},
34990 	{m68k_op_cmp_32_ai           , 0xf1f8, 0xb090, { 14,  14,   6,   6}},
34991 	{m68k_op_cmp_32_pi           , 0xf1f8, 0xb098, { 14,  14,   6,   6}},
34992 	{m68k_op_cmp_32_pd           , 0xf1f8, 0xb0a0, { 16,  16,   7,   7}},
34993 	{m68k_op_cmp_32_di           , 0xf1f8, 0xb0a8, { 18,  18,   7,   7}},
34994 	{m68k_op_cmp_32_ix           , 0xf1f8, 0xb0b0, { 20,  20,   9,   9}},
34995 	{m68k_op_cmpa_16_d           , 0xf1f8, 0xb0c0, {  6,   6,   4,   4}},
34996 	{m68k_op_cmpa_16_a           , 0xf1f8, 0xb0c8, {  6,   6,   4,   4}},
34997 	{m68k_op_cmpa_16_ai          , 0xf1f8, 0xb0d0, { 10,  10,   8,   8}},
34998 	{m68k_op_cmpa_16_pi          , 0xf1f8, 0xb0d8, { 10,  10,   8,   8}},
34999 	{m68k_op_cmpa_16_pd          , 0xf1f8, 0xb0e0, { 12,  12,   9,   9}},
35000 	{m68k_op_cmpa_16_di          , 0xf1f8, 0xb0e8, { 14,  14,   9,   9}},
35001 	{m68k_op_cmpa_16_ix          , 0xf1f8, 0xb0f0, { 16,  16,  11,  11}},
35002 	{m68k_op_eor_8_d             , 0xf1f8, 0xb100, {  4,   4,   2,   2}},
35003 	{m68k_op_cmpm_8              , 0xf1f8, 0xb108, { 12,  12,   9,   9}},
35004 	{m68k_op_eor_8_ai            , 0xf1f8, 0xb110, { 12,  12,   8,   8}},
35005 	{m68k_op_eor_8_pi            , 0xf1f8, 0xb118, { 12,  12,   8,   8}},
35006 	{m68k_op_eor_8_pd            , 0xf1f8, 0xb120, { 14,  14,   9,   9}},
35007 	{m68k_op_eor_8_di            , 0xf1f8, 0xb128, { 16,  16,   9,   9}},
35008 	{m68k_op_eor_8_ix            , 0xf1f8, 0xb130, { 18,  18,  11,  11}},
35009 	{m68k_op_eor_16_d            , 0xf1f8, 0xb140, {  4,   4,   2,   2}},
35010 	{m68k_op_cmpm_16             , 0xf1f8, 0xb148, { 12,  12,   9,   9}},
35011 	{m68k_op_eor_16_ai           , 0xf1f8, 0xb150, { 12,  12,   8,   8}},
35012 	{m68k_op_eor_16_pi           , 0xf1f8, 0xb158, { 12,  12,   8,   8}},
35013 	{m68k_op_eor_16_pd           , 0xf1f8, 0xb160, { 14,  14,   9,   9}},
35014 	{m68k_op_eor_16_di           , 0xf1f8, 0xb168, { 16,  16,   9,   9}},
35015 	{m68k_op_eor_16_ix           , 0xf1f8, 0xb170, { 18,  18,  11,  11}},
35016 	{m68k_op_eor_32_d            , 0xf1f8, 0xb180, {  8,   6,   2,   2}},
35017 	{m68k_op_cmpm_32             , 0xf1f8, 0xb188, { 20,  20,   9,   9}},
35018 	{m68k_op_eor_32_ai           , 0xf1f8, 0xb190, { 20,  20,   8,   8}},
35019 	{m68k_op_eor_32_pi           , 0xf1f8, 0xb198, { 20,  20,   8,   8}},
35020 	{m68k_op_eor_32_pd           , 0xf1f8, 0xb1a0, { 22,  22,   9,   9}},
35021 	{m68k_op_eor_32_di           , 0xf1f8, 0xb1a8, { 24,  24,   9,   9}},
35022 	{m68k_op_eor_32_ix           , 0xf1f8, 0xb1b0, { 26,  26,  11,  11}},
35023 	{m68k_op_cmpa_32_d           , 0xf1f8, 0xb1c0, {  6,   6,   4,   4}},
35024 	{m68k_op_cmpa_32_a           , 0xf1f8, 0xb1c8, {  6,   6,   4,   4}},
35025 	{m68k_op_cmpa_32_ai          , 0xf1f8, 0xb1d0, { 14,  14,   8,   8}},
35026 	{m68k_op_cmpa_32_pi          , 0xf1f8, 0xb1d8, { 14,  14,   8,   8}},
35027 	{m68k_op_cmpa_32_pd          , 0xf1f8, 0xb1e0, { 16,  16,   9,   9}},
35028 	{m68k_op_cmpa_32_di          , 0xf1f8, 0xb1e8, { 18,  18,   9,   9}},
35029 	{m68k_op_cmpa_32_ix          , 0xf1f8, 0xb1f0, { 20,  20,  11,  11}},
35030 	{m68k_op_and_8_er_d          , 0xf1f8, 0xc000, {  4,   4,   2,   2}},
35031 	{m68k_op_and_8_er_ai         , 0xf1f8, 0xc010, {  8,   8,   6,   6}},
35032 	{m68k_op_and_8_er_pi         , 0xf1f8, 0xc018, {  8,   8,   6,   6}},
35033 	{m68k_op_and_8_er_pd         , 0xf1f8, 0xc020, { 10,  10,   7,   7}},
35034 	{m68k_op_and_8_er_di         , 0xf1f8, 0xc028, { 12,  12,   7,   7}},
35035 	{m68k_op_and_8_er_ix         , 0xf1f8, 0xc030, { 14,  14,   9,   9}},
35036 	{m68k_op_and_16_er_d         , 0xf1f8, 0xc040, {  4,   4,   2,   2}},
35037 	{m68k_op_and_16_er_ai        , 0xf1f8, 0xc050, {  8,   8,   6,   6}},
35038 	{m68k_op_and_16_er_pi        , 0xf1f8, 0xc058, {  8,   8,   6,   6}},
35039 	{m68k_op_and_16_er_pd        , 0xf1f8, 0xc060, { 10,  10,   7,   7}},
35040 	{m68k_op_and_16_er_di        , 0xf1f8, 0xc068, { 12,  12,   7,   7}},
35041 	{m68k_op_and_16_er_ix        , 0xf1f8, 0xc070, { 14,  14,   9,   9}},
35042 	{m68k_op_and_32_er_d         , 0xf1f8, 0xc080, {  8,   6,   2,   2}},
35043 	{m68k_op_and_32_er_ai        , 0xf1f8, 0xc090, { 14,  14,   6,   6}},
35044 	{m68k_op_and_32_er_pi        , 0xf1f8, 0xc098, { 14,  14,   6,   6}},
35045 	{m68k_op_and_32_er_pd        , 0xf1f8, 0xc0a0, { 16,  16,   7,   7}},
35046 	{m68k_op_and_32_er_di        , 0xf1f8, 0xc0a8, { 18,  18,   7,   7}},
35047 	{m68k_op_and_32_er_ix        , 0xf1f8, 0xc0b0, { 20,  20,   9,   9}},
35048 	{m68k_op_mulu_16_d           , 0xf1f8, 0xc0c0, { 54,  30,  27,  27}},
35049 	{m68k_op_mulu_16_ai          , 0xf1f8, 0xc0d0, { 58,  34,  31,  31}},
35050 	{m68k_op_mulu_16_pi          , 0xf1f8, 0xc0d8, { 58,  34,  31,  31}},
35051 	{m68k_op_mulu_16_pd          , 0xf1f8, 0xc0e0, { 60,  36,  32,  32}},
35052 	{m68k_op_mulu_16_di          , 0xf1f8, 0xc0e8, { 62,  38,  32,  32}},
35053 	{m68k_op_mulu_16_ix          , 0xf1f8, 0xc0f0, { 64,  40,  34,  34}},
35054 	{m68k_op_abcd_8_rr           , 0xf1f8, 0xc100, {  6,   6,   4,   4}},
35055 	{m68k_op_abcd_8_mm           , 0xf1f8, 0xc108, { 18,  18,  16,  16}},
35056 	{m68k_op_and_8_re_ai         , 0xf1f8, 0xc110, { 12,  12,   8,   8}},
35057 	{m68k_op_and_8_re_pi         , 0xf1f8, 0xc118, { 12,  12,   8,   8}},
35058 	{m68k_op_and_8_re_pd         , 0xf1f8, 0xc120, { 14,  14,   9,   9}},
35059 	{m68k_op_and_8_re_di         , 0xf1f8, 0xc128, { 16,  16,   9,   9}},
35060 	{m68k_op_and_8_re_ix         , 0xf1f8, 0xc130, { 18,  18,  11,  11}},
35061 	{m68k_op_exg_32_dd           , 0xf1f8, 0xc140, {  6,   6,   2,   2}},
35062 	{m68k_op_exg_32_aa           , 0xf1f8, 0xc148, {  6,   6,   2,   2}},
35063 	{m68k_op_and_16_re_ai        , 0xf1f8, 0xc150, { 12,  12,   8,   8}},
35064 	{m68k_op_and_16_re_pi        , 0xf1f8, 0xc158, { 12,  12,   8,   8}},
35065 	{m68k_op_and_16_re_pd        , 0xf1f8, 0xc160, { 14,  14,   9,   9}},
35066 	{m68k_op_and_16_re_di        , 0xf1f8, 0xc168, { 16,  16,   9,   9}},
35067 	{m68k_op_and_16_re_ix        , 0xf1f8, 0xc170, { 18,  18,  11,  11}},
35068 	{m68k_op_exg_32_da           , 0xf1f8, 0xc188, {  6,   6,   2,   2}},
35069 	{m68k_op_and_32_re_ai        , 0xf1f8, 0xc190, { 20,  20,   8,   8}},
35070 	{m68k_op_and_32_re_pi        , 0xf1f8, 0xc198, { 20,  20,   8,   8}},
35071 	{m68k_op_and_32_re_pd        , 0xf1f8, 0xc1a0, { 22,  22,   9,   9}},
35072 	{m68k_op_and_32_re_di        , 0xf1f8, 0xc1a8, { 24,  24,   9,   9}},
35073 	{m68k_op_and_32_re_ix        , 0xf1f8, 0xc1b0, { 26,  26,  11,  11}},
35074 	{m68k_op_muls_16_d           , 0xf1f8, 0xc1c0, { 54,  32,  27,  27}},
35075 	{m68k_op_muls_16_ai          , 0xf1f8, 0xc1d0, { 58,  36,  31,  31}},
35076 	{m68k_op_muls_16_pi          , 0xf1f8, 0xc1d8, { 58,  36,  31,  31}},
35077 	{m68k_op_muls_16_pd          , 0xf1f8, 0xc1e0, { 60,  38,  32,  32}},
35078 	{m68k_op_muls_16_di          , 0xf1f8, 0xc1e8, { 62,  40,  32,  32}},
35079 	{m68k_op_muls_16_ix          , 0xf1f8, 0xc1f0, { 64,  42,  34,  34}},
35080 	{m68k_op_add_8_er_d          , 0xf1f8, 0xd000, {  4,   4,   2,   2}},
35081 	{m68k_op_add_8_er_ai         , 0xf1f8, 0xd010, {  8,   8,   6,   6}},
35082 	{m68k_op_add_8_er_pi         , 0xf1f8, 0xd018, {  8,   8,   6,   6}},
35083 	{m68k_op_add_8_er_pd         , 0xf1f8, 0xd020, { 10,  10,   7,   7}},
35084 	{m68k_op_add_8_er_di         , 0xf1f8, 0xd028, { 12,  12,   7,   7}},
35085 	{m68k_op_add_8_er_ix         , 0xf1f8, 0xd030, { 14,  14,   9,   9}},
35086 	{m68k_op_add_16_er_d         , 0xf1f8, 0xd040, {  4,   4,   2,   2}},
35087 	{m68k_op_add_16_er_a         , 0xf1f8, 0xd048, {  4,   4,   2,   2}},
35088 	{m68k_op_add_16_er_ai        , 0xf1f8, 0xd050, {  8,   8,   6,   6}},
35089 	{m68k_op_add_16_er_pi        , 0xf1f8, 0xd058, {  8,   8,   6,   6}},
35090 	{m68k_op_add_16_er_pd        , 0xf1f8, 0xd060, { 10,  10,   7,   7}},
35091 	{m68k_op_add_16_er_di        , 0xf1f8, 0xd068, { 12,  12,   7,   7}},
35092 	{m68k_op_add_16_er_ix        , 0xf1f8, 0xd070, { 14,  14,   9,   9}},
35093 	{m68k_op_add_32_er_d         , 0xf1f8, 0xd080, {  8,   6,   2,   2}},
35094 	{m68k_op_add_32_er_a         , 0xf1f8, 0xd088, {  8,   6,   2,   2}},
35095 	{m68k_op_add_32_er_ai        , 0xf1f8, 0xd090, { 14,  14,   6,   6}},
35096 	{m68k_op_add_32_er_pi        , 0xf1f8, 0xd098, { 14,  14,   6,   6}},
35097 	{m68k_op_add_32_er_pd        , 0xf1f8, 0xd0a0, { 16,  16,   7,   7}},
35098 	{m68k_op_add_32_er_di        , 0xf1f8, 0xd0a8, { 18,  18,   7,   7}},
35099 	{m68k_op_add_32_er_ix        , 0xf1f8, 0xd0b0, { 20,  20,   9,   9}},
35100 	{m68k_op_adda_16_d           , 0xf1f8, 0xd0c0, {  8,   8,   2,   2}},
35101 	{m68k_op_adda_16_a           , 0xf1f8, 0xd0c8, {  8,   8,   2,   2}},
35102 	{m68k_op_adda_16_ai          , 0xf1f8, 0xd0d0, { 12,  12,   6,   6}},
35103 	{m68k_op_adda_16_pi          , 0xf1f8, 0xd0d8, { 12,  12,   6,   6}},
35104 	{m68k_op_adda_16_pd          , 0xf1f8, 0xd0e0, { 14,  14,   7,   7}},
35105 	{m68k_op_adda_16_di          , 0xf1f8, 0xd0e8, { 16,  16,   7,   7}},
35106 	{m68k_op_adda_16_ix          , 0xf1f8, 0xd0f0, { 18,  18,   9,   9}},
35107 	{m68k_op_addx_8_rr           , 0xf1f8, 0xd100, {  4,   4,   2,   2}},
35108 	{m68k_op_addx_8_mm           , 0xf1f8, 0xd108, { 18,  18,  12,  12}},
35109 	{m68k_op_add_8_re_ai         , 0xf1f8, 0xd110, { 12,  12,   8,   8}},
35110 	{m68k_op_add_8_re_pi         , 0xf1f8, 0xd118, { 12,  12,   8,   8}},
35111 	{m68k_op_add_8_re_pd         , 0xf1f8, 0xd120, { 14,  14,   9,   9}},
35112 	{m68k_op_add_8_re_di         , 0xf1f8, 0xd128, { 16,  16,   9,   9}},
35113 	{m68k_op_add_8_re_ix         , 0xf1f8, 0xd130, { 18,  18,  11,  11}},
35114 	{m68k_op_addx_16_rr          , 0xf1f8, 0xd140, {  4,   4,   2,   2}},
35115 	{m68k_op_addx_16_mm          , 0xf1f8, 0xd148, { 18,  18,  12,  12}},
35116 	{m68k_op_add_16_re_ai        , 0xf1f8, 0xd150, { 12,  12,   8,   8}},
35117 	{m68k_op_add_16_re_pi        , 0xf1f8, 0xd158, { 12,  12,   8,   8}},
35118 	{m68k_op_add_16_re_pd        , 0xf1f8, 0xd160, { 14,  14,   9,   9}},
35119 	{m68k_op_add_16_re_di        , 0xf1f8, 0xd168, { 16,  16,   9,   9}},
35120 	{m68k_op_add_16_re_ix        , 0xf1f8, 0xd170, { 18,  18,  11,  11}},
35121 	{m68k_op_addx_32_rr          , 0xf1f8, 0xd180, {  8,   6,   2,   2}},
35122 	{m68k_op_addx_32_mm          , 0xf1f8, 0xd188, { 30,  30,  12,  12}},
35123 	{m68k_op_add_32_re_ai        , 0xf1f8, 0xd190, { 20,  20,   8,   8}},
35124 	{m68k_op_add_32_re_pi        , 0xf1f8, 0xd198, { 20,  20,   8,   8}},
35125 	{m68k_op_add_32_re_pd        , 0xf1f8, 0xd1a0, { 22,  22,   9,   9}},
35126 	{m68k_op_add_32_re_di        , 0xf1f8, 0xd1a8, { 24,  24,   9,   9}},
35127 	{m68k_op_add_32_re_ix        , 0xf1f8, 0xd1b0, { 26,  26,  11,  11}},
35128 	{m68k_op_adda_32_d           , 0xf1f8, 0xd1c0, {  8,   6,   2,   2}},
35129 	{m68k_op_adda_32_a           , 0xf1f8, 0xd1c8, {  8,   6,   2,   2}},
35130 	{m68k_op_adda_32_ai          , 0xf1f8, 0xd1d0, { 14,  14,   6,   6}},
35131 	{m68k_op_adda_32_pi          , 0xf1f8, 0xd1d8, { 14,  14,   6,   6}},
35132 	{m68k_op_adda_32_pd          , 0xf1f8, 0xd1e0, { 16,  16,   7,   7}},
35133 	{m68k_op_adda_32_di          , 0xf1f8, 0xd1e8, { 18,  18,   7,   7}},
35134 	{m68k_op_adda_32_ix          , 0xf1f8, 0xd1f0, { 20,  20,   9,   9}},
35135 	{m68k_op_asr_8_s             , 0xf1f8, 0xe000, {  6,   6,   6,   6}},
35136 	{m68k_op_lsr_8_s             , 0xf1f8, 0xe008, {  6,   6,   4,   4}},
35137 	{m68k_op_roxr_8_s            , 0xf1f8, 0xe010, {  6,   6,  12,  12}},
35138 	{m68k_op_ror_8_s             , 0xf1f8, 0xe018, {  6,   6,   8,   8}},
35139 	{m68k_op_asr_8_r             , 0xf1f8, 0xe020, {  6,   6,   6,   6}},
35140 	{m68k_op_lsr_8_r             , 0xf1f8, 0xe028, {  6,   6,   6,   6}},
35141 	{m68k_op_roxr_8_r            , 0xf1f8, 0xe030, {  6,   6,  12,  12}},
35142 	{m68k_op_ror_8_r             , 0xf1f8, 0xe038, {  6,   6,   8,   8}},
35143 	{m68k_op_asr_16_s            , 0xf1f8, 0xe040, {  6,   6,   6,   6}},
35144 	{m68k_op_lsr_16_s            , 0xf1f8, 0xe048, {  6,   6,   4,   4}},
35145 	{m68k_op_roxr_16_s           , 0xf1f8, 0xe050, {  6,   6,  12,  12}},
35146 	{m68k_op_ror_16_s            , 0xf1f8, 0xe058, {  6,   6,   8,   8}},
35147 	{m68k_op_asr_16_r            , 0xf1f8, 0xe060, {  6,   6,   6,   6}},
35148 	{m68k_op_lsr_16_r            , 0xf1f8, 0xe068, {  6,   6,   6,   6}},
35149 	{m68k_op_roxr_16_r           , 0xf1f8, 0xe070, {  6,   6,  12,  12}},
35150 	{m68k_op_ror_16_r            , 0xf1f8, 0xe078, {  6,   6,   8,   8}},
35151 	{m68k_op_asr_32_s            , 0xf1f8, 0xe080, {  8,   8,   6,   6}},
35152 	{m68k_op_lsr_32_s            , 0xf1f8, 0xe088, {  8,   8,   4,   4}},
35153 	{m68k_op_roxr_32_s           , 0xf1f8, 0xe090, {  8,   8,  12,  12}},
35154 	{m68k_op_ror_32_s            , 0xf1f8, 0xe098, {  8,   8,   8,   8}},
35155 	{m68k_op_asr_32_r            , 0xf1f8, 0xe0a0, {  8,   8,   6,   6}},
35156 	{m68k_op_lsr_32_r            , 0xf1f8, 0xe0a8, {  8,   8,   6,   6}},
35157 	{m68k_op_roxr_32_r           , 0xf1f8, 0xe0b0, {  8,   8,  12,  12}},
35158 	{m68k_op_ror_32_r            , 0xf1f8, 0xe0b8, {  8,   8,   8,   8}},
35159 	{m68k_op_asl_8_s             , 0xf1f8, 0xe100, {  6,   6,   8,   8}},
35160 	{m68k_op_lsl_8_s             , 0xf1f8, 0xe108, {  6,   6,   4,   4}},
35161 	{m68k_op_roxl_8_s            , 0xf1f8, 0xe110, {  6,   6,  12,  12}},
35162 	{m68k_op_rol_8_s             , 0xf1f8, 0xe118, {  6,   6,   8,   8}},
35163 	{m68k_op_asl_8_r             , 0xf1f8, 0xe120, {  6,   6,   8,   8}},
35164 	{m68k_op_lsl_8_r             , 0xf1f8, 0xe128, {  6,   6,   6,   6}},
35165 	{m68k_op_roxl_8_r            , 0xf1f8, 0xe130, {  6,   6,  12,  12}},
35166 	{m68k_op_rol_8_r             , 0xf1f8, 0xe138, {  6,   6,   8,   8}},
35167 	{m68k_op_asl_16_s            , 0xf1f8, 0xe140, {  6,   6,   8,   8}},
35168 	{m68k_op_lsl_16_s            , 0xf1f8, 0xe148, {  6,   6,   4,   4}},
35169 	{m68k_op_roxl_16_s           , 0xf1f8, 0xe150, {  6,   6,  12,  12}},
35170 	{m68k_op_rol_16_s            , 0xf1f8, 0xe158, {  6,   6,   8,   8}},
35171 	{m68k_op_asl_16_r            , 0xf1f8, 0xe160, {  6,   6,   8,   8}},
35172 	{m68k_op_lsl_16_r            , 0xf1f8, 0xe168, {  6,   6,   6,   6}},
35173 	{m68k_op_roxl_16_r           , 0xf1f8, 0xe170, {  6,   6,  12,  12}},
35174 	{m68k_op_rol_16_r            , 0xf1f8, 0xe178, {  6,   6,   8,   8}},
35175 	{m68k_op_asl_32_s            , 0xf1f8, 0xe180, {  8,   8,   8,   8}},
35176 	{m68k_op_lsl_32_s            , 0xf1f8, 0xe188, {  8,   8,   4,   4}},
35177 	{m68k_op_roxl_32_s           , 0xf1f8, 0xe190, {  8,   8,  12,  12}},
35178 	{m68k_op_rol_32_s            , 0xf1f8, 0xe198, {  8,   8,   8,   8}},
35179 	{m68k_op_asl_32_r            , 0xf1f8, 0xe1a0, {  8,   8,   8,   8}},
35180 	{m68k_op_lsl_32_r            , 0xf1f8, 0xe1a8, {  8,   8,   6,   6}},
35181 	{m68k_op_roxl_32_r           , 0xf1f8, 0xe1b0, {  8,   8,  12,  12}},
35182 	{m68k_op_rol_32_r            , 0xf1f8, 0xe1b8, {  8,   8,   8,   8}},
35183 	{m68k_op_cpdbcc_32           , 0xf1f8, 0xf048, {  0,   0,   4,   0}},
35184 	{m68k_op_cptrapcc_32         , 0xf1f8, 0xf078, {  0,   0,   4,   0}},
35185 	{m68k_op_rtm_32              , 0xfff0, 0x06c0, {  0,   0,  19,  19}},
35186 	{m68k_op_trap                , 0xfff0, 0x4e40, {  4,   4,   4,   4}},
35187 	{m68k_op_btst_8_r_pi7        , 0xf1ff, 0x011f, {  8,   8,   8,   8}},
35188 	{m68k_op_btst_8_r_pd7        , 0xf1ff, 0x0127, { 10,  10,   9,   9}},
35189 	{m68k_op_btst_8_r_aw         , 0xf1ff, 0x0138, { 12,  12,   8,   8}},
35190 	{m68k_op_btst_8_r_al         , 0xf1ff, 0x0139, { 16,  16,   8,   8}},
35191 	{m68k_op_btst_8_r_pcdi       , 0xf1ff, 0x013a, { 12,  12,   9,   9}},
35192 	{m68k_op_btst_8_r_pcix       , 0xf1ff, 0x013b, { 14,  14,  11,  11}},
35193 	{m68k_op_btst_8_r_i          , 0xf1ff, 0x013c, {  8,   8,   6,   6}},
35194 	{m68k_op_bchg_8_r_pi7        , 0xf1ff, 0x015f, { 12,  12,   8,   8}},
35195 	{m68k_op_bchg_8_r_pd7        , 0xf1ff, 0x0167, { 14,  14,   9,   9}},
35196 	{m68k_op_bchg_8_r_aw         , 0xf1ff, 0x0178, { 16,  16,   8,   8}},
35197 	{m68k_op_bchg_8_r_al         , 0xf1ff, 0x0179, { 20,  20,   8,   8}},
35198 	{m68k_op_bclr_8_r_pi7        , 0xf1ff, 0x019f, { 12,  14,   8,   8}},
35199 	{m68k_op_bclr_8_r_pd7        , 0xf1ff, 0x01a7, { 14,  16,   9,   9}},
35200 	{m68k_op_bclr_8_r_aw         , 0xf1ff, 0x01b8, { 16,  18,   8,   8}},
35201 	{m68k_op_bclr_8_r_al         , 0xf1ff, 0x01b9, { 20,  22,   8,   8}},
35202 	{m68k_op_bset_8_r_pi7        , 0xf1ff, 0x01df, { 12,  12,   8,   8}},
35203 	{m68k_op_bset_8_r_pd7        , 0xf1ff, 0x01e7, { 14,  14,   9,   9}},
35204 	{m68k_op_bset_8_r_aw         , 0xf1ff, 0x01f8, { 16,  16,   8,   8}},
35205 	{m68k_op_bset_8_r_al         , 0xf1ff, 0x01f9, { 20,  20,   8,   8}},
35206 	{m68k_op_move_8_d_pi7        , 0xf1ff, 0x101f, {  8,   8,   6,   6}},
35207 	{m68k_op_move_8_d_pd7        , 0xf1ff, 0x1027, { 10,  10,   7,   7}},
35208 	{m68k_op_move_8_d_aw         , 0xf1ff, 0x1038, { 12,  12,   6,   6}},
35209 	{m68k_op_move_8_d_al         , 0xf1ff, 0x1039, { 16,  16,   6,   6}},
35210 	{m68k_op_move_8_d_pcdi       , 0xf1ff, 0x103a, { 12,  12,   7,   7}},
35211 	{m68k_op_move_8_d_pcix       , 0xf1ff, 0x103b, { 14,  14,   9,   9}},
35212 	{m68k_op_move_8_d_i          , 0xf1ff, 0x103c, {  8,   8,   4,   4}},
35213 	{m68k_op_move_8_ai_pi7       , 0xf1ff, 0x109f, { 12,  12,   8,   8}},
35214 	{m68k_op_move_8_ai_pd7       , 0xf1ff, 0x10a7, { 14,  14,   9,   9}},
35215 	{m68k_op_move_8_ai_aw        , 0xf1ff, 0x10b8, { 16,  16,   8,   8}},
35216 	{m68k_op_move_8_ai_al        , 0xf1ff, 0x10b9, { 20,  20,   8,   8}},
35217 	{m68k_op_move_8_ai_pcdi      , 0xf1ff, 0x10ba, { 16,  16,   9,   9}},
35218 	{m68k_op_move_8_ai_pcix      , 0xf1ff, 0x10bb, { 18,  18,  11,  11}},
35219 	{m68k_op_move_8_ai_i         , 0xf1ff, 0x10bc, { 12,  12,   6,   6}},
35220 	{m68k_op_move_8_pi_pi7       , 0xf1ff, 0x10df, { 12,  12,   8,   8}},
35221 	{m68k_op_move_8_pi_pd7       , 0xf1ff, 0x10e7, { 14,  14,   9,   9}},
35222 	{m68k_op_move_8_pi_aw        , 0xf1ff, 0x10f8, { 16,  16,   8,   8}},
35223 	{m68k_op_move_8_pi_al        , 0xf1ff, 0x10f9, { 20,  20,   8,   8}},
35224 	{m68k_op_move_8_pi_pcdi      , 0xf1ff, 0x10fa, { 16,  16,   9,   9}},
35225 	{m68k_op_move_8_pi_pcix      , 0xf1ff, 0x10fb, { 18,  18,  11,  11}},
35226 	{m68k_op_move_8_pi_i         , 0xf1ff, 0x10fc, { 12,  12,   6,   6}},
35227 	{m68k_op_move_8_pd_pi7       , 0xf1ff, 0x111f, { 12,  12,   9,   9}},
35228 	{m68k_op_move_8_pd_pd7       , 0xf1ff, 0x1127, { 14,  14,  10,  10}},
35229 	{m68k_op_move_8_pd_aw        , 0xf1ff, 0x1138, { 16,  16,   9,   9}},
35230 	{m68k_op_move_8_pd_al        , 0xf1ff, 0x1139, { 20,  20,   9,   9}},
35231 	{m68k_op_move_8_pd_pcdi      , 0xf1ff, 0x113a, { 16,  16,  10,  10}},
35232 	{m68k_op_move_8_pd_pcix      , 0xf1ff, 0x113b, { 18,  18,  12,  12}},
35233 	{m68k_op_move_8_pd_i         , 0xf1ff, 0x113c, { 12,  12,   7,   7}},
35234 	{m68k_op_move_8_di_pi7       , 0xf1ff, 0x115f, { 16,  16,   9,   9}},
35235 	{m68k_op_move_8_di_pd7       , 0xf1ff, 0x1167, { 18,  18,  10,  10}},
35236 	{m68k_op_move_8_di_aw        , 0xf1ff, 0x1178, { 20,  20,   9,   9}},
35237 	{m68k_op_move_8_di_al        , 0xf1ff, 0x1179, { 24,  24,   9,   9}},
35238 	{m68k_op_move_8_di_pcdi      , 0xf1ff, 0x117a, { 20,  20,  10,  10}},
35239 	{m68k_op_move_8_di_pcix      , 0xf1ff, 0x117b, { 22,  22,  12,  12}},
35240 	{m68k_op_move_8_di_i         , 0xf1ff, 0x117c, { 16,  16,   7,   7}},
35241 	{m68k_op_move_8_ix_pi7       , 0xf1ff, 0x119f, { 18,  18,  11,  11}},
35242 	{m68k_op_move_8_ix_pd7       , 0xf1ff, 0x11a7, { 20,  20,  12,  12}},
35243 	{m68k_op_move_8_ix_aw        , 0xf1ff, 0x11b8, { 22,  22,  11,  11}},
35244 	{m68k_op_move_8_ix_al        , 0xf1ff, 0x11b9, { 26,  26,  11,  11}},
35245 	{m68k_op_move_8_ix_pcdi      , 0xf1ff, 0x11ba, { 22,  22,  12,  12}},
35246 	{m68k_op_move_8_ix_pcix      , 0xf1ff, 0x11bb, { 24,  24,  14,  14}},
35247 	{m68k_op_move_8_ix_i         , 0xf1ff, 0x11bc, { 18,  18,   9,   9}},
35248 	{m68k_op_move_32_d_aw        , 0xf1ff, 0x2038, { 16,  16,   6,   6}},
35249 	{m68k_op_move_32_d_al        , 0xf1ff, 0x2039, { 20,  20,   6,   6}},
35250 	{m68k_op_move_32_d_pcdi      , 0xf1ff, 0x203a, { 16,  16,   7,   7}},
35251 	{m68k_op_move_32_d_pcix      , 0xf1ff, 0x203b, { 18,  18,   9,   9}},
35252 	{m68k_op_move_32_d_i         , 0xf1ff, 0x203c, { 12,  12,   6,   6}},
35253 	{m68k_op_movea_32_aw         , 0xf1ff, 0x2078, { 16,  16,   6,   6}},
35254 	{m68k_op_movea_32_al         , 0xf1ff, 0x2079, { 20,  20,   6,   6}},
35255 	{m68k_op_movea_32_pcdi       , 0xf1ff, 0x207a, { 16,  16,   7,   7}},
35256 	{m68k_op_movea_32_pcix       , 0xf1ff, 0x207b, { 18,  18,   9,   9}},
35257 	{m68k_op_movea_32_i          , 0xf1ff, 0x207c, { 12,  12,   6,   6}},
35258 	{m68k_op_move_32_ai_aw       , 0xf1ff, 0x20b8, { 24,  24,   8,   8}},
35259 	{m68k_op_move_32_ai_al       , 0xf1ff, 0x20b9, { 28,  28,   8,   8}},
35260 	{m68k_op_move_32_ai_pcdi     , 0xf1ff, 0x20ba, { 24,  24,   9,   9}},
35261 	{m68k_op_move_32_ai_pcix     , 0xf1ff, 0x20bb, { 26,  26,  11,  11}},
35262 	{m68k_op_move_32_ai_i        , 0xf1ff, 0x20bc, { 20,  20,   8,   8}},
35263 	{m68k_op_move_32_pi_aw       , 0xf1ff, 0x20f8, { 24,  24,   8,   8}},
35264 	{m68k_op_move_32_pi_al       , 0xf1ff, 0x20f9, { 28,  28,   8,   8}},
35265 	{m68k_op_move_32_pi_pcdi     , 0xf1ff, 0x20fa, { 24,  24,   9,   9}},
35266 	{m68k_op_move_32_pi_pcix     , 0xf1ff, 0x20fb, { 26,  26,  11,  11}},
35267 	{m68k_op_move_32_pi_i        , 0xf1ff, 0x20fc, { 20,  20,   8,   8}},
35268 	{m68k_op_move_32_pd_aw       , 0xf1ff, 0x2138, { 24,  26,   9,   9}},
35269 	{m68k_op_move_32_pd_al       , 0xf1ff, 0x2139, { 28,  30,   9,   9}},
35270 	{m68k_op_move_32_pd_pcdi     , 0xf1ff, 0x213a, { 24,  26,  10,  10}},
35271 	{m68k_op_move_32_pd_pcix     , 0xf1ff, 0x213b, { 26,  28,  12,  12}},
35272 	{m68k_op_move_32_pd_i        , 0xf1ff, 0x213c, { 20,  22,   9,   9}},
35273 	{m68k_op_move_32_di_aw       , 0xf1ff, 0x2178, { 28,  28,   9,   9}},
35274 	{m68k_op_move_32_di_al       , 0xf1ff, 0x2179, { 32,  32,   9,   9}},
35275 	{m68k_op_move_32_di_pcdi     , 0xf1ff, 0x217a, { 28,  28,  10,  10}},
35276 	{m68k_op_move_32_di_pcix     , 0xf1ff, 0x217b, { 30,  30,  12,  12}},
35277 	{m68k_op_move_32_di_i        , 0xf1ff, 0x217c, { 24,  24,   9,   9}},
35278 	{m68k_op_move_32_ix_aw       , 0xf1ff, 0x21b8, { 30,  30,  11,  11}},
35279 	{m68k_op_move_32_ix_al       , 0xf1ff, 0x21b9, { 34,  34,  11,  11}},
35280 	{m68k_op_move_32_ix_pcdi     , 0xf1ff, 0x21ba, { 30,  30,  12,  12}},
35281 	{m68k_op_move_32_ix_pcix     , 0xf1ff, 0x21bb, { 32,  32,  14,  14}},
35282 	{m68k_op_move_32_ix_i        , 0xf1ff, 0x21bc, { 26,  26,  11,  11}},
35283 	{m68k_op_move_16_d_aw        , 0xf1ff, 0x3038, { 12,  12,   6,   6}},
35284 	{m68k_op_move_16_d_al        , 0xf1ff, 0x3039, { 16,  16,   6,   6}},
35285 	{m68k_op_move_16_d_pcdi      , 0xf1ff, 0x303a, { 12,  12,   7,   7}},
35286 	{m68k_op_move_16_d_pcix      , 0xf1ff, 0x303b, { 14,  14,   9,   9}},
35287 	{m68k_op_move_16_d_i         , 0xf1ff, 0x303c, {  8,   8,   4,   4}},
35288 	{m68k_op_movea_16_aw         , 0xf1ff, 0x3078, { 12,  12,   6,   6}},
35289 	{m68k_op_movea_16_al         , 0xf1ff, 0x3079, { 16,  16,   6,   6}},
35290 	{m68k_op_movea_16_pcdi       , 0xf1ff, 0x307a, { 12,  12,   7,   7}},
35291 	{m68k_op_movea_16_pcix       , 0xf1ff, 0x307b, { 14,  14,   9,   9}},
35292 	{m68k_op_movea_16_i          , 0xf1ff, 0x307c, {  8,   8,   4,   4}},
35293 	{m68k_op_move_16_ai_aw       , 0xf1ff, 0x30b8, { 16,  16,   8,   8}},
35294 	{m68k_op_move_16_ai_al       , 0xf1ff, 0x30b9, { 20,  20,   8,   8}},
35295 	{m68k_op_move_16_ai_pcdi     , 0xf1ff, 0x30ba, { 16,  16,   9,   9}},
35296 	{m68k_op_move_16_ai_pcix     , 0xf1ff, 0x30bb, { 18,  18,  11,  11}},
35297 	{m68k_op_move_16_ai_i        , 0xf1ff, 0x30bc, { 12,  12,   6,   6}},
35298 	{m68k_op_move_16_pi_aw       , 0xf1ff, 0x30f8, { 16,  16,   8,   8}},
35299 	{m68k_op_move_16_pi_al       , 0xf1ff, 0x30f9, { 20,  20,   8,   8}},
35300 	{m68k_op_move_16_pi_pcdi     , 0xf1ff, 0x30fa, { 16,  16,   9,   9}},
35301 	{m68k_op_move_16_pi_pcix     , 0xf1ff, 0x30fb, { 18,  18,  11,  11}},
35302 	{m68k_op_move_16_pi_i        , 0xf1ff, 0x30fc, { 12,  12,   6,   6}},
35303 	{m68k_op_move_16_pd_aw       , 0xf1ff, 0x3138, { 16,  16,   9,   9}},
35304 	{m68k_op_move_16_pd_al       , 0xf1ff, 0x3139, { 20,  20,   9,   9}},
35305 	{m68k_op_move_16_pd_pcdi     , 0xf1ff, 0x313a, { 16,  16,  10,  10}},
35306 	{m68k_op_move_16_pd_pcix     , 0xf1ff, 0x313b, { 18,  18,  12,  12}},
35307 	{m68k_op_move_16_pd_i        , 0xf1ff, 0x313c, { 12,  12,   7,   7}},
35308 	{m68k_op_move_16_di_aw       , 0xf1ff, 0x3178, { 20,  20,   9,   9}},
35309 	{m68k_op_move_16_di_al       , 0xf1ff, 0x3179, { 24,  24,   9,   9}},
35310 	{m68k_op_move_16_di_pcdi     , 0xf1ff, 0x317a, { 20,  20,  10,  10}},
35311 	{m68k_op_move_16_di_pcix     , 0xf1ff, 0x317b, { 22,  22,  12,  12}},
35312 	{m68k_op_move_16_di_i        , 0xf1ff, 0x317c, { 16,  16,   7,   7}},
35313 	{m68k_op_move_16_ix_aw       , 0xf1ff, 0x31b8, { 22,  22,  11,  11}},
35314 	{m68k_op_move_16_ix_al       , 0xf1ff, 0x31b9, { 26,  26,  11,  11}},
35315 	{m68k_op_move_16_ix_pcdi     , 0xf1ff, 0x31ba, { 22,  22,  12,  12}},
35316 	{m68k_op_move_16_ix_pcix     , 0xf1ff, 0x31bb, { 24,  24,  14,  14}},
35317 	{m68k_op_move_16_ix_i        , 0xf1ff, 0x31bc, { 18,  18,   9,   9}},
35318 	{m68k_op_chk_32_aw           , 0xf1ff, 0x4138, {  0,   0,  12,  12}},
35319 	{m68k_op_chk_32_al           , 0xf1ff, 0x4139, {  0,   0,  12,  12}},
35320 	{m68k_op_chk_32_pcdi         , 0xf1ff, 0x413a, {  0,   0,  13,  13}},
35321 	{m68k_op_chk_32_pcix         , 0xf1ff, 0x413b, {  0,   0,  15,  15}},
35322 	{m68k_op_chk_32_i            , 0xf1ff, 0x413c, {  0,   0,  12,  12}},
35323 	{m68k_op_chk_16_aw           , 0xf1ff, 0x41b8, { 18,  16,  12,  12}},
35324 	{m68k_op_chk_16_al           , 0xf1ff, 0x41b9, { 22,  20,  12,  12}},
35325 	{m68k_op_chk_16_pcdi         , 0xf1ff, 0x41ba, { 18,  16,  13,  13}},
35326 	{m68k_op_chk_16_pcix         , 0xf1ff, 0x41bb, { 20,  18,  15,  15}},
35327 	{m68k_op_chk_16_i            , 0xf1ff, 0x41bc, { 14,  12,  10,  10}},
35328 	{m68k_op_lea_32_aw           , 0xf1ff, 0x41f8, {  8,   8,   6,   6}},
35329 	{m68k_op_lea_32_al           , 0xf1ff, 0x41f9, { 12,  12,   6,   6}},
35330 	{m68k_op_lea_32_pcdi         , 0xf1ff, 0x41fa, {  8,   8,   7,   7}},
35331 	{m68k_op_lea_32_pcix         , 0xf1ff, 0x41fb, { 12,  12,   9,   9}},
35332 	{m68k_op_addq_8_pi7          , 0xf1ff, 0x501f, { 12,  12,   8,   8}},
35333 	{m68k_op_addq_8_pd7          , 0xf1ff, 0x5027, { 14,  14,   9,   9}},
35334 	{m68k_op_addq_8_aw           , 0xf1ff, 0x5038, { 16,  16,   8,   8}},
35335 	{m68k_op_addq_8_al           , 0xf1ff, 0x5039, { 20,  20,   8,   8}},
35336 	{m68k_op_addq_16_aw          , 0xf1ff, 0x5078, { 16,  16,   8,   8}},
35337 	{m68k_op_addq_16_al          , 0xf1ff, 0x5079, { 20,  20,   8,   8}},
35338 	{m68k_op_addq_32_aw          , 0xf1ff, 0x50b8, { 24,  24,   8,   8}},
35339 	{m68k_op_addq_32_al          , 0xf1ff, 0x50b9, { 28,  28,   8,   8}},
35340 	{m68k_op_subq_8_pi7          , 0xf1ff, 0x511f, { 12,  12,   8,   8}},
35341 	{m68k_op_subq_8_pd7          , 0xf1ff, 0x5127, { 14,  14,   9,   9}},
35342 	{m68k_op_subq_8_aw           , 0xf1ff, 0x5138, { 16,  16,   8,   8}},
35343 	{m68k_op_subq_8_al           , 0xf1ff, 0x5139, { 20,  20,   8,   8}},
35344 	{m68k_op_subq_16_aw          , 0xf1ff, 0x5178, { 16,  16,   8,   8}},
35345 	{m68k_op_subq_16_al          , 0xf1ff, 0x5179, { 20,  20,   8,   8}},
35346 	{m68k_op_subq_32_aw          , 0xf1ff, 0x51b8, { 24,  24,   8,   8}},
35347 	{m68k_op_subq_32_al          , 0xf1ff, 0x51b9, { 28,  28,   8,   8}},
35348 	{m68k_op_or_8_er_pi7         , 0xf1ff, 0x801f, {  8,   8,   6,   6}},
35349 	{m68k_op_or_8_er_pd7         , 0xf1ff, 0x8027, { 10,  10,   7,   7}},
35350 	{m68k_op_or_8_er_aw          , 0xf1ff, 0x8038, { 12,  12,   6,   6}},
35351 	{m68k_op_or_8_er_al          , 0xf1ff, 0x8039, { 16,  16,   6,   6}},
35352 	{m68k_op_or_8_er_pcdi        , 0xf1ff, 0x803a, { 12,  12,   7,   7}},
35353 	{m68k_op_or_8_er_pcix        , 0xf1ff, 0x803b, { 14,  14,   9,   9}},
35354 	{m68k_op_or_8_er_i           , 0xf1ff, 0x803c, {  8,   8,   4,   4}},
35355 	{m68k_op_or_16_er_aw         , 0xf1ff, 0x8078, { 12,  12,   6,   6}},
35356 	{m68k_op_or_16_er_al         , 0xf1ff, 0x8079, { 16,  16,   6,   6}},
35357 	{m68k_op_or_16_er_pcdi       , 0xf1ff, 0x807a, { 12,  12,   7,   7}},
35358 	{m68k_op_or_16_er_pcix       , 0xf1ff, 0x807b, { 14,  14,   9,   9}},
35359 	{m68k_op_or_16_er_i          , 0xf1ff, 0x807c, {  8,   8,   4,   4}},
35360 	{m68k_op_or_32_er_aw         , 0xf1ff, 0x80b8, { 18,  18,   6,   6}},
35361 	{m68k_op_or_32_er_al         , 0xf1ff, 0x80b9, { 22,  22,   6,   6}},
35362 	{m68k_op_or_32_er_pcdi       , 0xf1ff, 0x80ba, { 18,  18,   7,   7}},
35363 	{m68k_op_or_32_er_pcix       , 0xf1ff, 0x80bb, { 20,  20,   9,   9}},
35364 	{m68k_op_or_32_er_i          , 0xf1ff, 0x80bc, { 16,  14,   6,   6}},
35365 	{m68k_op_divu_16_aw          , 0xf1ff, 0x80f8, {148, 116,  48,  48}},
35366 	{m68k_op_divu_16_al          , 0xf1ff, 0x80f9, {152, 120,  48,  48}},
35367 	{m68k_op_divu_16_pcdi        , 0xf1ff, 0x80fa, {148, 116,  49,  49}},
35368 	{m68k_op_divu_16_pcix        , 0xf1ff, 0x80fb, {150, 118,  51,  51}},
35369 	{m68k_op_divu_16_i           , 0xf1ff, 0x80fc, {144, 112,  46,  46}},
35370 	{m68k_op_sbcd_8_mm_ay7       , 0xf1ff, 0x810f, { 18,  18,  16,  16}},
35371 	{m68k_op_or_8_re_pi7         , 0xf1ff, 0x811f, { 12,  12,   8,   8}},
35372 	{m68k_op_or_8_re_pd7         , 0xf1ff, 0x8127, { 14,  14,   9,   9}},
35373 	{m68k_op_or_8_re_aw          , 0xf1ff, 0x8138, { 16,  16,   8,   8}},
35374 	{m68k_op_or_8_re_al          , 0xf1ff, 0x8139, { 20,  20,   8,   8}},
35375 	{m68k_op_pack_16_mm_ay7      , 0xf1ff, 0x814f, {  0,   0,  13,  13}},
35376 	{m68k_op_or_16_re_aw         , 0xf1ff, 0x8178, { 16,  16,   8,   8}},
35377 	{m68k_op_or_16_re_al         , 0xf1ff, 0x8179, { 20,  20,   8,   8}},
35378 	{m68k_op_unpk_16_mm_ay7      , 0xf1ff, 0x818f, {  0,   0,  13,  13}},
35379 	{m68k_op_or_32_re_aw         , 0xf1ff, 0x81b8, { 24,  24,   8,   8}},
35380 	{m68k_op_or_32_re_al         , 0xf1ff, 0x81b9, { 28,  28,   8,   8}},
35381 	{m68k_op_divs_16_aw          , 0xf1ff, 0x81f8, {166, 130,  60,  60}},
35382 	{m68k_op_divs_16_al          , 0xf1ff, 0x81f9, {170, 134,  60,  60}},
35383 	{m68k_op_divs_16_pcdi        , 0xf1ff, 0x81fa, {166, 130,  61,  61}},
35384 	{m68k_op_divs_16_pcix        , 0xf1ff, 0x81fb, {168, 132,  63,  63}},
35385 	{m68k_op_divs_16_i           , 0xf1ff, 0x81fc, {162, 126,  58,  58}},
35386 	{m68k_op_sub_8_er_pi7        , 0xf1ff, 0x901f, {  8,   8,   6,   6}},
35387 	{m68k_op_sub_8_er_pd7        , 0xf1ff, 0x9027, { 10,  10,   7,   7}},
35388 	{m68k_op_sub_8_er_aw         , 0xf1ff, 0x9038, { 12,  12,   6,   6}},
35389 	{m68k_op_sub_8_er_al         , 0xf1ff, 0x9039, { 16,  16,   6,   6}},
35390 	{m68k_op_sub_8_er_pcdi       , 0xf1ff, 0x903a, { 12,  12,   7,   7}},
35391 	{m68k_op_sub_8_er_pcix       , 0xf1ff, 0x903b, { 14,  14,   9,   9}},
35392 	{m68k_op_sub_8_er_i          , 0xf1ff, 0x903c, {  8,   8,   4,   4}},
35393 	{m68k_op_sub_16_er_aw        , 0xf1ff, 0x9078, { 12,  12,   6,   6}},
35394 	{m68k_op_sub_16_er_al        , 0xf1ff, 0x9079, { 16,  16,   6,   6}},
35395 	{m68k_op_sub_16_er_pcdi      , 0xf1ff, 0x907a, { 12,  12,   7,   7}},
35396 	{m68k_op_sub_16_er_pcix      , 0xf1ff, 0x907b, { 14,  14,   9,   9}},
35397 	{m68k_op_sub_16_er_i         , 0xf1ff, 0x907c, {  8,   8,   4,   4}},
35398 	{m68k_op_sub_32_er_aw        , 0xf1ff, 0x90b8, { 18,  18,   6,   6}},
35399 	{m68k_op_sub_32_er_al        , 0xf1ff, 0x90b9, { 22,  22,   6,   6}},
35400 	{m68k_op_sub_32_er_pcdi      , 0xf1ff, 0x90ba, { 18,  18,   7,   7}},
35401 	{m68k_op_sub_32_er_pcix      , 0xf1ff, 0x90bb, { 20,  20,   9,   9}},
35402 	{m68k_op_sub_32_er_i         , 0xf1ff, 0x90bc, { 16,  14,   6,   6}},
35403 	{m68k_op_suba_16_aw          , 0xf1ff, 0x90f8, { 16,  16,   6,   6}},
35404 	{m68k_op_suba_16_al          , 0xf1ff, 0x90f9, { 20,  20,   6,   6}},
35405 	{m68k_op_suba_16_pcdi        , 0xf1ff, 0x90fa, { 16,  16,   7,   7}},
35406 	{m68k_op_suba_16_pcix        , 0xf1ff, 0x90fb, { 18,  18,   9,   9}},
35407 	{m68k_op_suba_16_i           , 0xf1ff, 0x90fc, { 12,  12,   4,   4}},
35408 	{m68k_op_subx_8_mm_ay7       , 0xf1ff, 0x910f, { 18,  18,  12,  12}},
35409 	{m68k_op_sub_8_re_pi7        , 0xf1ff, 0x911f, { 12,  12,   8,   8}},
35410 	{m68k_op_sub_8_re_pd7        , 0xf1ff, 0x9127, { 14,  14,   9,   9}},
35411 	{m68k_op_sub_8_re_aw         , 0xf1ff, 0x9138, { 16,  16,   8,   8}},
35412 	{m68k_op_sub_8_re_al         , 0xf1ff, 0x9139, { 20,  20,   8,   8}},
35413 	{m68k_op_sub_16_re_aw        , 0xf1ff, 0x9178, { 16,  16,   8,   8}},
35414 	{m68k_op_sub_16_re_al        , 0xf1ff, 0x9179, { 20,  20,   8,   8}},
35415 	{m68k_op_sub_32_re_aw        , 0xf1ff, 0x91b8, { 24,  24,   8,   8}},
35416 	{m68k_op_sub_32_re_al        , 0xf1ff, 0x91b9, { 28,  28,   8,   8}},
35417 	{m68k_op_suba_32_aw          , 0xf1ff, 0x91f8, { 18,  18,   6,   6}},
35418 	{m68k_op_suba_32_al          , 0xf1ff, 0x91f9, { 22,  22,   6,   6}},
35419 	{m68k_op_suba_32_pcdi        , 0xf1ff, 0x91fa, { 18,  18,   7,   7}},
35420 	{m68k_op_suba_32_pcix        , 0xf1ff, 0x91fb, { 20,  20,   9,   9}},
35421 	{m68k_op_suba_32_i           , 0xf1ff, 0x91fc, { 16,  14,   6,   6}},
35422 	{m68k_op_cmp_8_pi7           , 0xf1ff, 0xb01f, {  8,   8,   6,   6}},
35423 	{m68k_op_cmp_8_pd7           , 0xf1ff, 0xb027, { 10,  10,   7,   7}},
35424 	{m68k_op_cmp_8_aw            , 0xf1ff, 0xb038, { 12,  12,   6,   6}},
35425 	{m68k_op_cmp_8_al            , 0xf1ff, 0xb039, { 16,  16,   6,   6}},
35426 	{m68k_op_cmp_8_pcdi          , 0xf1ff, 0xb03a, { 12,  12,   7,   7}},
35427 	{m68k_op_cmp_8_pcix          , 0xf1ff, 0xb03b, { 14,  14,   9,   9}},
35428 	{m68k_op_cmp_8_i             , 0xf1ff, 0xb03c, {  8,   8,   4,   4}},
35429 	{m68k_op_cmp_16_aw           , 0xf1ff, 0xb078, { 12,  12,   6,   6}},
35430 	{m68k_op_cmp_16_al           , 0xf1ff, 0xb079, { 16,  16,   6,   6}},
35431 	{m68k_op_cmp_16_pcdi         , 0xf1ff, 0xb07a, { 12,  12,   7,   7}},
35432 	{m68k_op_cmp_16_pcix         , 0xf1ff, 0xb07b, { 14,  14,   9,   9}},
35433 	{m68k_op_cmp_16_i            , 0xf1ff, 0xb07c, {  8,   8,   4,   4}},
35434 	{m68k_op_cmp_32_aw           , 0xf1ff, 0xb0b8, { 18,  18,   6,   6}},
35435 	{m68k_op_cmp_32_al           , 0xf1ff, 0xb0b9, { 22,  22,   6,   6}},
35436 	{m68k_op_cmp_32_pcdi         , 0xf1ff, 0xb0ba, { 18,  18,   7,   7}},
35437 	{m68k_op_cmp_32_pcix         , 0xf1ff, 0xb0bb, { 20,  20,   9,   9}},
35438 	{m68k_op_cmp_32_i            , 0xf1ff, 0xb0bc, { 14,  14,   6,   6}},
35439 	{m68k_op_cmpa_16_aw          , 0xf1ff, 0xb0f8, { 14,  14,   8,   8}},
35440 	{m68k_op_cmpa_16_al          , 0xf1ff, 0xb0f9, { 18,  18,   8,   8}},
35441 	{m68k_op_cmpa_16_pcdi        , 0xf1ff, 0xb0fa, { 14,  14,   9,   9}},
35442 	{m68k_op_cmpa_16_pcix        , 0xf1ff, 0xb0fb, { 16,  16,  11,  11}},
35443 	{m68k_op_cmpa_16_i           , 0xf1ff, 0xb0fc, { 10,  10,   6,   6}},
35444 	{m68k_op_cmpm_8_ay7          , 0xf1ff, 0xb10f, { 12,  12,   9,   9}},
35445 	{m68k_op_eor_8_pi7           , 0xf1ff, 0xb11f, { 12,  12,   8,   8}},
35446 	{m68k_op_eor_8_pd7           , 0xf1ff, 0xb127, { 14,  14,   9,   9}},
35447 	{m68k_op_eor_8_aw            , 0xf1ff, 0xb138, { 16,  16,   8,   8}},
35448 	{m68k_op_eor_8_al            , 0xf1ff, 0xb139, { 20,  20,   8,   8}},
35449 	{m68k_op_eor_16_aw           , 0xf1ff, 0xb178, { 16,  16,   8,   8}},
35450 	{m68k_op_eor_16_al           , 0xf1ff, 0xb179, { 20,  20,   8,   8}},
35451 	{m68k_op_eor_32_aw           , 0xf1ff, 0xb1b8, { 24,  24,   8,   8}},
35452 	{m68k_op_eor_32_al           , 0xf1ff, 0xb1b9, { 28,  28,   8,   8}},
35453 	{m68k_op_cmpa_32_aw          , 0xf1ff, 0xb1f8, { 18,  18,   8,   8}},
35454 	{m68k_op_cmpa_32_al          , 0xf1ff, 0xb1f9, { 22,  22,   8,   8}},
35455 	{m68k_op_cmpa_32_pcdi        , 0xf1ff, 0xb1fa, { 18,  18,   9,   9}},
35456 	{m68k_op_cmpa_32_pcix        , 0xf1ff, 0xb1fb, { 20,  20,  11,  11}},
35457 	{m68k_op_cmpa_32_i           , 0xf1ff, 0xb1fc, { 14,  14,   8,   8}},
35458 	{m68k_op_and_8_er_pi7        , 0xf1ff, 0xc01f, {  8,   8,   6,   6}},
35459 	{m68k_op_and_8_er_pd7        , 0xf1ff, 0xc027, { 10,  10,   7,   7}},
35460 	{m68k_op_and_8_er_aw         , 0xf1ff, 0xc038, { 12,  12,   6,   6}},
35461 	{m68k_op_and_8_er_al         , 0xf1ff, 0xc039, { 16,  16,   6,   6}},
35462 	{m68k_op_and_8_er_pcdi       , 0xf1ff, 0xc03a, { 12,  12,   7,   7}},
35463 	{m68k_op_and_8_er_pcix       , 0xf1ff, 0xc03b, { 14,  14,   9,   9}},
35464 	{m68k_op_and_8_er_i          , 0xf1ff, 0xc03c, {  8,   8,   4,   4}},
35465 	{m68k_op_and_16_er_aw        , 0xf1ff, 0xc078, { 12,  12,   6,   6}},
35466 	{m68k_op_and_16_er_al        , 0xf1ff, 0xc079, { 16,  16,   6,   6}},
35467 	{m68k_op_and_16_er_pcdi      , 0xf1ff, 0xc07a, { 12,  12,   7,   7}},
35468 	{m68k_op_and_16_er_pcix      , 0xf1ff, 0xc07b, { 14,  14,   9,   9}},
35469 	{m68k_op_and_16_er_i         , 0xf1ff, 0xc07c, {  8,   8,   4,   4}},
35470 	{m68k_op_and_32_er_aw        , 0xf1ff, 0xc0b8, { 18,  18,   6,   6}},
35471 	{m68k_op_and_32_er_al        , 0xf1ff, 0xc0b9, { 22,  22,   6,   6}},
35472 	{m68k_op_and_32_er_pcdi      , 0xf1ff, 0xc0ba, { 18,  18,   7,   7}},
35473 	{m68k_op_and_32_er_pcix      , 0xf1ff, 0xc0bb, { 20,  20,   9,   9}},
35474 	{m68k_op_and_32_er_i         , 0xf1ff, 0xc0bc, { 16,  14,   6,   6}},
35475 	{m68k_op_mulu_16_aw          , 0xf1ff, 0xc0f8, { 62,  38,  31,  31}},
35476 	{m68k_op_mulu_16_al          , 0xf1ff, 0xc0f9, { 66,  42,  31,  31}},
35477 	{m68k_op_mulu_16_pcdi        , 0xf1ff, 0xc0fa, { 62,  38,  32,  32}},
35478 	{m68k_op_mulu_16_pcix        , 0xf1ff, 0xc0fb, { 64,  40,  34,  34}},
35479 	{m68k_op_mulu_16_i           , 0xf1ff, 0xc0fc, { 58,  34,  29,  29}},
35480 	{m68k_op_abcd_8_mm_ay7       , 0xf1ff, 0xc10f, { 18,  18,  16,  16}},
35481 	{m68k_op_and_8_re_pi7        , 0xf1ff, 0xc11f, { 12,  12,   8,   8}},
35482 	{m68k_op_and_8_re_pd7        , 0xf1ff, 0xc127, { 14,  14,   9,   9}},
35483 	{m68k_op_and_8_re_aw         , 0xf1ff, 0xc138, { 16,  16,   8,   8}},
35484 	{m68k_op_and_8_re_al         , 0xf1ff, 0xc139, { 20,  20,   8,   8}},
35485 	{m68k_op_and_16_re_aw        , 0xf1ff, 0xc178, { 16,  16,   8,   8}},
35486 	{m68k_op_and_16_re_al        , 0xf1ff, 0xc179, { 20,  20,   8,   8}},
35487 	{m68k_op_and_32_re_aw        , 0xf1ff, 0xc1b8, { 24,  24,   8,   8}},
35488 	{m68k_op_and_32_re_al        , 0xf1ff, 0xc1b9, { 28,  28,   8,   8}},
35489 	{m68k_op_muls_16_aw          , 0xf1ff, 0xc1f8, { 62,  40,  31,  31}},
35490 	{m68k_op_muls_16_al          , 0xf1ff, 0xc1f9, { 66,  44,  31,  31}},
35491 	{m68k_op_muls_16_pcdi        , 0xf1ff, 0xc1fa, { 62,  40,  32,  32}},
35492 	{m68k_op_muls_16_pcix        , 0xf1ff, 0xc1fb, { 64,  42,  34,  34}},
35493 	{m68k_op_muls_16_i           , 0xf1ff, 0xc1fc, { 58,  36,  29,  29}},
35494 	{m68k_op_add_8_er_pi7        , 0xf1ff, 0xd01f, {  8,   8,   6,   6}},
35495 	{m68k_op_add_8_er_pd7        , 0xf1ff, 0xd027, { 10,  10,   7,   7}},
35496 	{m68k_op_add_8_er_aw         , 0xf1ff, 0xd038, { 12,  12,   6,   6}},
35497 	{m68k_op_add_8_er_al         , 0xf1ff, 0xd039, { 16,  16,   6,   6}},
35498 	{m68k_op_add_8_er_pcdi       , 0xf1ff, 0xd03a, { 12,  12,   7,   7}},
35499 	{m68k_op_add_8_er_pcix       , 0xf1ff, 0xd03b, { 14,  14,   9,   9}},
35500 	{m68k_op_add_8_er_i          , 0xf1ff, 0xd03c, {  8,   8,   4,   4}},
35501 	{m68k_op_add_16_er_aw        , 0xf1ff, 0xd078, { 12,  12,   6,   6}},
35502 	{m68k_op_add_16_er_al        , 0xf1ff, 0xd079, { 16,  16,   6,   6}},
35503 	{m68k_op_add_16_er_pcdi      , 0xf1ff, 0xd07a, { 12,  12,   7,   7}},
35504 	{m68k_op_add_16_er_pcix      , 0xf1ff, 0xd07b, { 14,  14,   9,   9}},
35505 	{m68k_op_add_16_er_i         , 0xf1ff, 0xd07c, {  8,   8,   4,   4}},
35506 	{m68k_op_add_32_er_aw        , 0xf1ff, 0xd0b8, { 18,  18,   6,   6}},
35507 	{m68k_op_add_32_er_al        , 0xf1ff, 0xd0b9, { 22,  22,   6,   6}},
35508 	{m68k_op_add_32_er_pcdi      , 0xf1ff, 0xd0ba, { 18,  18,   7,   7}},
35509 	{m68k_op_add_32_er_pcix      , 0xf1ff, 0xd0bb, { 20,  20,   9,   9}},
35510 	{m68k_op_add_32_er_i         , 0xf1ff, 0xd0bc, { 16,  14,   6,   6}},
35511 	{m68k_op_adda_16_aw          , 0xf1ff, 0xd0f8, { 16,  16,   6,   6}},
35512 	{m68k_op_adda_16_al          , 0xf1ff, 0xd0f9, { 20,  20,   6,   6}},
35513 	{m68k_op_adda_16_pcdi        , 0xf1ff, 0xd0fa, { 16,  16,   7,   7}},
35514 	{m68k_op_adda_16_pcix        , 0xf1ff, 0xd0fb, { 18,  18,   9,   9}},
35515 	{m68k_op_adda_16_i           , 0xf1ff, 0xd0fc, { 12,  12,   4,   4}},
35516 	{m68k_op_addx_8_mm_ay7       , 0xf1ff, 0xd10f, { 18,  18,  12,  12}},
35517 	{m68k_op_add_8_re_pi7        , 0xf1ff, 0xd11f, { 12,  12,   8,   8}},
35518 	{m68k_op_add_8_re_pd7        , 0xf1ff, 0xd127, { 14,  14,   9,   9}},
35519 	{m68k_op_add_8_re_aw         , 0xf1ff, 0xd138, { 16,  16,   8,   8}},
35520 	{m68k_op_add_8_re_al         , 0xf1ff, 0xd139, { 20,  20,   8,   8}},
35521 	{m68k_op_add_16_re_aw        , 0xf1ff, 0xd178, { 16,  16,   8,   8}},
35522 	{m68k_op_add_16_re_al        , 0xf1ff, 0xd179, { 20,  20,   8,   8}},
35523 	{m68k_op_add_32_re_aw        , 0xf1ff, 0xd1b8, { 24,  24,   8,   8}},
35524 	{m68k_op_add_32_re_al        , 0xf1ff, 0xd1b9, { 28,  28,   8,   8}},
35525 	{m68k_op_adda_32_aw          , 0xf1ff, 0xd1f8, { 18,  18,   6,   6}},
35526 	{m68k_op_adda_32_al          , 0xf1ff, 0xd1f9, { 22,  22,   6,   6}},
35527 	{m68k_op_adda_32_pcdi        , 0xf1ff, 0xd1fa, { 18,  18,   7,   7}},
35528 	{m68k_op_adda_32_pcix        , 0xf1ff, 0xd1fb, { 20,  20,   9,   9}},
35529 	{m68k_op_adda_32_i           , 0xf1ff, 0xd1fc, { 16,  14,   6,   6}},
35530 	{m68k_op_ori_8_d             , 0xfff8, 0x0000, {  8,   8,   2,   2}},
35531 	{m68k_op_ori_8_ai            , 0xfff8, 0x0010, { 16,  16,   8,   8}},
35532 	{m68k_op_ori_8_pi            , 0xfff8, 0x0018, { 16,  16,   8,   8}},
35533 	{m68k_op_ori_8_pd            , 0xfff8, 0x0020, { 18,  18,   9,   9}},
35534 	{m68k_op_ori_8_di            , 0xfff8, 0x0028, { 20,  20,   9,   9}},
35535 	{m68k_op_ori_8_ix            , 0xfff8, 0x0030, { 22,  22,  11,  11}},
35536 	{m68k_op_ori_16_d            , 0xfff8, 0x0040, {  8,   8,   2,   2}},
35537 	{m68k_op_ori_16_ai           , 0xfff8, 0x0050, { 16,  16,   8,   8}},
35538 	{m68k_op_ori_16_pi           , 0xfff8, 0x0058, { 16,  16,   8,   8}},
35539 	{m68k_op_ori_16_pd           , 0xfff8, 0x0060, { 18,  18,   9,   9}},
35540 	{m68k_op_ori_16_di           , 0xfff8, 0x0068, { 20,  20,   9,   9}},
35541 	{m68k_op_ori_16_ix           , 0xfff8, 0x0070, { 22,  22,  11,  11}},
35542 	{m68k_op_ori_32_d            , 0xfff8, 0x0080, { 16,  14,   2,   2}},
35543 	{m68k_op_ori_32_ai           , 0xfff8, 0x0090, { 28,  28,   8,   8}},
35544 	{m68k_op_ori_32_pi           , 0xfff8, 0x0098, { 28,  28,   8,   8}},
35545 	{m68k_op_ori_32_pd           , 0xfff8, 0x00a0, { 30,  30,   9,   9}},
35546 	{m68k_op_ori_32_di           , 0xfff8, 0x00a8, { 32,  32,   9,   9}},
35547 	{m68k_op_ori_32_ix           , 0xfff8, 0x00b0, { 34,  34,  11,  11}},
35548 	{m68k_op_chk2cmp2_8_ai       , 0xfff8, 0x00d0, {  0,   0,  22,  22}},
35549 	{m68k_op_chk2cmp2_8_di       , 0xfff8, 0x00e8, {  0,   0,  23,  23}},
35550 	{m68k_op_chk2cmp2_8_ix       , 0xfff8, 0x00f0, {  0,   0,  25,  25}},
35551 	{m68k_op_andi_8_d            , 0xfff8, 0x0200, {  8,   8,   2,   2}},
35552 	{m68k_op_andi_8_ai           , 0xfff8, 0x0210, { 16,  16,   8,   8}},
35553 	{m68k_op_andi_8_pi           , 0xfff8, 0x0218, { 16,  16,   8,   8}},
35554 	{m68k_op_andi_8_pd           , 0xfff8, 0x0220, { 18,  18,   9,   9}},
35555 	{m68k_op_andi_8_di           , 0xfff8, 0x0228, { 20,  20,   9,   9}},
35556 	{m68k_op_andi_8_ix           , 0xfff8, 0x0230, { 22,  22,  11,  11}},
35557 	{m68k_op_andi_16_d           , 0xfff8, 0x0240, {  8,   8,   2,   2}},
35558 	{m68k_op_andi_16_ai          , 0xfff8, 0x0250, { 16,  16,   8,   8}},
35559 	{m68k_op_andi_16_pi          , 0xfff8, 0x0258, { 16,  16,   8,   8}},
35560 	{m68k_op_andi_16_pd          , 0xfff8, 0x0260, { 18,  18,   9,   9}},
35561 	{m68k_op_andi_16_di          , 0xfff8, 0x0268, { 20,  20,   9,   9}},
35562 	{m68k_op_andi_16_ix          , 0xfff8, 0x0270, { 22,  22,  11,  11}},
35563 	{m68k_op_andi_32_d           , 0xfff8, 0x0280, { 14,  14,   2,   2}},
35564 	{m68k_op_andi_32_ai          , 0xfff8, 0x0290, { 28,  28,   8,   8}},
35565 	{m68k_op_andi_32_pi          , 0xfff8, 0x0298, { 28,  28,   8,   8}},
35566 	{m68k_op_andi_32_pd          , 0xfff8, 0x02a0, { 30,  30,   9,   9}},
35567 	{m68k_op_andi_32_di          , 0xfff8, 0x02a8, { 32,  32,   9,   9}},
35568 	{m68k_op_andi_32_ix          , 0xfff8, 0x02b0, { 34,  34,  11,  11}},
35569 	{m68k_op_chk2cmp2_16_ai      , 0xfff8, 0x02d0, {  0,   0,  22,  22}},
35570 	{m68k_op_chk2cmp2_16_di      , 0xfff8, 0x02e8, {  0,   0,  23,  23}},
35571 	{m68k_op_chk2cmp2_16_ix      , 0xfff8, 0x02f0, {  0,   0,  25,  25}},
35572 	{m68k_op_subi_8_d            , 0xfff8, 0x0400, {  8,   8,   2,   2}},
35573 	{m68k_op_subi_8_ai           , 0xfff8, 0x0410, { 16,  16,   8,   8}},
35574 	{m68k_op_subi_8_pi           , 0xfff8, 0x0418, { 16,  16,   8,   8}},
35575 	{m68k_op_subi_8_pd           , 0xfff8, 0x0420, { 18,  18,   9,   9}},
35576 	{m68k_op_subi_8_di           , 0xfff8, 0x0428, { 20,  20,   9,   9}},
35577 	{m68k_op_subi_8_ix           , 0xfff8, 0x0430, { 22,  22,  11,  11}},
35578 	{m68k_op_subi_16_d           , 0xfff8, 0x0440, {  8,   8,   2,   2}},
35579 	{m68k_op_subi_16_ai          , 0xfff8, 0x0450, { 16,  16,   8,   8}},
35580 	{m68k_op_subi_16_pi          , 0xfff8, 0x0458, { 16,  16,   8,   8}},
35581 	{m68k_op_subi_16_pd          , 0xfff8, 0x0460, { 18,  18,   9,   9}},
35582 	{m68k_op_subi_16_di          , 0xfff8, 0x0468, { 20,  20,   9,   9}},
35583 	{m68k_op_subi_16_ix          , 0xfff8, 0x0470, { 22,  22,  11,  11}},
35584 	{m68k_op_subi_32_d           , 0xfff8, 0x0480, { 16,  14,   2,   2}},
35585 	{m68k_op_subi_32_ai          , 0xfff8, 0x0490, { 28,  28,   8,   8}},
35586 	{m68k_op_subi_32_pi          , 0xfff8, 0x0498, { 28,  28,   8,   8}},
35587 	{m68k_op_subi_32_pd          , 0xfff8, 0x04a0, { 30,  30,   9,   9}},
35588 	{m68k_op_subi_32_di          , 0xfff8, 0x04a8, { 32,  32,   9,   9}},
35589 	{m68k_op_subi_32_ix          , 0xfff8, 0x04b0, { 34,  34,  11,  11}},
35590 	{m68k_op_chk2cmp2_32_ai      , 0xfff8, 0x04d0, {  0,   0,  22,  22}},
35591 	{m68k_op_chk2cmp2_32_di      , 0xfff8, 0x04e8, {  0,   0,  23,  23}},
35592 	{m68k_op_chk2cmp2_32_ix      , 0xfff8, 0x04f0, {  0,   0,  25,  25}},
35593 	{m68k_op_addi_8_d            , 0xfff8, 0x0600, {  8,   8,   2,   2}},
35594 	{m68k_op_addi_8_ai           , 0xfff8, 0x0610, { 16,  16,   8,   8}},
35595 	{m68k_op_addi_8_pi           , 0xfff8, 0x0618, { 16,  16,   8,   8}},
35596 	{m68k_op_addi_8_pd           , 0xfff8, 0x0620, { 18,  18,   9,   9}},
35597 	{m68k_op_addi_8_di           , 0xfff8, 0x0628, { 20,  20,   9,   9}},
35598 	{m68k_op_addi_8_ix           , 0xfff8, 0x0630, { 22,  22,  11,  11}},
35599 	{m68k_op_addi_16_d           , 0xfff8, 0x0640, {  8,   8,   2,   2}},
35600 	{m68k_op_addi_16_ai          , 0xfff8, 0x0650, { 16,  16,   8,   8}},
35601 	{m68k_op_addi_16_pi          , 0xfff8, 0x0658, { 16,  16,   8,   8}},
35602 	{m68k_op_addi_16_pd          , 0xfff8, 0x0660, { 18,  18,   9,   9}},
35603 	{m68k_op_addi_16_di          , 0xfff8, 0x0668, { 20,  20,   9,   9}},
35604 	{m68k_op_addi_16_ix          , 0xfff8, 0x0670, { 22,  22,  11,  11}},
35605 	{m68k_op_addi_32_d           , 0xfff8, 0x0680, { 16,  14,   2,   2}},
35606 	{m68k_op_addi_32_ai          , 0xfff8, 0x0690, { 28,  28,   8,   8}},
35607 	{m68k_op_addi_32_pi          , 0xfff8, 0x0698, { 28,  28,   8,   8}},
35608 	{m68k_op_addi_32_pd          , 0xfff8, 0x06a0, { 30,  30,   9,   9}},
35609 	{m68k_op_addi_32_di          , 0xfff8, 0x06a8, { 32,  32,   9,   9}},
35610 	{m68k_op_addi_32_ix          , 0xfff8, 0x06b0, { 34,  34,  11,  11}},
35611 	{m68k_op_callm_32_ai         , 0xfff8, 0x06d0, {  0,   0,  64,  64}},
35612 	{m68k_op_callm_32_di         , 0xfff8, 0x06e8, {  0,   0,  65,  65}},
35613 	{m68k_op_callm_32_ix         , 0xfff8, 0x06f0, {  0,   0,  67,  67}},
35614 	{m68k_op_btst_32_s_d         , 0xfff8, 0x0800, { 10,  10,   4,   4}},
35615 	{m68k_op_btst_8_s_ai         , 0xfff8, 0x0810, { 12,  12,   8,   8}},
35616 	{m68k_op_btst_8_s_pi         , 0xfff8, 0x0818, { 12,  12,   8,   8}},
35617 	{m68k_op_btst_8_s_pd         , 0xfff8, 0x0820, { 14,  14,   9,   9}},
35618 	{m68k_op_btst_8_s_di         , 0xfff8, 0x0828, { 16,  16,   9,   9}},
35619 	{m68k_op_btst_8_s_ix         , 0xfff8, 0x0830, { 18,  18,  11,  11}},
35620 	{m68k_op_bchg_32_s_d         , 0xfff8, 0x0840, { 12,  12,   4,   4}},
35621 	{m68k_op_bchg_8_s_ai         , 0xfff8, 0x0850, { 16,  16,   8,   8}},
35622 	{m68k_op_bchg_8_s_pi         , 0xfff8, 0x0858, { 16,  16,   8,   8}},
35623 	{m68k_op_bchg_8_s_pd         , 0xfff8, 0x0860, { 18,  18,   9,   9}},
35624 	{m68k_op_bchg_8_s_di         , 0xfff8, 0x0868, { 20,  20,   9,   9}},
35625 	{m68k_op_bchg_8_s_ix         , 0xfff8, 0x0870, { 22,  22,  11,  11}},
35626 	{m68k_op_bclr_32_s_d         , 0xfff8, 0x0880, { 14,  14,   4,   4}},
35627 	{m68k_op_bclr_8_s_ai         , 0xfff8, 0x0890, { 16,  16,   8,   8}},
35628 	{m68k_op_bclr_8_s_pi         , 0xfff8, 0x0898, { 16,  16,   8,   8}},
35629 	{m68k_op_bclr_8_s_pd         , 0xfff8, 0x08a0, { 18,  18,   9,   9}},
35630 	{m68k_op_bclr_8_s_di         , 0xfff8, 0x08a8, { 20,  20,   9,   9}},
35631 	{m68k_op_bclr_8_s_ix         , 0xfff8, 0x08b0, { 22,  22,  11,  11}},
35632 	{m68k_op_bset_32_s_d         , 0xfff8, 0x08c0, { 12,  12,   4,   4}},
35633 	{m68k_op_bset_8_s_ai         , 0xfff8, 0x08d0, { 16,  16,   8,   8}},
35634 	{m68k_op_bset_8_s_pi         , 0xfff8, 0x08d8, { 16,  16,   8,   8}},
35635 	{m68k_op_bset_8_s_pd         , 0xfff8, 0x08e0, { 18,  18,   9,   9}},
35636 	{m68k_op_bset_8_s_di         , 0xfff8, 0x08e8, { 20,  20,   9,   9}},
35637 	{m68k_op_bset_8_s_ix         , 0xfff8, 0x08f0, { 22,  22,  11,  11}},
35638 	{m68k_op_eori_8_d            , 0xfff8, 0x0a00, {  8,   8,   2,   2}},
35639 	{m68k_op_eori_8_ai           , 0xfff8, 0x0a10, { 16,  16,   8,   8}},
35640 	{m68k_op_eori_8_pi           , 0xfff8, 0x0a18, { 16,  16,   8,   8}},
35641 	{m68k_op_eori_8_pd           , 0xfff8, 0x0a20, { 18,  18,   9,   9}},
35642 	{m68k_op_eori_8_di           , 0xfff8, 0x0a28, { 20,  20,   9,   9}},
35643 	{m68k_op_eori_8_ix           , 0xfff8, 0x0a30, { 22,  22,  11,  11}},
35644 	{m68k_op_eori_16_d           , 0xfff8, 0x0a40, {  8,   8,   2,   2}},
35645 	{m68k_op_eori_16_ai          , 0xfff8, 0x0a50, { 16,  16,   8,   8}},
35646 	{m68k_op_eori_16_pi          , 0xfff8, 0x0a58, { 16,  16,   8,   8}},
35647 	{m68k_op_eori_16_pd          , 0xfff8, 0x0a60, { 18,  18,   9,   9}},
35648 	{m68k_op_eori_16_di          , 0xfff8, 0x0a68, { 20,  20,   9,   9}},
35649 	{m68k_op_eori_16_ix          , 0xfff8, 0x0a70, { 22,  22,  11,  11}},
35650 	{m68k_op_eori_32_d           , 0xfff8, 0x0a80, { 16,  14,   2,   2}},
35651 	{m68k_op_eori_32_ai          , 0xfff8, 0x0a90, { 28,  28,   8,   8}},
35652 	{m68k_op_eori_32_pi          , 0xfff8, 0x0a98, { 28,  28,   8,   8}},
35653 	{m68k_op_eori_32_pd          , 0xfff8, 0x0aa0, { 30,  30,   9,   9}},
35654 	{m68k_op_eori_32_di          , 0xfff8, 0x0aa8, { 32,  32,   9,   9}},
35655 	{m68k_op_eori_32_ix          , 0xfff8, 0x0ab0, { 34,  34,  11,  11}},
35656 	{m68k_op_cas_8_ai            , 0xfff8, 0x0ad0, {  0,   0,  16,  16}},
35657 	{m68k_op_cas_8_pi            , 0xfff8, 0x0ad8, {  0,   0,  16,  16}},
35658 	{m68k_op_cas_8_pd            , 0xfff8, 0x0ae0, {  0,   0,  17,  17}},
35659 	{m68k_op_cas_8_di            , 0xfff8, 0x0ae8, {  0,   0,  17,  17}},
35660 	{m68k_op_cas_8_ix            , 0xfff8, 0x0af0, {  0,   0,  19,  19}},
35661 	{m68k_op_cmpi_8_d            , 0xfff8, 0x0c00, {  8,   8,   2,   2}},
35662 	{m68k_op_cmpi_8_ai           , 0xfff8, 0x0c10, { 12,  12,   6,   6}},
35663 	{m68k_op_cmpi_8_pi           , 0xfff8, 0x0c18, { 12,  12,   6,   6}},
35664 	{m68k_op_cmpi_8_pd           , 0xfff8, 0x0c20, { 14,  14,   7,   7}},
35665 	{m68k_op_cmpi_8_di           , 0xfff8, 0x0c28, { 16,  16,   7,   7}},
35666 	{m68k_op_cmpi_8_ix           , 0xfff8, 0x0c30, { 18,  18,   9,   9}},
35667 	{m68k_op_cmpi_16_d           , 0xfff8, 0x0c40, {  8,   8,   2,   2}},
35668 	{m68k_op_cmpi_16_ai          , 0xfff8, 0x0c50, { 12,  12,   6,   6}},
35669 	{m68k_op_cmpi_16_pi          , 0xfff8, 0x0c58, { 12,  12,   6,   6}},
35670 	{m68k_op_cmpi_16_pd          , 0xfff8, 0x0c60, { 14,  14,   7,   7}},
35671 	{m68k_op_cmpi_16_di          , 0xfff8, 0x0c68, { 16,  16,   7,   7}},
35672 	{m68k_op_cmpi_16_ix          , 0xfff8, 0x0c70, { 18,  18,   9,   9}},
35673 	{m68k_op_cmpi_32_d           , 0xfff8, 0x0c80, { 14,  12,   2,   2}},
35674 	{m68k_op_cmpi_32_ai          , 0xfff8, 0x0c90, { 20,  20,   6,   6}},
35675 	{m68k_op_cmpi_32_pi          , 0xfff8, 0x0c98, { 20,  20,   6,   6}},
35676 	{m68k_op_cmpi_32_pd          , 0xfff8, 0x0ca0, { 22,  22,   7,   7}},
35677 	{m68k_op_cmpi_32_di          , 0xfff8, 0x0ca8, { 24,  24,   7,   7}},
35678 	{m68k_op_cmpi_32_ix          , 0xfff8, 0x0cb0, { 26,  26,   9,   9}},
35679 	{m68k_op_cas_16_ai           , 0xfff8, 0x0cd0, {  0,   0,  16,  16}},
35680 	{m68k_op_cas_16_pi           , 0xfff8, 0x0cd8, {  0,   0,  16,  16}},
35681 	{m68k_op_cas_16_pd           , 0xfff8, 0x0ce0, {  0,   0,  17,  17}},
35682 	{m68k_op_cas_16_di           , 0xfff8, 0x0ce8, {  0,   0,  17,  17}},
35683 	{m68k_op_cas_16_ix           , 0xfff8, 0x0cf0, {  0,   0,  19,  19}},
35684 	{m68k_op_moves_8_ai          , 0xfff8, 0x0e10, {  0,  18,   9,   9}},
35685 	{m68k_op_moves_8_pi          , 0xfff8, 0x0e18, {  0,  18,   9,   9}},
35686 	{m68k_op_moves_8_pd          , 0xfff8, 0x0e20, {  0,  20,  10,  10}},
35687 	{m68k_op_moves_8_di          , 0xfff8, 0x0e28, {  0,  26,  10,  10}},
35688 	{m68k_op_moves_8_ix          , 0xfff8, 0x0e30, {  0,  30,  12,  12}},
35689 	{m68k_op_moves_16_ai         , 0xfff8, 0x0e50, {  0,  18,   9,   9}},
35690 	{m68k_op_moves_16_pi         , 0xfff8, 0x0e58, {  0,  18,   9,   9}},
35691 	{m68k_op_moves_16_pd         , 0xfff8, 0x0e60, {  0,  20,  10,  10}},
35692 	{m68k_op_moves_16_di         , 0xfff8, 0x0e68, {  0,  26,  10,  10}},
35693 	{m68k_op_moves_16_ix         , 0xfff8, 0x0e70, {  0,  30,  12,  12}},
35694 	{m68k_op_moves_32_ai         , 0xfff8, 0x0e90, {  0,  22,   9,   9}},
35695 	{m68k_op_moves_32_pi         , 0xfff8, 0x0e98, {  0,  22,   9,   9}},
35696 	{m68k_op_moves_32_pd         , 0xfff8, 0x0ea0, {  0,  28,  10,  10}},
35697 	{m68k_op_moves_32_di         , 0xfff8, 0x0ea8, {  0,  32,  10,  10}},
35698 	{m68k_op_moves_32_ix         , 0xfff8, 0x0eb0, {  0,  36,  12,  12}},
35699 	{m68k_op_cas_32_ai           , 0xfff8, 0x0ed0, {  0,   0,  16,  16}},
35700 	{m68k_op_cas_32_pi           , 0xfff8, 0x0ed8, {  0,   0,  16,  16}},
35701 	{m68k_op_cas_32_pd           , 0xfff8, 0x0ee0, {  0,   0,  17,  17}},
35702 	{m68k_op_cas_32_di           , 0xfff8, 0x0ee8, {  0,   0,  17,  17}},
35703 	{m68k_op_cas_32_ix           , 0xfff8, 0x0ef0, {  0,   0,  19,  19}},
35704 	{m68k_op_move_8_aw_d         , 0xfff8, 0x11c0, { 12,  12,   4,   4}},
35705 	{m68k_op_move_8_aw_ai        , 0xfff8, 0x11d0, { 16,  16,   8,   8}},
35706 	{m68k_op_move_8_aw_pi        , 0xfff8, 0x11d8, { 16,  16,   8,   8}},
35707 	{m68k_op_move_8_aw_pd        , 0xfff8, 0x11e0, { 18,  18,   9,   9}},
35708 	{m68k_op_move_8_aw_di        , 0xfff8, 0x11e8, { 20,  20,   9,   9}},
35709 	{m68k_op_move_8_aw_ix        , 0xfff8, 0x11f0, { 22,  22,  11,  11}},
35710 	{m68k_op_move_8_al_d         , 0xfff8, 0x13c0, { 16,  16,   6,   6}},
35711 	{m68k_op_move_8_al_ai        , 0xfff8, 0x13d0, { 20,  20,  10,  10}},
35712 	{m68k_op_move_8_al_pi        , 0xfff8, 0x13d8, { 20,  20,  10,  10}},
35713 	{m68k_op_move_8_al_pd        , 0xfff8, 0x13e0, { 22,  22,  11,  11}},
35714 	{m68k_op_move_8_al_di        , 0xfff8, 0x13e8, { 24,  24,  11,  11}},
35715 	{m68k_op_move_8_al_ix        , 0xfff8, 0x13f0, { 26,  26,  13,  13}},
35716 	{m68k_op_move_8_pi7_d        , 0xfff8, 0x1ec0, {  8,   8,   4,   4}},
35717 	{m68k_op_move_8_pi7_ai       , 0xfff8, 0x1ed0, { 12,  12,   8,   8}},
35718 	{m68k_op_move_8_pi7_pi       , 0xfff8, 0x1ed8, { 12,  12,   8,   8}},
35719 	{m68k_op_move_8_pi7_pd       , 0xfff8, 0x1ee0, { 14,  14,   9,   9}},
35720 	{m68k_op_move_8_pi7_di       , 0xfff8, 0x1ee8, { 16,  16,   9,   9}},
35721 	{m68k_op_move_8_pi7_ix       , 0xfff8, 0x1ef0, { 18,  18,  11,  11}},
35722 	{m68k_op_move_8_pd7_d        , 0xfff8, 0x1f00, {  8,   8,   5,   5}},
35723 	{m68k_op_move_8_pd7_ai       , 0xfff8, 0x1f10, { 12,  12,   9,   9}},
35724 	{m68k_op_move_8_pd7_pi       , 0xfff8, 0x1f18, { 12,  12,   9,   9}},
35725 	{m68k_op_move_8_pd7_pd       , 0xfff8, 0x1f20, { 14,  14,  10,  10}},
35726 	{m68k_op_move_8_pd7_di       , 0xfff8, 0x1f28, { 16,  16,  10,  10}},
35727 	{m68k_op_move_8_pd7_ix       , 0xfff8, 0x1f30, { 18,  18,  12,  12}},
35728 	{m68k_op_move_32_aw_d        , 0xfff8, 0x21c0, { 16,  16,   4,   4}},
35729 	{m68k_op_move_32_aw_a        , 0xfff8, 0x21c8, { 16,  16,   4,   4}},
35730 	{m68k_op_move_32_aw_ai       , 0xfff8, 0x21d0, { 24,  24,   8,   8}},
35731 	{m68k_op_move_32_aw_pi       , 0xfff8, 0x21d8, { 24,  24,   8,   8}},
35732 	{m68k_op_move_32_aw_pd       , 0xfff8, 0x21e0, { 26,  26,   9,   9}},
35733 	{m68k_op_move_32_aw_di       , 0xfff8, 0x21e8, { 28,  28,   9,   9}},
35734 	{m68k_op_move_32_aw_ix       , 0xfff8, 0x21f0, { 30,  30,  11,  11}},
35735 	{m68k_op_move_32_al_d        , 0xfff8, 0x23c0, { 20,  20,   6,   6}},
35736 	{m68k_op_move_32_al_a        , 0xfff8, 0x23c8, { 20,  20,   6,   6}},
35737 	{m68k_op_move_32_al_ai       , 0xfff8, 0x23d0, { 28,  28,  10,  10}},
35738 	{m68k_op_move_32_al_pi       , 0xfff8, 0x23d8, { 28,  28,  10,  10}},
35739 	{m68k_op_move_32_al_pd       , 0xfff8, 0x23e0, { 30,  30,  11,  11}},
35740 	{m68k_op_move_32_al_di       , 0xfff8, 0x23e8, { 32,  32,  11,  11}},
35741 	{m68k_op_move_32_al_ix       , 0xfff8, 0x23f0, { 34,  34,  13,  13}},
35742 	{m68k_op_move_16_aw_d        , 0xfff8, 0x31c0, { 12,  12,   4,   4}},
35743 	{m68k_op_move_16_aw_a        , 0xfff8, 0x31c8, { 12,  12,   4,   4}},
35744 	{m68k_op_move_16_aw_ai       , 0xfff8, 0x31d0, { 16,  16,   8,   8}},
35745 	{m68k_op_move_16_aw_pi       , 0xfff8, 0x31d8, { 16,  16,   8,   8}},
35746 	{m68k_op_move_16_aw_pd       , 0xfff8, 0x31e0, { 18,  18,   9,   9}},
35747 	{m68k_op_move_16_aw_di       , 0xfff8, 0x31e8, { 20,  20,   9,   9}},
35748 	{m68k_op_move_16_aw_ix       , 0xfff8, 0x31f0, { 22,  22,  11,  11}},
35749 	{m68k_op_move_16_al_d        , 0xfff8, 0x33c0, { 16,  16,   6,   6}},
35750 	{m68k_op_move_16_al_a        , 0xfff8, 0x33c8, { 16,  16,   6,   6}},
35751 	{m68k_op_move_16_al_ai       , 0xfff8, 0x33d0, { 20,  20,  10,  10}},
35752 	{m68k_op_move_16_al_pi       , 0xfff8, 0x33d8, { 20,  20,  10,  10}},
35753 	{m68k_op_move_16_al_pd       , 0xfff8, 0x33e0, { 22,  22,  11,  11}},
35754 	{m68k_op_move_16_al_di       , 0xfff8, 0x33e8, { 24,  24,  11,  11}},
35755 	{m68k_op_move_16_al_ix       , 0xfff8, 0x33f0, { 26,  26,  13,  13}},
35756 	{m68k_op_negx_8_d            , 0xfff8, 0x4000, {  4,   4,   2,   2}},
35757 	{m68k_op_negx_8_ai           , 0xfff8, 0x4010, { 12,  12,   8,   8}},
35758 	{m68k_op_negx_8_pi           , 0xfff8, 0x4018, { 12,  12,   8,   8}},
35759 	{m68k_op_negx_8_pd           , 0xfff8, 0x4020, { 14,  14,   9,   9}},
35760 	{m68k_op_negx_8_di           , 0xfff8, 0x4028, { 16,  16,   9,   9}},
35761 	{m68k_op_negx_8_ix           , 0xfff8, 0x4030, { 18,  18,  11,  11}},
35762 	{m68k_op_negx_16_d           , 0xfff8, 0x4040, {  4,   4,   2,   2}},
35763 	{m68k_op_negx_16_ai          , 0xfff8, 0x4050, { 12,  12,   8,   8}},
35764 	{m68k_op_negx_16_pi          , 0xfff8, 0x4058, { 12,  12,   8,   8}},
35765 	{m68k_op_negx_16_pd          , 0xfff8, 0x4060, { 14,  14,   9,   9}},
35766 	{m68k_op_negx_16_di          , 0xfff8, 0x4068, { 16,  16,   9,   9}},
35767 	{m68k_op_negx_16_ix          , 0xfff8, 0x4070, { 18,  18,  11,  11}},
35768 	{m68k_op_negx_32_d           , 0xfff8, 0x4080, {  6,   6,   2,   2}},
35769 	{m68k_op_negx_32_ai          , 0xfff8, 0x4090, { 20,  20,   8,   8}},
35770 	{m68k_op_negx_32_pi          , 0xfff8, 0x4098, { 20,  20,   8,   8}},
35771 	{m68k_op_negx_32_pd          , 0xfff8, 0x40a0, { 22,  22,   9,   9}},
35772 	{m68k_op_negx_32_di          , 0xfff8, 0x40a8, { 24,  24,   9,   9}},
35773 	{m68k_op_negx_32_ix          , 0xfff8, 0x40b0, { 26,  26,  11,  11}},
35774 	{m68k_op_move_16_frs_d       , 0xfff8, 0x40c0, {  6,   4,   8,   8}},
35775 	{m68k_op_move_16_frs_ai      , 0xfff8, 0x40d0, { 12,  12,  12,  12}},
35776 	{m68k_op_move_16_frs_pi      , 0xfff8, 0x40d8, { 12,  12,  12,  12}},
35777 	{m68k_op_move_16_frs_pd      , 0xfff8, 0x40e0, { 14,  14,  13,  13}},
35778 	{m68k_op_move_16_frs_di      , 0xfff8, 0x40e8, { 16,  16,  13,  13}},
35779 	{m68k_op_move_16_frs_ix      , 0xfff8, 0x40f0, { 18,  18,  15,  15}},
35780 	{m68k_op_clr_8_d             , 0xfff8, 0x4200, {  4,   4,   2,   2}},
35781 	{m68k_op_clr_8_ai            , 0xfff8, 0x4210, { 12,   8,   8,   8}},
35782 	{m68k_op_clr_8_pi            , 0xfff8, 0x4218, { 12,   8,   8,   8}},
35783 	{m68k_op_clr_8_pd            , 0xfff8, 0x4220, { 14,  10,   9,   9}},
35784 	{m68k_op_clr_8_di            , 0xfff8, 0x4228, { 16,  12,   9,   9}},
35785 	{m68k_op_clr_8_ix            , 0xfff8, 0x4230, { 18,  14,  11,  11}},
35786 	{m68k_op_clr_16_d            , 0xfff8, 0x4240, {  4,   4,   2,   2}},
35787 	{m68k_op_clr_16_ai           , 0xfff8, 0x4250, { 12,   8,   8,   8}},
35788 	{m68k_op_clr_16_pi           , 0xfff8, 0x4258, { 12,   8,   8,   8}},
35789 	{m68k_op_clr_16_pd           , 0xfff8, 0x4260, { 14,  10,   9,   9}},
35790 	{m68k_op_clr_16_di           , 0xfff8, 0x4268, { 16,  12,   9,   9}},
35791 	{m68k_op_clr_16_ix           , 0xfff8, 0x4270, { 18,  14,  11,  11}},
35792 	{m68k_op_clr_32_d            , 0xfff8, 0x4280, {  6,   6,   2,   2}},
35793 	{m68k_op_clr_32_ai           , 0xfff8, 0x4290, { 20,  12,   8,   8}},
35794 	{m68k_op_clr_32_pi           , 0xfff8, 0x4298, { 20,  12,   8,   8}},
35795 	{m68k_op_clr_32_pd           , 0xfff8, 0x42a0, { 22,  14,   9,   9}},
35796 	{m68k_op_clr_32_di           , 0xfff8, 0x42a8, { 24,  16,   9,   9}},
35797 	{m68k_op_clr_32_ix           , 0xfff8, 0x42b0, { 26,  20,  11,  11}},
35798 	{m68k_op_move_16_frc_d       , 0xfff8, 0x42c0, {  0,   4,   4,   4}},
35799 	{m68k_op_move_16_frc_ai      , 0xfff8, 0x42d0, {  0,  12,   8,   8}},
35800 	{m68k_op_move_16_frc_pi      , 0xfff8, 0x42d8, {  0,  12,   8,   8}},
35801 	{m68k_op_move_16_frc_pd      , 0xfff8, 0x42e0, {  0,  14,   9,   9}},
35802 	{m68k_op_move_16_frc_di      , 0xfff8, 0x42e8, {  0,  16,   9,   9}},
35803 	{m68k_op_move_16_frc_ix      , 0xfff8, 0x42f0, {  0,  18,  11,  11}},
35804 	{m68k_op_neg_8_d             , 0xfff8, 0x4400, {  4,   4,   2,   2}},
35805 	{m68k_op_neg_8_ai            , 0xfff8, 0x4410, { 12,  12,   8,   8}},
35806 	{m68k_op_neg_8_pi            , 0xfff8, 0x4418, { 12,  12,   8,   8}},
35807 	{m68k_op_neg_8_pd            , 0xfff8, 0x4420, { 14,  14,   9,   9}},
35808 	{m68k_op_neg_8_di            , 0xfff8, 0x4428, { 16,  16,   9,   9}},
35809 	{m68k_op_neg_8_ix            , 0xfff8, 0x4430, { 18,  18,  11,  11}},
35810 	{m68k_op_neg_16_d            , 0xfff8, 0x4440, {  4,   4,   2,   2}},
35811 	{m68k_op_neg_16_ai           , 0xfff8, 0x4450, { 12,  12,   8,   8}},
35812 	{m68k_op_neg_16_pi           , 0xfff8, 0x4458, { 12,  12,   8,   8}},
35813 	{m68k_op_neg_16_pd           , 0xfff8, 0x4460, { 14,  14,   9,   9}},
35814 	{m68k_op_neg_16_di           , 0xfff8, 0x4468, { 16,  16,   9,   9}},
35815 	{m68k_op_neg_16_ix           , 0xfff8, 0x4470, { 18,  18,  11,  11}},
35816 	{m68k_op_neg_32_d            , 0xfff8, 0x4480, {  6,   6,   2,   2}},
35817 	{m68k_op_neg_32_ai           , 0xfff8, 0x4490, { 20,  20,   8,   8}},
35818 	{m68k_op_neg_32_pi           , 0xfff8, 0x4498, { 20,  20,   8,   8}},
35819 	{m68k_op_neg_32_pd           , 0xfff8, 0x44a0, { 22,  22,   9,   9}},
35820 	{m68k_op_neg_32_di           , 0xfff8, 0x44a8, { 24,  24,   9,   9}},
35821 	{m68k_op_neg_32_ix           , 0xfff8, 0x44b0, { 26,  26,  11,  11}},
35822 	{m68k_op_move_16_toc_d       , 0xfff8, 0x44c0, { 12,  12,   4,   4}},
35823 	{m68k_op_move_16_toc_ai      , 0xfff8, 0x44d0, { 16,  16,   8,   8}},
35824 	{m68k_op_move_16_toc_pi      , 0xfff8, 0x44d8, { 16,  16,   8,   8}},
35825 	{m68k_op_move_16_toc_pd      , 0xfff8, 0x44e0, { 18,  18,   9,   9}},
35826 	{m68k_op_move_16_toc_di      , 0xfff8, 0x44e8, { 20,  20,   9,   9}},
35827 	{m68k_op_move_16_toc_ix      , 0xfff8, 0x44f0, { 22,  22,  11,  11}},
35828 	{m68k_op_not_8_d             , 0xfff8, 0x4600, {  4,   4,   2,   2}},
35829 	{m68k_op_not_8_ai            , 0xfff8, 0x4610, { 12,  12,   8,   8}},
35830 	{m68k_op_not_8_pi            , 0xfff8, 0x4618, { 12,  12,   8,   8}},
35831 	{m68k_op_not_8_pd            , 0xfff8, 0x4620, { 14,  14,   9,   9}},
35832 	{m68k_op_not_8_di            , 0xfff8, 0x4628, { 16,  16,   9,   9}},
35833 	{m68k_op_not_8_ix            , 0xfff8, 0x4630, { 18,  18,  11,  11}},
35834 	{m68k_op_not_16_d            , 0xfff8, 0x4640, {  4,   4,   2,   2}},
35835 	{m68k_op_not_16_ai           , 0xfff8, 0x4650, { 12,  12,   8,   8}},
35836 	{m68k_op_not_16_pi           , 0xfff8, 0x4658, { 12,  12,   8,   8}},
35837 	{m68k_op_not_16_pd           , 0xfff8, 0x4660, { 14,  14,   9,   9}},
35838 	{m68k_op_not_16_di           , 0xfff8, 0x4668, { 16,  16,   9,   9}},
35839 	{m68k_op_not_16_ix           , 0xfff8, 0x4670, { 18,  18,  11,  11}},
35840 	{m68k_op_not_32_d            , 0xfff8, 0x4680, {  6,   6,   2,   2}},
35841 	{m68k_op_not_32_ai           , 0xfff8, 0x4690, { 20,  20,   8,   8}},
35842 	{m68k_op_not_32_pi           , 0xfff8, 0x4698, { 20,  20,   8,   8}},
35843 	{m68k_op_not_32_pd           , 0xfff8, 0x46a0, { 22,  22,   9,   9}},
35844 	{m68k_op_not_32_di           , 0xfff8, 0x46a8, { 24,  24,   9,   9}},
35845 	{m68k_op_not_32_ix           , 0xfff8, 0x46b0, { 26,  26,  11,  11}},
35846 	{m68k_op_move_16_tos_d       , 0xfff8, 0x46c0, { 12,  12,   8,   8}},
35847 	{m68k_op_move_16_tos_ai      , 0xfff8, 0x46d0, { 16,  16,  12,  12}},
35848 	{m68k_op_move_16_tos_pi      , 0xfff8, 0x46d8, { 16,  16,  12,  12}},
35849 	{m68k_op_move_16_tos_pd      , 0xfff8, 0x46e0, { 18,  18,  13,  13}},
35850 	{m68k_op_move_16_tos_di      , 0xfff8, 0x46e8, { 20,  20,  13,  13}},
35851 	{m68k_op_move_16_tos_ix      , 0xfff8, 0x46f0, { 22,  22,  15,  15}},
35852 	{m68k_op_nbcd_8_d            , 0xfff8, 0x4800, {  6,   6,   6,   6}},
35853 	{m68k_op_link_32             , 0xfff8, 0x4808, {  0,   0,   6,   6}},
35854 	{m68k_op_nbcd_8_ai           , 0xfff8, 0x4810, { 12,  12,  10,  10}},
35855 	{m68k_op_nbcd_8_pi           , 0xfff8, 0x4818, { 12,  12,  10,  10}},
35856 	{m68k_op_nbcd_8_pd           , 0xfff8, 0x4820, { 14,  14,  11,  11}},
35857 	{m68k_op_nbcd_8_di           , 0xfff8, 0x4828, { 16,  16,  11,  11}},
35858 	{m68k_op_nbcd_8_ix           , 0xfff8, 0x4830, { 18,  18,  13,  13}},
35859 	{m68k_op_swap_32             , 0xfff8, 0x4840, {  4,   4,   4,   4}},
35860 	{m68k_op_bkpt                , 0xfff8, 0x4848, {  0,  10,  10,  10}},
35861 	{m68k_op_pea_32_ai           , 0xfff8, 0x4850, { 12,  12,   9,   9}},
35862 	{m68k_op_pea_32_di           , 0xfff8, 0x4868, { 16,  16,  10,  10}},
35863 	{m68k_op_pea_32_ix           , 0xfff8, 0x4870, { 20,  20,  12,  12}},
35864 	{m68k_op_ext_16              , 0xfff8, 0x4880, {  4,   4,   4,   4}},
35865 	{m68k_op_movem_16_re_ai      , 0xfff8, 0x4890, {  8,   8,   8,   8}},
35866 	{m68k_op_movem_16_re_pd      , 0xfff8, 0x48a0, {  8,   8,   4,   4}},
35867 	{m68k_op_movem_16_re_di      , 0xfff8, 0x48a8, { 12,  12,   9,   9}},
35868 	{m68k_op_movem_16_re_ix      , 0xfff8, 0x48b0, { 14,  14,  11,  11}},
35869 	{m68k_op_ext_32              , 0xfff8, 0x48c0, {  4,   4,   4,   4}},
35870 	{m68k_op_movem_32_re_ai      , 0xfff8, 0x48d0, {  8,   8,   8,   8}},
35871 	{m68k_op_movem_32_re_pd      , 0xfff8, 0x48e0, {  8,   8,   4,   4}},
35872 	{m68k_op_movem_32_re_di      , 0xfff8, 0x48e8, { 12,  12,   9,   9}},
35873 	{m68k_op_movem_32_re_ix      , 0xfff8, 0x48f0, { 14,  14,  11,  11}},
35874 	{m68k_op_extb_32             , 0xfff8, 0x49c0, {  0,   0,   4,   4}},
35875 	{m68k_op_tst_8_d             , 0xfff8, 0x4a00, {  4,   4,   2,   2}},
35876 	{m68k_op_tst_8_ai            , 0xfff8, 0x4a10, {  8,   8,   6,   6}},
35877 	{m68k_op_tst_8_pi            , 0xfff8, 0x4a18, {  8,   8,   6,   6}},
35878 	{m68k_op_tst_8_pd            , 0xfff8, 0x4a20, { 10,  10,   7,   7}},
35879 	{m68k_op_tst_8_di            , 0xfff8, 0x4a28, { 12,  12,   7,   7}},
35880 	{m68k_op_tst_8_ix            , 0xfff8, 0x4a30, { 14,  14,   9,   9}},
35881 	{m68k_op_tst_16_d            , 0xfff8, 0x4a40, {  4,   4,   2,   2}},
35882 	{m68k_op_tst_16_a            , 0xfff8, 0x4a48, {  0,   0,   2,   2}},
35883 	{m68k_op_tst_16_ai           , 0xfff8, 0x4a50, {  8,   8,   6,   6}},
35884 	{m68k_op_tst_16_pi           , 0xfff8, 0x4a58, {  8,   8,   6,   6}},
35885 	{m68k_op_tst_16_pd           , 0xfff8, 0x4a60, { 10,  10,   7,   7}},
35886 	{m68k_op_tst_16_di           , 0xfff8, 0x4a68, { 12,  12,   7,   7}},
35887 	{m68k_op_tst_16_ix           , 0xfff8, 0x4a70, { 14,  14,   9,   9}},
35888 	{m68k_op_tst_32_d            , 0xfff8, 0x4a80, {  4,   4,   2,   2}},
35889 	{m68k_op_tst_32_a            , 0xfff8, 0x4a88, {  0,   0,   2,   2}},
35890 	{m68k_op_tst_32_ai           , 0xfff8, 0x4a90, { 12,  12,   6,   6}},
35891 	{m68k_op_tst_32_pi           , 0xfff8, 0x4a98, { 12,  12,   6,   6}},
35892 	{m68k_op_tst_32_pd           , 0xfff8, 0x4aa0, { 14,  14,   7,   7}},
35893 	{m68k_op_tst_32_di           , 0xfff8, 0x4aa8, { 16,  16,   7,   7}},
35894 	{m68k_op_tst_32_ix           , 0xfff8, 0x4ab0, { 18,  18,   9,   9}},
35895 	{m68k_op_tas_8_d             , 0xfff8, 0x4ac0, {  4,   4,   4,   4}},
35896 	{m68k_op_tas_8_ai            , 0xfff8, 0x4ad0, { 18,  18,  16,  16}},
35897 	{m68k_op_tas_8_pi            , 0xfff8, 0x4ad8, { 18,  18,  16,  16}},
35898 	{m68k_op_tas_8_pd            , 0xfff8, 0x4ae0, { 20,  20,  17,  17}},
35899 	{m68k_op_tas_8_di            , 0xfff8, 0x4ae8, { 22,  22,  17,  17}},
35900 	{m68k_op_tas_8_ix            , 0xfff8, 0x4af0, { 24,  24,  19,  19}},
35901 	{m68k_op_mull_32_d           , 0xfff8, 0x4c00, {  0,   0,  43,  43}},
35902 	{m68k_op_mull_32_ai          , 0xfff8, 0x4c10, {  0,   0,  47,  47}},
35903 	{m68k_op_mull_32_pi          , 0xfff8, 0x4c18, {  0,   0,  47,  47}},
35904 	{m68k_op_mull_32_pd          , 0xfff8, 0x4c20, {  0,   0,  48,  48}},
35905 	{m68k_op_mull_32_di          , 0xfff8, 0x4c28, {  0,   0,  48,  48}},
35906 	{m68k_op_mull_32_ix          , 0xfff8, 0x4c30, {  0,   0,  50,  50}},
35907 	{m68k_op_divl_32_d           , 0xfff8, 0x4c40, {  0,   0,  84,  84}},
35908 	{m68k_op_divl_32_ai          , 0xfff8, 0x4c50, {  0,   0,  88,  88}},
35909 	{m68k_op_divl_32_pi          , 0xfff8, 0x4c58, {  0,   0,  88,  88}},
35910 	{m68k_op_divl_32_pd          , 0xfff8, 0x4c60, {  0,   0,  89,  89}},
35911 	{m68k_op_divl_32_di          , 0xfff8, 0x4c68, {  0,   0,  89,  89}},
35912 	{m68k_op_divl_32_ix          , 0xfff8, 0x4c70, {  0,   0,  91,  91}},
35913 	{m68k_op_movem_16_er_ai      , 0xfff8, 0x4c90, { 12,  12,  12,  12}},
35914 	{m68k_op_movem_16_er_pi      , 0xfff8, 0x4c98, { 12,  12,   8,   8}},
35915 	{m68k_op_movem_16_er_di      , 0xfff8, 0x4ca8, { 16,  16,  13,  13}},
35916 	{m68k_op_movem_16_er_ix      , 0xfff8, 0x4cb0, { 18,  18,  15,  15}},
35917 	{m68k_op_movem_32_er_ai      , 0xfff8, 0x4cd0, { 12,  12,  12,  12}},
35918 	{m68k_op_movem_32_er_pi      , 0xfff8, 0x4cd8, { 12,  12,   8,   8}},
35919 	{m68k_op_movem_32_er_di      , 0xfff8, 0x4ce8, { 16,  16,  13,  13}},
35920 	{m68k_op_movem_32_er_ix      , 0xfff8, 0x4cf0, { 18,  18,  15,  15}},
35921 	{m68k_op_link_16             , 0xfff8, 0x4e50, { 16,  16,   5,   5}},
35922 	{m68k_op_unlk_32             , 0xfff8, 0x4e58, { 12,  12,   6,   6}},
35923 	{m68k_op_move_32_tou         , 0xfff8, 0x4e60, {  4,   6,   2,   2}},
35924 	{m68k_op_move_32_fru         , 0xfff8, 0x4e68, {  4,   6,   2,   2}},
35925 	{m68k_op_jsr_32_ai           , 0xfff8, 0x4e90, { 16,  16,   4,   4}},
35926 	{m68k_op_jsr_32_di           , 0xfff8, 0x4ea8, { 18,  18,   5,   5}},
35927 	{m68k_op_jsr_32_ix           , 0xfff8, 0x4eb0, { 22,  22,   7,   7}},
35928 	{m68k_op_jmp_32_ai           , 0xfff8, 0x4ed0, {  8,   8,   4,   4}},
35929 	{m68k_op_jmp_32_di           , 0xfff8, 0x4ee8, { 10,  10,   5,   5}},
35930 	{m68k_op_jmp_32_ix           , 0xfff8, 0x4ef0, { 14,  14,   7,   7}},
35931 	{m68k_op_st_8_d              , 0xfff8, 0x50c0, {  6,   4,   4,   4}},
35932 	{m68k_op_dbt_16              , 0xfff8, 0x50c8, { 12,  12,   6,   6}},
35933 	{m68k_op_st_8_ai             , 0xfff8, 0x50d0, { 12,  12,  10,  10}},
35934 	{m68k_op_st_8_pi             , 0xfff8, 0x50d8, { 12,  12,  10,  10}},
35935 	{m68k_op_st_8_pd             , 0xfff8, 0x50e0, { 14,  14,  11,  11}},
35936 	{m68k_op_st_8_di             , 0xfff8, 0x50e8, { 16,  16,  11,  11}},
35937 	{m68k_op_st_8_ix             , 0xfff8, 0x50f0, { 18,  18,  13,  13}},
35938 	{m68k_op_sf_8_d              , 0xfff8, 0x51c0, {  4,   4,   4,   4}},
35939 	{m68k_op_dbf_16              , 0xfff8, 0x51c8, { 12,  12,   6,   6}},
35940 	{m68k_op_sf_8_ai             , 0xfff8, 0x51d0, { 12,  12,  10,  10}},
35941 	{m68k_op_sf_8_pi             , 0xfff8, 0x51d8, { 12,  12,  10,  10}},
35942 	{m68k_op_sf_8_pd             , 0xfff8, 0x51e0, { 14,  14,  11,  11}},
35943 	{m68k_op_sf_8_di             , 0xfff8, 0x51e8, { 16,  16,  11,  11}},
35944 	{m68k_op_sf_8_ix             , 0xfff8, 0x51f0, { 18,  18,  13,  13}},
35945 	{m68k_op_shi_8_d             , 0xfff8, 0x52c0, {  4,   4,   4,   4}},
35946 	{m68k_op_dbhi_16             , 0xfff8, 0x52c8, { 12,  12,   6,   6}},
35947 	{m68k_op_shi_8_ai            , 0xfff8, 0x52d0, { 12,  12,  10,  10}},
35948 	{m68k_op_shi_8_pi            , 0xfff8, 0x52d8, { 12,  12,  10,  10}},
35949 	{m68k_op_shi_8_pd            , 0xfff8, 0x52e0, { 14,  14,  11,  11}},
35950 	{m68k_op_shi_8_di            , 0xfff8, 0x52e8, { 16,  16,  11,  11}},
35951 	{m68k_op_shi_8_ix            , 0xfff8, 0x52f0, { 18,  18,  13,  13}},
35952 	{m68k_op_sls_8_d             , 0xfff8, 0x53c0, {  4,   4,   4,   4}},
35953 	{m68k_op_dbls_16             , 0xfff8, 0x53c8, { 12,  12,   6,   6}},
35954 	{m68k_op_sls_8_ai            , 0xfff8, 0x53d0, { 12,  12,  10,  10}},
35955 	{m68k_op_sls_8_pi            , 0xfff8, 0x53d8, { 12,  12,  10,  10}},
35956 	{m68k_op_sls_8_pd            , 0xfff8, 0x53e0, { 14,  14,  11,  11}},
35957 	{m68k_op_sls_8_di            , 0xfff8, 0x53e8, { 16,  16,  11,  11}},
35958 	{m68k_op_sls_8_ix            , 0xfff8, 0x53f0, { 18,  18,  13,  13}},
35959 	{m68k_op_scc_8_d             , 0xfff8, 0x54c0, {  4,   4,   4,   4}},
35960 	{m68k_op_dbcc_16             , 0xfff8, 0x54c8, { 12,  12,   6,   6}},
35961 	{m68k_op_scc_8_ai            , 0xfff8, 0x54d0, { 12,  12,  10,  10}},
35962 	{m68k_op_scc_8_pi            , 0xfff8, 0x54d8, { 12,  12,  10,  10}},
35963 	{m68k_op_scc_8_pd            , 0xfff8, 0x54e0, { 14,  14,  11,  11}},
35964 	{m68k_op_scc_8_di            , 0xfff8, 0x54e8, { 16,  16,  11,  11}},
35965 	{m68k_op_scc_8_ix            , 0xfff8, 0x54f0, { 18,  18,  13,  13}},
35966 	{m68k_op_scs_8_d             , 0xfff8, 0x55c0, {  4,   4,   4,   4}},
35967 	{m68k_op_dbcs_16             , 0xfff8, 0x55c8, { 12,  12,   6,   6}},
35968 	{m68k_op_scs_8_ai            , 0xfff8, 0x55d0, { 12,  12,  10,  10}},
35969 	{m68k_op_scs_8_pi            , 0xfff8, 0x55d8, { 12,  12,  10,  10}},
35970 	{m68k_op_scs_8_pd            , 0xfff8, 0x55e0, { 14,  14,  11,  11}},
35971 	{m68k_op_scs_8_di            , 0xfff8, 0x55e8, { 16,  16,  11,  11}},
35972 	{m68k_op_scs_8_ix            , 0xfff8, 0x55f0, { 18,  18,  13,  13}},
35973 	{m68k_op_sne_8_d             , 0xfff8, 0x56c0, {  4,   4,   4,   4}},
35974 	{m68k_op_dbne_16             , 0xfff8, 0x56c8, { 12,  12,   6,   6}},
35975 	{m68k_op_sne_8_ai            , 0xfff8, 0x56d0, { 12,  12,  10,  10}},
35976 	{m68k_op_sne_8_pi            , 0xfff8, 0x56d8, { 12,  12,  10,  10}},
35977 	{m68k_op_sne_8_pd            , 0xfff8, 0x56e0, { 14,  14,  11,  11}},
35978 	{m68k_op_sne_8_di            , 0xfff8, 0x56e8, { 16,  16,  11,  11}},
35979 	{m68k_op_sne_8_ix            , 0xfff8, 0x56f0, { 18,  18,  13,  13}},
35980 	{m68k_op_seq_8_d             , 0xfff8, 0x57c0, {  4,   4,   4,   4}},
35981 	{m68k_op_dbeq_16             , 0xfff8, 0x57c8, { 12,  12,   6,   6}},
35982 	{m68k_op_seq_8_ai            , 0xfff8, 0x57d0, { 12,  12,  10,  10}},
35983 	{m68k_op_seq_8_pi            , 0xfff8, 0x57d8, { 12,  12,  10,  10}},
35984 	{m68k_op_seq_8_pd            , 0xfff8, 0x57e0, { 14,  14,  11,  11}},
35985 	{m68k_op_seq_8_di            , 0xfff8, 0x57e8, { 16,  16,  11,  11}},
35986 	{m68k_op_seq_8_ix            , 0xfff8, 0x57f0, { 18,  18,  13,  13}},
35987 	{m68k_op_svc_8_d             , 0xfff8, 0x58c0, {  4,   4,   4,   4}},
35988 	{m68k_op_dbvc_16             , 0xfff8, 0x58c8, { 12,  12,   6,   6}},
35989 	{m68k_op_svc_8_ai            , 0xfff8, 0x58d0, { 12,  12,  10,  10}},
35990 	{m68k_op_svc_8_pi            , 0xfff8, 0x58d8, { 12,  12,  10,  10}},
35991 	{m68k_op_svc_8_pd            , 0xfff8, 0x58e0, { 14,  14,  11,  11}},
35992 	{m68k_op_svc_8_di            , 0xfff8, 0x58e8, { 16,  16,  11,  11}},
35993 	{m68k_op_svc_8_ix            , 0xfff8, 0x58f0, { 18,  18,  13,  13}},
35994 	{m68k_op_svs_8_d             , 0xfff8, 0x59c0, {  4,   4,   4,   4}},
35995 	{m68k_op_dbvs_16             , 0xfff8, 0x59c8, { 12,  12,   6,   6}},
35996 	{m68k_op_svs_8_ai            , 0xfff8, 0x59d0, { 12,  12,  10,  10}},
35997 	{m68k_op_svs_8_pi            , 0xfff8, 0x59d8, { 12,  12,  10,  10}},
35998 	{m68k_op_svs_8_pd            , 0xfff8, 0x59e0, { 14,  14,  11,  11}},
35999 	{m68k_op_svs_8_di            , 0xfff8, 0x59e8, { 16,  16,  11,  11}},
36000 	{m68k_op_svs_8_ix            , 0xfff8, 0x59f0, { 18,  18,  13,  13}},
36001 	{m68k_op_spl_8_d             , 0xfff8, 0x5ac0, {  4,   4,   4,   4}},
36002 	{m68k_op_dbpl_16             , 0xfff8, 0x5ac8, { 12,  12,   6,   6}},
36003 	{m68k_op_spl_8_ai            , 0xfff8, 0x5ad0, { 12,  12,  10,  10}},
36004 	{m68k_op_spl_8_pi            , 0xfff8, 0x5ad8, { 12,  12,  10,  10}},
36005 	{m68k_op_spl_8_pd            , 0xfff8, 0x5ae0, { 14,  14,  11,  11}},
36006 	{m68k_op_spl_8_di            , 0xfff8, 0x5ae8, { 16,  16,  11,  11}},
36007 	{m68k_op_spl_8_ix            , 0xfff8, 0x5af0, { 18,  18,  13,  13}},
36008 	{m68k_op_smi_8_d             , 0xfff8, 0x5bc0, {  4,   4,   4,   4}},
36009 	{m68k_op_dbmi_16             , 0xfff8, 0x5bc8, { 12,  12,   6,   6}},
36010 	{m68k_op_smi_8_ai            , 0xfff8, 0x5bd0, { 12,  12,  10,  10}},
36011 	{m68k_op_smi_8_pi            , 0xfff8, 0x5bd8, { 12,  12,  10,  10}},
36012 	{m68k_op_smi_8_pd            , 0xfff8, 0x5be0, { 14,  14,  11,  11}},
36013 	{m68k_op_smi_8_di            , 0xfff8, 0x5be8, { 16,  16,  11,  11}},
36014 	{m68k_op_smi_8_ix            , 0xfff8, 0x5bf0, { 18,  18,  13,  13}},
36015 	{m68k_op_sge_8_d             , 0xfff8, 0x5cc0, {  4,   4,   4,   4}},
36016 	{m68k_op_dbge_16             , 0xfff8, 0x5cc8, { 12,  12,   6,   6}},
36017 	{m68k_op_sge_8_ai            , 0xfff8, 0x5cd0, { 12,  12,  10,  10}},
36018 	{m68k_op_sge_8_pi            , 0xfff8, 0x5cd8, { 12,  12,  10,  10}},
36019 	{m68k_op_sge_8_pd            , 0xfff8, 0x5ce0, { 14,  14,  11,  11}},
36020 	{m68k_op_sge_8_di            , 0xfff8, 0x5ce8, { 16,  16,  11,  11}},
36021 	{m68k_op_sge_8_ix            , 0xfff8, 0x5cf0, { 18,  18,  13,  13}},
36022 	{m68k_op_slt_8_d             , 0xfff8, 0x5dc0, {  4,   4,   4,   4}},
36023 	{m68k_op_dblt_16             , 0xfff8, 0x5dc8, { 12,  12,   6,   6}},
36024 	{m68k_op_slt_8_ai            , 0xfff8, 0x5dd0, { 12,  12,  10,  10}},
36025 	{m68k_op_slt_8_pi            , 0xfff8, 0x5dd8, { 12,  12,  10,  10}},
36026 	{m68k_op_slt_8_pd            , 0xfff8, 0x5de0, { 14,  14,  11,  11}},
36027 	{m68k_op_slt_8_di            , 0xfff8, 0x5de8, { 16,  16,  11,  11}},
36028 	{m68k_op_slt_8_ix            , 0xfff8, 0x5df0, { 18,  18,  13,  13}},
36029 	{m68k_op_sgt_8_d             , 0xfff8, 0x5ec0, {  4,   4,   4,   4}},
36030 	{m68k_op_dbgt_16             , 0xfff8, 0x5ec8, { 12,  12,   6,   6}},
36031 	{m68k_op_sgt_8_ai            , 0xfff8, 0x5ed0, { 12,  12,  10,  10}},
36032 	{m68k_op_sgt_8_pi            , 0xfff8, 0x5ed8, { 12,  12,  10,  10}},
36033 	{m68k_op_sgt_8_pd            , 0xfff8, 0x5ee0, { 14,  14,  11,  11}},
36034 	{m68k_op_sgt_8_di            , 0xfff8, 0x5ee8, { 16,  16,  11,  11}},
36035 	{m68k_op_sgt_8_ix            , 0xfff8, 0x5ef0, { 18,  18,  13,  13}},
36036 	{m68k_op_sle_8_d             , 0xfff8, 0x5fc0, {  4,   4,   4,   4}},
36037 	{m68k_op_dble_16             , 0xfff8, 0x5fc8, { 12,  12,   6,   6}},
36038 	{m68k_op_sle_8_ai            , 0xfff8, 0x5fd0, { 12,  12,  10,  10}},
36039 	{m68k_op_sle_8_pi            , 0xfff8, 0x5fd8, { 12,  12,  10,  10}},
36040 	{m68k_op_sle_8_pd            , 0xfff8, 0x5fe0, { 14,  14,  11,  11}},
36041 	{m68k_op_sle_8_di            , 0xfff8, 0x5fe8, { 16,  16,  11,  11}},
36042 	{m68k_op_sle_8_ix            , 0xfff8, 0x5ff0, { 18,  18,  13,  13}},
36043 	{m68k_op_sbcd_8_mm_ax7       , 0xfff8, 0x8f08, { 18,  18,  16,  16}},
36044 	{m68k_op_pack_16_mm_ax7      , 0xfff8, 0x8f48, {  0,   0,  13,  13}},
36045 	{m68k_op_unpk_16_mm_ax7      , 0xfff8, 0x8f88, {  0,   0,  13,  13}},
36046 	{m68k_op_subx_8_mm_ax7       , 0xfff8, 0x9f08, { 18,  18,  12,  12}},
36047 	{m68k_op_cmpm_8_ax7          , 0xfff8, 0xbf08, { 12,  12,   9,   9}},
36048 	{m68k_op_abcd_8_mm_ax7       , 0xfff8, 0xcf08, { 18,  18,  16,  16}},
36049 	{m68k_op_addx_8_mm_ax7       , 0xfff8, 0xdf08, { 18,  18,  12,  12}},
36050 	{m68k_op_asr_16_ai           , 0xfff8, 0xe0d0, { 12,  12,   9,   9}},
36051 	{m68k_op_asr_16_pi           , 0xfff8, 0xe0d8, { 12,  12,   9,   9}},
36052 	{m68k_op_asr_16_pd           , 0xfff8, 0xe0e0, { 14,  14,  10,  10}},
36053 	{m68k_op_asr_16_di           , 0xfff8, 0xe0e8, { 16,  16,  10,  10}},
36054 	{m68k_op_asr_16_ix           , 0xfff8, 0xe0f0, { 18,  18,  12,  12}},
36055 	{m68k_op_asl_16_ai           , 0xfff8, 0xe1d0, { 12,  12,  10,  10}},
36056 	{m68k_op_asl_16_pi           , 0xfff8, 0xe1d8, { 12,  12,  10,  10}},
36057 	{m68k_op_asl_16_pd           , 0xfff8, 0xe1e0, { 14,  14,  11,  11}},
36058 	{m68k_op_asl_16_di           , 0xfff8, 0xe1e8, { 16,  16,  11,  11}},
36059 	{m68k_op_asl_16_ix           , 0xfff8, 0xe1f0, { 18,  18,  13,  13}},
36060 	{m68k_op_lsr_16_ai           , 0xfff8, 0xe2d0, { 12,  12,   9,   9}},
36061 	{m68k_op_lsr_16_pi           , 0xfff8, 0xe2d8, { 12,  12,   9,   9}},
36062 	{m68k_op_lsr_16_pd           , 0xfff8, 0xe2e0, { 14,  14,  10,  10}},
36063 	{m68k_op_lsr_16_di           , 0xfff8, 0xe2e8, { 16,  16,  10,  10}},
36064 	{m68k_op_lsr_16_ix           , 0xfff8, 0xe2f0, { 18,  18,  12,  12}},
36065 	{m68k_op_lsl_16_ai           , 0xfff8, 0xe3d0, { 12,  12,   9,   9}},
36066 	{m68k_op_lsl_16_pi           , 0xfff8, 0xe3d8, { 12,  12,   9,   9}},
36067 	{m68k_op_lsl_16_pd           , 0xfff8, 0xe3e0, { 14,  14,  10,  10}},
36068 	{m68k_op_lsl_16_di           , 0xfff8, 0xe3e8, { 16,  16,  10,  10}},
36069 	{m68k_op_lsl_16_ix           , 0xfff8, 0xe3f0, { 18,  18,  12,  12}},
36070 	{m68k_op_roxr_16_ai          , 0xfff8, 0xe4d0, { 12,  12,   9,   9}},
36071 	{m68k_op_roxr_16_pi          , 0xfff8, 0xe4d8, { 12,  12,   9,   9}},
36072 	{m68k_op_roxr_16_pd          , 0xfff8, 0xe4e0, { 14,  14,  10,  10}},
36073 	{m68k_op_roxr_16_di          , 0xfff8, 0xe4e8, { 16,  16,  10,  10}},
36074 	{m68k_op_roxr_16_ix          , 0xfff8, 0xe4f0, { 18,  18,  12,  12}},
36075 	{m68k_op_roxl_16_ai          , 0xfff8, 0xe5d0, { 12,  12,   9,   9}},
36076 	{m68k_op_roxl_16_pi          , 0xfff8, 0xe5d8, { 12,  12,   9,   9}},
36077 	{m68k_op_roxl_16_pd          , 0xfff8, 0xe5e0, { 14,  14,  10,  10}},
36078 	{m68k_op_roxl_16_di          , 0xfff8, 0xe5e8, { 16,  16,  10,  10}},
36079 	{m68k_op_roxl_16_ix          , 0xfff8, 0xe5f0, { 18,  18,  12,  12}},
36080 	{m68k_op_ror_16_ai           , 0xfff8, 0xe6d0, { 12,  12,  11,  11}},
36081 	{m68k_op_ror_16_pi           , 0xfff8, 0xe6d8, { 12,  12,  11,  11}},
36082 	{m68k_op_ror_16_pd           , 0xfff8, 0xe6e0, { 14,  14,  12,  12}},
36083 	{m68k_op_ror_16_di           , 0xfff8, 0xe6e8, { 16,  16,  12,  12}},
36084 	{m68k_op_ror_16_ix           , 0xfff8, 0xe6f0, { 18,  18,  14,  14}},
36085 	{m68k_op_rol_16_ai           , 0xfff8, 0xe7d0, { 12,  12,  11,  11}},
36086 	{m68k_op_rol_16_pi           , 0xfff8, 0xe7d8, { 12,  12,  11,  11}},
36087 	{m68k_op_rol_16_pd           , 0xfff8, 0xe7e0, { 14,  14,  12,  12}},
36088 	{m68k_op_rol_16_di           , 0xfff8, 0xe7e8, { 16,  16,  12,  12}},
36089 	{m68k_op_rol_16_ix           , 0xfff8, 0xe7f0, { 18,  18,  14,  14}},
36090 	{m68k_op_bftst_32_d          , 0xfff8, 0xe8c0, {  0,   0,   6,   6}},
36091 	{m68k_op_bftst_32_ai         , 0xfff8, 0xe8d0, {  0,   0,  17,  17}},
36092 	{m68k_op_bftst_32_di         , 0xfff8, 0xe8e8, {  0,   0,  18,  18}},
36093 	{m68k_op_bftst_32_ix         , 0xfff8, 0xe8f0, {  0,   0,  20,  20}},
36094 	{m68k_op_bfextu_32_d         , 0xfff8, 0xe9c0, {  0,   0,   8,   8}},
36095 	{m68k_op_bfextu_32_ai        , 0xfff8, 0xe9d0, {  0,   0,  19,  19}},
36096 	{m68k_op_bfextu_32_di        , 0xfff8, 0xe9e8, {  0,   0,  20,  20}},
36097 	{m68k_op_bfextu_32_ix        , 0xfff8, 0xe9f0, {  0,   0,  22,  22}},
36098 	{m68k_op_bfchg_32_d          , 0xfff8, 0xeac0, {  0,   0,  12,  12}},
36099 	{m68k_op_bfchg_32_ai         , 0xfff8, 0xead0, {  0,   0,  24,  24}},
36100 	{m68k_op_bfchg_32_di         , 0xfff8, 0xeae8, {  0,   0,  25,  25}},
36101 	{m68k_op_bfchg_32_ix         , 0xfff8, 0xeaf0, {  0,   0,  27,  27}},
36102 	{m68k_op_bfexts_32_d         , 0xfff8, 0xebc0, {  0,   0,   8,   8}},
36103 	{m68k_op_bfexts_32_ai        , 0xfff8, 0xebd0, {  0,   0,  19,  19}},
36104 	{m68k_op_bfexts_32_di        , 0xfff8, 0xebe8, {  0,   0,  20,  20}},
36105 	{m68k_op_bfexts_32_ix        , 0xfff8, 0xebf0, {  0,   0,  22,  22}},
36106 	{m68k_op_bfclr_32_d          , 0xfff8, 0xecc0, {  0,   0,  12,  12}},
36107 	{m68k_op_bfclr_32_ai         , 0xfff8, 0xecd0, {  0,   0,  24,  24}},
36108 	{m68k_op_bfclr_32_di         , 0xfff8, 0xece8, {  0,   0,  25,  25}},
36109 	{m68k_op_bfclr_32_ix         , 0xfff8, 0xecf0, {  0,   0,  27,  27}},
36110 	{m68k_op_bfffo_32_d          , 0xfff8, 0xedc0, {  0,   0,  18,  18}},
36111 	{m68k_op_bfffo_32_ai         , 0xfff8, 0xedd0, {  0,   0,  32,  32}},
36112 	{m68k_op_bfffo_32_di         , 0xfff8, 0xede8, {  0,   0,  33,  33}},
36113 	{m68k_op_bfffo_32_ix         , 0xfff8, 0xedf0, {  0,   0,  35,  35}},
36114 	{m68k_op_bfset_32_d          , 0xfff8, 0xeec0, {  0,   0,  12,  12}},
36115 	{m68k_op_bfset_32_ai         , 0xfff8, 0xeed0, {  0,   0,  24,  24}},
36116 	{m68k_op_bfset_32_di         , 0xfff8, 0xeee8, {  0,   0,  25,  25}},
36117 	{m68k_op_bfset_32_ix         , 0xfff8, 0xeef0, {  0,   0,  27,  27}},
36118 	{m68k_op_bfins_32_d          , 0xfff8, 0xefc0, {  0,   0,  10,  10}},
36119 	{m68k_op_bfins_32_ai         , 0xfff8, 0xefd0, {  0,   0,  21,  21}},
36120 	{m68k_op_bfins_32_di         , 0xfff8, 0xefe8, {  0,   0,  22,  22}},
36121 	{m68k_op_bfins_32_ix         , 0xfff8, 0xeff0, {  0,   0,  24,  24}},
36122 	{m68k_op_move16_32           , 0xfff8, 0xf620, {  0,   0,   0,   4}},
36123 	{m68k_op_ori_8_pi7           , 0xffff, 0x001f, { 16,  16,   8,   8}},
36124 	{m68k_op_ori_8_pd7           , 0xffff, 0x0027, { 18,  18,   9,   9}},
36125 	{m68k_op_ori_8_aw            , 0xffff, 0x0038, { 20,  20,   8,   8}},
36126 	{m68k_op_ori_8_al            , 0xffff, 0x0039, { 24,  24,   8,   8}},
36127 	{m68k_op_ori_16_toc          , 0xffff, 0x003c, { 20,  16,  12,  12}},
36128 	{m68k_op_ori_16_aw           , 0xffff, 0x0078, { 20,  20,   8,   8}},
36129 	{m68k_op_ori_16_al           , 0xffff, 0x0079, { 24,  24,   8,   8}},
36130 	{m68k_op_ori_16_tos          , 0xffff, 0x007c, { 20,  16,  12,  12}},
36131 	{m68k_op_ori_32_aw           , 0xffff, 0x00b8, { 32,  32,   8,   8}},
36132 	{m68k_op_ori_32_al           , 0xffff, 0x00b9, { 36,  36,   8,   8}},
36133 	{m68k_op_chk2cmp2_8_aw       , 0xffff, 0x00f8, {  0,   0,  22,  22}},
36134 	{m68k_op_chk2cmp2_8_al       , 0xffff, 0x00f9, {  0,   0,  22,  22}},
36135 	{m68k_op_chk2cmp2_8_pcdi     , 0xffff, 0x00fa, {  0,   0,  23,  23}},
36136 	{m68k_op_chk2cmp2_8_pcix     , 0xffff, 0x00fb, {  0,   0,  23,  23}},
36137 	{m68k_op_andi_8_pi7          , 0xffff, 0x021f, { 16,  16,   8,   8}},
36138 	{m68k_op_andi_8_pd7          , 0xffff, 0x0227, { 18,  18,   9,   9}},
36139 	{m68k_op_andi_8_aw           , 0xffff, 0x0238, { 20,  20,   8,   8}},
36140 	{m68k_op_andi_8_al           , 0xffff, 0x0239, { 24,  24,   8,   8}},
36141 	{m68k_op_andi_16_toc         , 0xffff, 0x023c, { 20,  16,  12,  12}},
36142 	{m68k_op_andi_16_aw          , 0xffff, 0x0278, { 20,  20,   8,   8}},
36143 	{m68k_op_andi_16_al          , 0xffff, 0x0279, { 24,  24,   8,   8}},
36144 	{m68k_op_andi_16_tos         , 0xffff, 0x027c, { 20,  16,  12,  12}},
36145 	{m68k_op_andi_32_aw          , 0xffff, 0x02b8, { 32,  32,   8,   8}},
36146 	{m68k_op_andi_32_al          , 0xffff, 0x02b9, { 36,  36,   8,   8}},
36147 	{m68k_op_chk2cmp2_16_aw      , 0xffff, 0x02f8, {  0,   0,  22,  22}},
36148 	{m68k_op_chk2cmp2_16_al      , 0xffff, 0x02f9, {  0,   0,  22,  22}},
36149 	{m68k_op_chk2cmp2_16_pcdi    , 0xffff, 0x02fa, {  0,   0,  23,  23}},
36150 	{m68k_op_chk2cmp2_16_pcix    , 0xffff, 0x02fb, {  0,   0,  23,  23}},
36151 	{m68k_op_subi_8_pi7          , 0xffff, 0x041f, { 16,  16,   8,   8}},
36152 	{m68k_op_subi_8_pd7          , 0xffff, 0x0427, { 18,  18,   9,   9}},
36153 	{m68k_op_subi_8_aw           , 0xffff, 0x0438, { 20,  20,   8,   8}},
36154 	{m68k_op_subi_8_al           , 0xffff, 0x0439, { 24,  24,   8,   8}},
36155 	{m68k_op_subi_16_aw          , 0xffff, 0x0478, { 20,  20,   8,   8}},
36156 	{m68k_op_subi_16_al          , 0xffff, 0x0479, { 24,  24,   8,   8}},
36157 	{m68k_op_subi_32_aw          , 0xffff, 0x04b8, { 32,  32,   8,   8}},
36158 	{m68k_op_subi_32_al          , 0xffff, 0x04b9, { 36,  36,   8,   8}},
36159 	{m68k_op_chk2cmp2_32_aw      , 0xffff, 0x04f8, {  0,   0,  22,  22}},
36160 	{m68k_op_chk2cmp2_32_al      , 0xffff, 0x04f9, {  0,   0,  22,  22}},
36161 	{m68k_op_chk2cmp2_32_pcdi    , 0xffff, 0x04fa, {  0,   0,  23,  23}},
36162 	{m68k_op_chk2cmp2_32_pcix    , 0xffff, 0x04fb, {  0,   0,  23,  23}},
36163 	{m68k_op_addi_8_pi7          , 0xffff, 0x061f, { 16,  16,   8,   8}},
36164 	{m68k_op_addi_8_pd7          , 0xffff, 0x0627, { 18,  18,   9,   9}},
36165 	{m68k_op_addi_8_aw           , 0xffff, 0x0638, { 20,  20,   8,   8}},
36166 	{m68k_op_addi_8_al           , 0xffff, 0x0639, { 24,  24,   8,   8}},
36167 	{m68k_op_addi_16_aw          , 0xffff, 0x0678, { 20,  20,   8,   8}},
36168 	{m68k_op_addi_16_al          , 0xffff, 0x0679, { 24,  24,   8,   8}},
36169 	{m68k_op_addi_32_aw          , 0xffff, 0x06b8, { 32,  32,   8,   8}},
36170 	{m68k_op_addi_32_al          , 0xffff, 0x06b9, { 36,  36,   8,   8}},
36171 	{m68k_op_callm_32_aw         , 0xffff, 0x06f8, {  0,   0,  64,  64}},
36172 	{m68k_op_callm_32_al         , 0xffff, 0x06f9, {  0,   0,  64,  64}},
36173 	{m68k_op_callm_32_pcdi       , 0xffff, 0x06fa, {  0,   0,  65,  65}},
36174 	{m68k_op_callm_32_pcix       , 0xffff, 0x06fb, {  0,   0,  67,  67}},
36175 	{m68k_op_btst_8_s_pi7        , 0xffff, 0x081f, { 12,  12,   8,   8}},
36176 	{m68k_op_btst_8_s_pd7        , 0xffff, 0x0827, { 14,  14,   9,   9}},
36177 	{m68k_op_btst_8_s_aw         , 0xffff, 0x0838, { 16,  16,   8,   8}},
36178 	{m68k_op_btst_8_s_al         , 0xffff, 0x0839, { 20,  20,   8,   8}},
36179 	{m68k_op_btst_8_s_pcdi       , 0xffff, 0x083a, { 16,  16,   9,   9}},
36180 	{m68k_op_btst_8_s_pcix       , 0xffff, 0x083b, { 18,  18,  11,  11}},
36181 	{m68k_op_bchg_8_s_pi7        , 0xffff, 0x085f, { 16,  16,   8,   8}},
36182 	{m68k_op_bchg_8_s_pd7        , 0xffff, 0x0867, { 18,  18,   9,   9}},
36183 	{m68k_op_bchg_8_s_aw         , 0xffff, 0x0878, { 20,  20,   8,   8}},
36184 	{m68k_op_bchg_8_s_al         , 0xffff, 0x0879, { 24,  24,   8,   8}},
36185 	{m68k_op_bclr_8_s_pi7        , 0xffff, 0x089f, { 16,  16,   8,   8}},
36186 	{m68k_op_bclr_8_s_pd7        , 0xffff, 0x08a7, { 18,  18,   9,   9}},
36187 	{m68k_op_bclr_8_s_aw         , 0xffff, 0x08b8, { 20,  20,   8,   8}},
36188 	{m68k_op_bclr_8_s_al         , 0xffff, 0x08b9, { 24,  24,   8,   8}},
36189 	{m68k_op_bset_8_s_pi7        , 0xffff, 0x08df, { 16,  16,   8,   8}},
36190 	{m68k_op_bset_8_s_pd7        , 0xffff, 0x08e7, { 18,  18,   9,   9}},
36191 	{m68k_op_bset_8_s_aw         , 0xffff, 0x08f8, { 20,  20,   8,   8}},
36192 	{m68k_op_bset_8_s_al         , 0xffff, 0x08f9, { 24,  24,   8,   8}},
36193 	{m68k_op_eori_8_pi7          , 0xffff, 0x0a1f, { 16,  16,   8,   8}},
36194 	{m68k_op_eori_8_pd7          , 0xffff, 0x0a27, { 18,  18,   9,   9}},
36195 	{m68k_op_eori_8_aw           , 0xffff, 0x0a38, { 20,  20,   8,   8}},
36196 	{m68k_op_eori_8_al           , 0xffff, 0x0a39, { 24,  24,   8,   8}},
36197 	{m68k_op_eori_16_toc         , 0xffff, 0x0a3c, { 20,  16,  12,  12}},
36198 	{m68k_op_eori_16_aw          , 0xffff, 0x0a78, { 20,  20,   8,   8}},
36199 	{m68k_op_eori_16_al          , 0xffff, 0x0a79, { 24,  24,   8,   8}},
36200 	{m68k_op_eori_16_tos         , 0xffff, 0x0a7c, { 20,  16,  12,  12}},
36201 	{m68k_op_eori_32_aw          , 0xffff, 0x0ab8, { 32,  32,   8,   8}},
36202 	{m68k_op_eori_32_al          , 0xffff, 0x0ab9, { 36,  36,   8,   8}},
36203 	{m68k_op_cas_8_pi7           , 0xffff, 0x0adf, {  0,   0,  16,  16}},
36204 	{m68k_op_cas_8_pd7           , 0xffff, 0x0ae7, {  0,   0,  17,  17}},
36205 	{m68k_op_cas_8_aw            , 0xffff, 0x0af8, {  0,   0,  16,  16}},
36206 	{m68k_op_cas_8_al            , 0xffff, 0x0af9, {  0,   0,  16,  16}},
36207 	{m68k_op_cmpi_8_pi7          , 0xffff, 0x0c1f, { 12,  12,   6,   6}},
36208 	{m68k_op_cmpi_8_pd7          , 0xffff, 0x0c27, { 14,  14,   7,   7}},
36209 	{m68k_op_cmpi_8_aw           , 0xffff, 0x0c38, { 16,  16,   6,   6}},
36210 	{m68k_op_cmpi_8_al           , 0xffff, 0x0c39, { 20,  20,   6,   6}},
36211 	{m68k_op_cmpi_8_pcdi         , 0xffff, 0x0c3a, {  0,   0,   7,   7}},
36212 	{m68k_op_cmpi_8_pcix         , 0xffff, 0x0c3b, {  0,   0,   9,   9}},
36213 	{m68k_op_cmpi_16_aw          , 0xffff, 0x0c78, { 16,  16,   6,   6}},
36214 	{m68k_op_cmpi_16_al          , 0xffff, 0x0c79, { 20,  20,   6,   6}},
36215 	{m68k_op_cmpi_16_pcdi        , 0xffff, 0x0c7a, {  0,   0,   7,   7}},
36216 	{m68k_op_cmpi_16_pcix        , 0xffff, 0x0c7b, {  0,   0,   9,   9}},
36217 	{m68k_op_cmpi_32_aw          , 0xffff, 0x0cb8, { 24,  24,   6,   6}},
36218 	{m68k_op_cmpi_32_al          , 0xffff, 0x0cb9, { 28,  28,   6,   6}},
36219 	{m68k_op_cmpi_32_pcdi        , 0xffff, 0x0cba, {  0,   0,   7,   7}},
36220 	{m68k_op_cmpi_32_pcix        , 0xffff, 0x0cbb, {  0,   0,   9,   9}},
36221 	{m68k_op_cas_16_aw           , 0xffff, 0x0cf8, {  0,   0,  16,  16}},
36222 	{m68k_op_cas_16_al           , 0xffff, 0x0cf9, {  0,   0,  16,  16}},
36223 	{m68k_op_cas2_16             , 0xffff, 0x0cfc, {  0,   0,  12,  12}},
36224 	{m68k_op_moves_8_pi7         , 0xffff, 0x0e1f, {  0,  18,   9,   9}},
36225 	{m68k_op_moves_8_pd7         , 0xffff, 0x0e27, {  0,  20,  10,  10}},
36226 	{m68k_op_moves_8_aw          , 0xffff, 0x0e38, {  0,  26,   9,   9}},
36227 	{m68k_op_moves_8_al          , 0xffff, 0x0e39, {  0,  30,   9,   9}},
36228 	{m68k_op_moves_16_aw         , 0xffff, 0x0e78, {  0,  26,   9,   9}},
36229 	{m68k_op_moves_16_al         , 0xffff, 0x0e79, {  0,  30,   9,   9}},
36230 	{m68k_op_moves_32_aw         , 0xffff, 0x0eb8, {  0,  32,   9,   9}},
36231 	{m68k_op_moves_32_al         , 0xffff, 0x0eb9, {  0,  36,   9,   9}},
36232 	{m68k_op_cas_32_aw           , 0xffff, 0x0ef8, {  0,   0,  16,  16}},
36233 	{m68k_op_cas_32_al           , 0xffff, 0x0ef9, {  0,   0,  16,  16}},
36234 	{m68k_op_cas2_32             , 0xffff, 0x0efc, {  0,   0,  12,  12}},
36235 	{m68k_op_move_8_aw_pi7       , 0xffff, 0x11df, { 16,  16,   8,   8}},
36236 	{m68k_op_move_8_aw_pd7       , 0xffff, 0x11e7, { 18,  18,   9,   9}},
36237 	{m68k_op_move_8_aw_aw        , 0xffff, 0x11f8, { 20,  20,   8,   8}},
36238 	{m68k_op_move_8_aw_al        , 0xffff, 0x11f9, { 24,  24,   8,   8}},
36239 	{m68k_op_move_8_aw_pcdi      , 0xffff, 0x11fa, { 20,  20,   9,   9}},
36240 	{m68k_op_move_8_aw_pcix      , 0xffff, 0x11fb, { 22,  22,  11,  11}},
36241 	{m68k_op_move_8_aw_i         , 0xffff, 0x11fc, { 16,  16,   6,   6}},
36242 	{m68k_op_move_8_al_pi7       , 0xffff, 0x13df, { 20,  20,  10,  10}},
36243 	{m68k_op_move_8_al_pd7       , 0xffff, 0x13e7, { 22,  22,  11,  11}},
36244 	{m68k_op_move_8_al_aw        , 0xffff, 0x13f8, { 24,  24,  10,  10}},
36245 	{m68k_op_move_8_al_al        , 0xffff, 0x13f9, { 28,  28,  10,  10}},
36246 	{m68k_op_move_8_al_pcdi      , 0xffff, 0x13fa, { 24,  24,  11,  11}},
36247 	{m68k_op_move_8_al_pcix      , 0xffff, 0x13fb, { 26,  26,  13,  13}},
36248 	{m68k_op_move_8_al_i         , 0xffff, 0x13fc, { 20,  20,   8,   8}},
36249 	{m68k_op_move_8_pi7_pi7      , 0xffff, 0x1edf, { 12,  12,   8,   8}},
36250 	{m68k_op_move_8_pi7_pd7      , 0xffff, 0x1ee7, { 14,  14,   9,   9}},
36251 	{m68k_op_move_8_pi7_aw       , 0xffff, 0x1ef8, { 16,  16,   8,   8}},
36252 	{m68k_op_move_8_pi7_al       , 0xffff, 0x1ef9, { 20,  20,   8,   8}},
36253 	{m68k_op_move_8_pi7_pcdi     , 0xffff, 0x1efa, { 16,  16,   9,   9}},
36254 	{m68k_op_move_8_pi7_pcix     , 0xffff, 0x1efb, { 18,  18,  11,  11}},
36255 	{m68k_op_move_8_pi7_i        , 0xffff, 0x1efc, { 12,  12,   6,   6}},
36256 	{m68k_op_move_8_pd7_pi7      , 0xffff, 0x1f1f, { 12,  12,   9,   9}},
36257 	{m68k_op_move_8_pd7_pd7      , 0xffff, 0x1f27, { 14,  14,  10,  10}},
36258 	{m68k_op_move_8_pd7_aw       , 0xffff, 0x1f38, { 16,  16,   9,   9}},
36259 	{m68k_op_move_8_pd7_al       , 0xffff, 0x1f39, { 20,  20,   9,   9}},
36260 	{m68k_op_move_8_pd7_pcdi     , 0xffff, 0x1f3a, { 16,  16,  10,  10}},
36261 	{m68k_op_move_8_pd7_pcix     , 0xffff, 0x1f3b, { 18,  18,  12,  12}},
36262 	{m68k_op_move_8_pd7_i        , 0xffff, 0x1f3c, { 12,  12,   7,   7}},
36263 	{m68k_op_move_32_aw_aw       , 0xffff, 0x21f8, { 28,  28,   8,   8}},
36264 	{m68k_op_move_32_aw_al       , 0xffff, 0x21f9, { 32,  32,   8,   8}},
36265 	{m68k_op_move_32_aw_pcdi     , 0xffff, 0x21fa, { 28,  28,   9,   9}},
36266 	{m68k_op_move_32_aw_pcix     , 0xffff, 0x21fb, { 30,  30,  11,  11}},
36267 	{m68k_op_move_32_aw_i        , 0xffff, 0x21fc, { 24,  24,   8,   8}},
36268 	{m68k_op_move_32_al_aw       , 0xffff, 0x23f8, { 32,  32,  10,  10}},
36269 	{m68k_op_move_32_al_al       , 0xffff, 0x23f9, { 36,  36,  10,  10}},
36270 	{m68k_op_move_32_al_pcdi     , 0xffff, 0x23fa, { 32,  32,  11,  11}},
36271 	{m68k_op_move_32_al_pcix     , 0xffff, 0x23fb, { 34,  34,  13,  13}},
36272 	{m68k_op_move_32_al_i        , 0xffff, 0x23fc, { 28,  28,  10,  10}},
36273 	{m68k_op_move_16_aw_aw       , 0xffff, 0x31f8, { 20,  20,   8,   8}},
36274 	{m68k_op_move_16_aw_al       , 0xffff, 0x31f9, { 24,  24,   8,   8}},
36275 	{m68k_op_move_16_aw_pcdi     , 0xffff, 0x31fa, { 20,  20,   9,   9}},
36276 	{m68k_op_move_16_aw_pcix     , 0xffff, 0x31fb, { 22,  22,  11,  11}},
36277 	{m68k_op_move_16_aw_i        , 0xffff, 0x31fc, { 16,  16,   6,   6}},
36278 	{m68k_op_move_16_al_aw       , 0xffff, 0x33f8, { 24,  24,  10,  10}},
36279 	{m68k_op_move_16_al_al       , 0xffff, 0x33f9, { 28,  28,  10,  10}},
36280 	{m68k_op_move_16_al_pcdi     , 0xffff, 0x33fa, { 24,  24,  11,  11}},
36281 	{m68k_op_move_16_al_pcix     , 0xffff, 0x33fb, { 26,  26,  13,  13}},
36282 	{m68k_op_move_16_al_i        , 0xffff, 0x33fc, { 20,  20,   8,   8}},
36283 	{m68k_op_negx_8_pi7          , 0xffff, 0x401f, { 12,  12,   8,   8}},
36284 	{m68k_op_negx_8_pd7          , 0xffff, 0x4027, { 14,  14,   9,   9}},
36285 	{m68k_op_negx_8_aw           , 0xffff, 0x4038, { 16,  16,   8,   8}},
36286 	{m68k_op_negx_8_al           , 0xffff, 0x4039, { 20,  20,   8,   8}},
36287 	{m68k_op_negx_16_aw          , 0xffff, 0x4078, { 16,  16,   8,   8}},
36288 	{m68k_op_negx_16_al          , 0xffff, 0x4079, { 20,  20,   8,   8}},
36289 	{m68k_op_negx_32_aw          , 0xffff, 0x40b8, { 24,  24,   8,   8}},
36290 	{m68k_op_negx_32_al          , 0xffff, 0x40b9, { 28,  28,   8,   8}},
36291 	{m68k_op_move_16_frs_aw      , 0xffff, 0x40f8, { 16,  16,  12,  12}},
36292 	{m68k_op_move_16_frs_al      , 0xffff, 0x40f9, { 20,  20,  12,  12}},
36293 	{m68k_op_clr_8_pi7           , 0xffff, 0x421f, { 12,   8,   8,   8}},
36294 	{m68k_op_clr_8_pd7           , 0xffff, 0x4227, { 14,  10,   9,   9}},
36295 	{m68k_op_clr_8_aw            , 0xffff, 0x4238, { 16,  12,   8,   8}},
36296 	{m68k_op_clr_8_al            , 0xffff, 0x4239, { 20,  14,   8,   8}},
36297 	{m68k_op_clr_16_aw           , 0xffff, 0x4278, { 16,  12,   8,   8}},
36298 	{m68k_op_clr_16_al           , 0xffff, 0x4279, { 20,  14,   8,   8}},
36299 	{m68k_op_clr_32_aw           , 0xffff, 0x42b8, { 24,  16,   8,   8}},
36300 	{m68k_op_clr_32_al           , 0xffff, 0x42b9, { 28,  20,   8,   8}},
36301 	{m68k_op_move_16_frc_aw      , 0xffff, 0x42f8, {  0,  16,   8,   8}},
36302 	{m68k_op_move_16_frc_al      , 0xffff, 0x42f9, {  0,  20,   8,   8}},
36303 	{m68k_op_neg_8_pi7           , 0xffff, 0x441f, { 12,  12,   8,   8}},
36304 	{m68k_op_neg_8_pd7           , 0xffff, 0x4427, { 14,  14,   9,   9}},
36305 	{m68k_op_neg_8_aw            , 0xffff, 0x4438, { 16,  16,   8,   8}},
36306 	{m68k_op_neg_8_al            , 0xffff, 0x4439, { 20,  20,   8,   8}},
36307 	{m68k_op_neg_16_aw           , 0xffff, 0x4478, { 16,  16,   8,   8}},
36308 	{m68k_op_neg_16_al           , 0xffff, 0x4479, { 20,  20,   8,   8}},
36309 	{m68k_op_neg_32_aw           , 0xffff, 0x44b8, { 24,  24,   8,   8}},
36310 	{m68k_op_neg_32_al           , 0xffff, 0x44b9, { 28,  28,   8,   8}},
36311 	{m68k_op_move_16_toc_aw      , 0xffff, 0x44f8, { 20,  20,   8,   8}},
36312 	{m68k_op_move_16_toc_al      , 0xffff, 0x44f9, { 24,  24,   8,   8}},
36313 	{m68k_op_move_16_toc_pcdi    , 0xffff, 0x44fa, { 20,  20,   9,   9}},
36314 	{m68k_op_move_16_toc_pcix    , 0xffff, 0x44fb, { 22,  22,  11,  11}},
36315 	{m68k_op_move_16_toc_i       , 0xffff, 0x44fc, { 16,  16,   6,   6}},
36316 	{m68k_op_not_8_pi7           , 0xffff, 0x461f, { 12,  12,   8,   8}},
36317 	{m68k_op_not_8_pd7           , 0xffff, 0x4627, { 14,  14,   9,   9}},
36318 	{m68k_op_not_8_aw            , 0xffff, 0x4638, { 16,  16,   8,   8}},
36319 	{m68k_op_not_8_al            , 0xffff, 0x4639, { 20,  20,   8,   8}},
36320 	{m68k_op_not_16_aw           , 0xffff, 0x4678, { 16,  16,   8,   8}},
36321 	{m68k_op_not_16_al           , 0xffff, 0x4679, { 20,  20,   8,   8}},
36322 	{m68k_op_not_32_aw           , 0xffff, 0x46b8, { 24,  24,   8,   8}},
36323 	{m68k_op_not_32_al           , 0xffff, 0x46b9, { 28,  28,   8,   8}},
36324 	{m68k_op_move_16_tos_aw      , 0xffff, 0x46f8, { 20,  20,  12,  12}},
36325 	{m68k_op_move_16_tos_al      , 0xffff, 0x46f9, { 24,  24,  12,  12}},
36326 	{m68k_op_move_16_tos_pcdi    , 0xffff, 0x46fa, { 20,  20,  13,  13}},
36327 	{m68k_op_move_16_tos_pcix    , 0xffff, 0x46fb, { 22,  22,  15,  15}},
36328 	{m68k_op_move_16_tos_i       , 0xffff, 0x46fc, { 16,  16,  10,  10}},
36329 	{m68k_op_link_32_a7          , 0xffff, 0x480f, {  0,   0,   6,   6}},
36330 	{m68k_op_nbcd_8_pi7          , 0xffff, 0x481f, { 12,  12,  10,  10}},
36331 	{m68k_op_nbcd_8_pd7          , 0xffff, 0x4827, { 14,  14,  11,  11}},
36332 	{m68k_op_nbcd_8_aw           , 0xffff, 0x4838, { 16,  16,  10,  10}},
36333 	{m68k_op_nbcd_8_al           , 0xffff, 0x4839, { 20,  20,  10,  10}},
36334 	{m68k_op_pea_32_aw           , 0xffff, 0x4878, { 16,  16,   9,   9}},
36335 	{m68k_op_pea_32_al           , 0xffff, 0x4879, { 20,  20,   9,   9}},
36336 	{m68k_op_pea_32_pcdi         , 0xffff, 0x487a, { 16,  16,  10,  10}},
36337 	{m68k_op_pea_32_pcix         , 0xffff, 0x487b, { 20,  20,  12,  12}},
36338 	{m68k_op_movem_16_re_aw      , 0xffff, 0x48b8, { 12,  12,   8,   8}},
36339 	{m68k_op_movem_16_re_al      , 0xffff, 0x48b9, { 16,  16,   8,   8}},
36340 	{m68k_op_movem_32_re_aw      , 0xffff, 0x48f8, { 12,  12,   8,   8}},
36341 	{m68k_op_movem_32_re_al      , 0xffff, 0x48f9, { 16,  16,   8,   8}},
36342 	{m68k_op_tst_8_pi7           , 0xffff, 0x4a1f, {  8,   8,   6,   6}},
36343 	{m68k_op_tst_8_pd7           , 0xffff, 0x4a27, { 10,  10,   7,   7}},
36344 	{m68k_op_tst_8_aw            , 0xffff, 0x4a38, { 12,  12,   6,   6}},
36345 	{m68k_op_tst_8_al            , 0xffff, 0x4a39, { 16,  16,   6,   6}},
36346 	{m68k_op_tst_8_pcdi          , 0xffff, 0x4a3a, {  0,   0,   7,   7}},
36347 	{m68k_op_tst_8_pcix          , 0xffff, 0x4a3b, {  0,   0,   9,   9}},
36348 	{m68k_op_tst_8_i             , 0xffff, 0x4a3c, {  0,   0,   6,   6}},
36349 	{m68k_op_tst_16_aw           , 0xffff, 0x4a78, { 12,  12,   6,   6}},
36350 	{m68k_op_tst_16_al           , 0xffff, 0x4a79, { 16,  16,   6,   6}},
36351 	{m68k_op_tst_16_pcdi         , 0xffff, 0x4a7a, {  0,   0,   7,   7}},
36352 	{m68k_op_tst_16_pcix         , 0xffff, 0x4a7b, {  0,   0,   9,   9}},
36353 	{m68k_op_tst_16_i            , 0xffff, 0x4a7c, {  0,   0,   6,   6}},
36354 	{m68k_op_tst_32_aw           , 0xffff, 0x4ab8, { 16,  16,   6,   6}},
36355 	{m68k_op_tst_32_al           , 0xffff, 0x4ab9, { 20,  20,   6,   6}},
36356 	{m68k_op_tst_32_pcdi         , 0xffff, 0x4aba, {  0,   0,   7,   7}},
36357 	{m68k_op_tst_32_pcix         , 0xffff, 0x4abb, {  0,   0,   9,   9}},
36358 	{m68k_op_tst_32_i            , 0xffff, 0x4abc, {  0,   0,   6,   6}},
36359 	{m68k_op_tas_8_pi7           , 0xffff, 0x4adf, { 18,  18,  16,  16}},
36360 	{m68k_op_tas_8_pd7           , 0xffff, 0x4ae7, { 20,  20,  17,  17}},
36361 	{m68k_op_tas_8_aw            , 0xffff, 0x4af8, { 22,  22,  16,  16}},
36362 	{m68k_op_tas_8_al            , 0xffff, 0x4af9, { 26,  26,  16,  16}},
36363 	{m68k_op_illegal             , 0xffff, 0x4afc, {  4,   4,   4,   4}},
36364 	{m68k_op_mull_32_aw          , 0xffff, 0x4c38, {  0,   0,  47,  47}},
36365 	{m68k_op_mull_32_al          , 0xffff, 0x4c39, {  0,   0,  47,  47}},
36366 	{m68k_op_mull_32_pcdi        , 0xffff, 0x4c3a, {  0,   0,  48,  48}},
36367 	{m68k_op_mull_32_pcix        , 0xffff, 0x4c3b, {  0,   0,  50,  50}},
36368 	{m68k_op_mull_32_i           , 0xffff, 0x4c3c, {  0,   0,  47,  47}},
36369 	{m68k_op_divl_32_aw          , 0xffff, 0x4c78, {  0,   0,  88,  88}},
36370 	{m68k_op_divl_32_al          , 0xffff, 0x4c79, {  0,   0,  88,  88}},
36371 	{m68k_op_divl_32_pcdi        , 0xffff, 0x4c7a, {  0,   0,  89,  89}},
36372 	{m68k_op_divl_32_pcix        , 0xffff, 0x4c7b, {  0,   0,  91,  91}},
36373 	{m68k_op_divl_32_i           , 0xffff, 0x4c7c, {  0,   0,  88,  88}},
36374 	{m68k_op_movem_16_er_aw      , 0xffff, 0x4cb8, { 16,  16,  12,  12}},
36375 	{m68k_op_movem_16_er_al      , 0xffff, 0x4cb9, { 20,  20,  12,  12}},
36376 	{m68k_op_movem_16_er_pcdi    , 0xffff, 0x4cba, { 16,  16,   9,   9}},
36377 	{m68k_op_movem_16_er_pcix    , 0xffff, 0x4cbb, { 18,  18,  11,  11}},
36378 	{m68k_op_movem_32_er_aw      , 0xffff, 0x4cf8, { 16,  16,  12,  12}},
36379 	{m68k_op_movem_32_er_al      , 0xffff, 0x4cf9, { 20,  20,  12,  12}},
36380 	{m68k_op_movem_32_er_pcdi    , 0xffff, 0x4cfa, { 16,  16,   9,   9}},
36381 	{m68k_op_movem_32_er_pcix    , 0xffff, 0x4cfb, { 18,  18,  11,  11}},
36382 	{m68k_op_link_16_a7          , 0xffff, 0x4e57, { 16,  16,   5,   5}},
36383 	{m68k_op_unlk_32_a7          , 0xffff, 0x4e5f, { 12,  12,   6,   6}},
36384 	{m68k_op_reset               , 0xffff, 0x4e70, {  0,   0,   0,   0}},
36385 	{m68k_op_nop                 , 0xffff, 0x4e71, {  4,   4,   2,   2}},
36386 	{m68k_op_stop                , 0xffff, 0x4e72, {  4,   4,   8,   8}},
36387 	{m68k_op_rte_32              , 0xffff, 0x4e73, { 20,  24,  20,  20}},
36388 	{m68k_op_rtd_32              , 0xffff, 0x4e74, {  0,  16,  10,  10}},
36389 	{m68k_op_rts_32              , 0xffff, 0x4e75, { 16,  16,  10,  10}},
36390 	{m68k_op_trapv               , 0xffff, 0x4e76, {  4,   4,   4,   4}},
36391 	{m68k_op_rtr_32              , 0xffff, 0x4e77, { 20,  20,  14,  14}},
36392 	{m68k_op_movec_32_cr         , 0xffff, 0x4e7a, {  0,  12,   6,   6}},
36393 	{m68k_op_movec_32_rc         , 0xffff, 0x4e7b, {  0,  10,  12,  12}},
36394 	{m68k_op_jsr_32_aw           , 0xffff, 0x4eb8, { 18,  18,   4,   4}},
36395 	{m68k_op_jsr_32_al           , 0xffff, 0x4eb9, { 20,  20,   4,   4}},
36396 	{m68k_op_jsr_32_pcdi         , 0xffff, 0x4eba, { 18,  18,   5,   5}},
36397 	{m68k_op_jsr_32_pcix         , 0xffff, 0x4ebb, { 22,  22,   7,   7}},
36398 	{m68k_op_jmp_32_aw           , 0xffff, 0x4ef8, { 10,  10,   4,   4}},
36399 	{m68k_op_jmp_32_al           , 0xffff, 0x4ef9, { 12,  12,   4,   4}},
36400 	{m68k_op_jmp_32_pcdi         , 0xffff, 0x4efa, { 10,  10,   5,   5}},
36401 	{m68k_op_jmp_32_pcix         , 0xffff, 0x4efb, { 14,  14,   7,   7}},
36402 	{m68k_op_st_8_pi7            , 0xffff, 0x50df, { 12,  12,  10,  10}},
36403 	{m68k_op_st_8_pd7            , 0xffff, 0x50e7, { 14,  14,  11,  11}},
36404 	{m68k_op_st_8_aw             , 0xffff, 0x50f8, { 16,  16,  10,  10}},
36405 	{m68k_op_st_8_al             , 0xffff, 0x50f9, { 20,  20,  10,  10}},
36406 	{m68k_op_trapt_16            , 0xffff, 0x50fa, {  0,   0,   6,   6}},
36407 	{m68k_op_trapt_32            , 0xffff, 0x50fb, {  0,   0,   8,   8}},
36408 	{m68k_op_trapt               , 0xffff, 0x50fc, {  0,   0,   4,   4}},
36409 	{m68k_op_sf_8_pi7            , 0xffff, 0x51df, { 12,  12,  10,  10}},
36410 	{m68k_op_sf_8_pd7            , 0xffff, 0x51e7, { 14,  14,  11,  11}},
36411 	{m68k_op_sf_8_aw             , 0xffff, 0x51f8, { 16,  16,  10,  10}},
36412 	{m68k_op_sf_8_al             , 0xffff, 0x51f9, { 20,  20,  10,  10}},
36413 	{m68k_op_trapf_16            , 0xffff, 0x51fa, {  0,   0,   6,   6}},
36414 	{m68k_op_trapf_32            , 0xffff, 0x51fb, {  0,   0,   8,   8}},
36415 	{m68k_op_trapf               , 0xffff, 0x51fc, {  0,   0,   4,   4}},
36416 	{m68k_op_shi_8_pi7           , 0xffff, 0x52df, { 12,  12,  10,  10}},
36417 	{m68k_op_shi_8_pd7           , 0xffff, 0x52e7, { 14,  14,  11,  11}},
36418 	{m68k_op_shi_8_aw            , 0xffff, 0x52f8, { 16,  16,  10,  10}},
36419 	{m68k_op_shi_8_al            , 0xffff, 0x52f9, { 20,  20,  10,  10}},
36420 	{m68k_op_traphi_16           , 0xffff, 0x52fa, {  0,   0,   6,   6}},
36421 	{m68k_op_traphi_32           , 0xffff, 0x52fb, {  0,   0,   8,   8}},
36422 	{m68k_op_traphi              , 0xffff, 0x52fc, {  0,   0,   4,   4}},
36423 	{m68k_op_sls_8_pi7           , 0xffff, 0x53df, { 12,  12,  10,  10}},
36424 	{m68k_op_sls_8_pd7           , 0xffff, 0x53e7, { 14,  14,  11,  11}},
36425 	{m68k_op_sls_8_aw            , 0xffff, 0x53f8, { 16,  16,  10,  10}},
36426 	{m68k_op_sls_8_al            , 0xffff, 0x53f9, { 20,  20,  10,  10}},
36427 	{m68k_op_trapls_16           , 0xffff, 0x53fa, {  0,   0,   6,   6}},
36428 	{m68k_op_trapls_32           , 0xffff, 0x53fb, {  0,   0,   8,   8}},
36429 	{m68k_op_trapls              , 0xffff, 0x53fc, {  0,   0,   4,   4}},
36430 	{m68k_op_scc_8_pi7           , 0xffff, 0x54df, { 12,  12,  10,  10}},
36431 	{m68k_op_scc_8_pd7           , 0xffff, 0x54e7, { 14,  14,  11,  11}},
36432 	{m68k_op_scc_8_aw            , 0xffff, 0x54f8, { 16,  16,  10,  10}},
36433 	{m68k_op_scc_8_al            , 0xffff, 0x54f9, { 20,  20,  10,  10}},
36434 	{m68k_op_trapcc_16           , 0xffff, 0x54fa, {  0,   0,   6,   6}},
36435 	{m68k_op_trapcc_32           , 0xffff, 0x54fb, {  0,   0,   8,   8}},
36436 	{m68k_op_trapcc              , 0xffff, 0x54fc, {  0,   0,   4,   4}},
36437 	{m68k_op_scs_8_pi7           , 0xffff, 0x55df, { 12,  12,  10,  10}},
36438 	{m68k_op_scs_8_pd7           , 0xffff, 0x55e7, { 14,  14,  11,  11}},
36439 	{m68k_op_scs_8_aw            , 0xffff, 0x55f8, { 16,  16,  10,  10}},
36440 	{m68k_op_scs_8_al            , 0xffff, 0x55f9, { 20,  20,  10,  10}},
36441 	{m68k_op_trapcs_16           , 0xffff, 0x55fa, {  0,   0,   6,   6}},
36442 	{m68k_op_trapcs_32           , 0xffff, 0x55fb, {  0,   0,   8,   8}},
36443 	{m68k_op_trapcs              , 0xffff, 0x55fc, {  0,   0,   4,   4}},
36444 	{m68k_op_sne_8_pi7           , 0xffff, 0x56df, { 12,  12,  10,  10}},
36445 	{m68k_op_sne_8_pd7           , 0xffff, 0x56e7, { 14,  14,  11,  11}},
36446 	{m68k_op_sne_8_aw            , 0xffff, 0x56f8, { 16,  16,  10,  10}},
36447 	{m68k_op_sne_8_al            , 0xffff, 0x56f9, { 20,  20,  10,  10}},
36448 	{m68k_op_trapne_16           , 0xffff, 0x56fa, {  0,   0,   6,   6}},
36449 	{m68k_op_trapne_32           , 0xffff, 0x56fb, {  0,   0,   8,   8}},
36450 	{m68k_op_trapne              , 0xffff, 0x56fc, {  0,   0,   4,   4}},
36451 	{m68k_op_seq_8_pi7           , 0xffff, 0x57df, { 12,  12,  10,  10}},
36452 	{m68k_op_seq_8_pd7           , 0xffff, 0x57e7, { 14,  14,  11,  11}},
36453 	{m68k_op_seq_8_aw            , 0xffff, 0x57f8, { 16,  16,  10,  10}},
36454 	{m68k_op_seq_8_al            , 0xffff, 0x57f9, { 20,  20,  10,  10}},
36455 	{m68k_op_trapeq_16           , 0xffff, 0x57fa, {  0,   0,   6,   6}},
36456 	{m68k_op_trapeq_32           , 0xffff, 0x57fb, {  0,   0,   8,   8}},
36457 	{m68k_op_trapeq              , 0xffff, 0x57fc, {  0,   0,   4,   4}},
36458 	{m68k_op_svc_8_pi7           , 0xffff, 0x58df, { 12,  12,  10,  10}},
36459 	{m68k_op_svc_8_pd7           , 0xffff, 0x58e7, { 14,  14,  11,  11}},
36460 	{m68k_op_svc_8_aw            , 0xffff, 0x58f8, { 16,  16,  10,  10}},
36461 	{m68k_op_svc_8_al            , 0xffff, 0x58f9, { 20,  20,  10,  10}},
36462 	{m68k_op_trapvc_16           , 0xffff, 0x58fa, {  0,   0,   6,   6}},
36463 	{m68k_op_trapvc_32           , 0xffff, 0x58fb, {  0,   0,   8,   8}},
36464 	{m68k_op_trapvc              , 0xffff, 0x58fc, {  0,   0,   4,   4}},
36465 	{m68k_op_svs_8_pi7           , 0xffff, 0x59df, { 12,  12,  10,  10}},
36466 	{m68k_op_svs_8_pd7           , 0xffff, 0x59e7, { 14,  14,  11,  11}},
36467 	{m68k_op_svs_8_aw            , 0xffff, 0x59f8, { 16,  16,  10,  10}},
36468 	{m68k_op_svs_8_al            , 0xffff, 0x59f9, { 20,  20,  10,  10}},
36469 	{m68k_op_trapvs_16           , 0xffff, 0x59fa, {  0,   0,   6,   6}},
36470 	{m68k_op_trapvs_32           , 0xffff, 0x59fb, {  0,   0,   8,   8}},
36471 	{m68k_op_trapvs              , 0xffff, 0x59fc, {  0,   0,   4,   4}},
36472 	{m68k_op_spl_8_pi7           , 0xffff, 0x5adf, { 12,  12,  10,  10}},
36473 	{m68k_op_spl_8_pd7           , 0xffff, 0x5ae7, { 14,  14,  11,  11}},
36474 	{m68k_op_spl_8_aw            , 0xffff, 0x5af8, { 16,  16,  10,  10}},
36475 	{m68k_op_spl_8_al            , 0xffff, 0x5af9, { 20,  20,  10,  10}},
36476 	{m68k_op_trappl_16           , 0xffff, 0x5afa, {  0,   0,   6,   6}},
36477 	{m68k_op_trappl_32           , 0xffff, 0x5afb, {  0,   0,   8,   8}},
36478 	{m68k_op_trappl              , 0xffff, 0x5afc, {  0,   0,   4,   4}},
36479 	{m68k_op_smi_8_pi7           , 0xffff, 0x5bdf, { 12,  12,  10,  10}},
36480 	{m68k_op_smi_8_pd7           , 0xffff, 0x5be7, { 14,  14,  11,  11}},
36481 	{m68k_op_smi_8_aw            , 0xffff, 0x5bf8, { 16,  16,  10,  10}},
36482 	{m68k_op_smi_8_al            , 0xffff, 0x5bf9, { 20,  20,  10,  10}},
36483 	{m68k_op_trapmi_16           , 0xffff, 0x5bfa, {  0,   0,   6,   6}},
36484 	{m68k_op_trapmi_32           , 0xffff, 0x5bfb, {  0,   0,   8,   8}},
36485 	{m68k_op_trapmi              , 0xffff, 0x5bfc, {  0,   0,   4,   4}},
36486 	{m68k_op_sge_8_pi7           , 0xffff, 0x5cdf, { 12,  12,  10,  10}},
36487 	{m68k_op_sge_8_pd7           , 0xffff, 0x5ce7, { 14,  14,  11,  11}},
36488 	{m68k_op_sge_8_aw            , 0xffff, 0x5cf8, { 16,  16,  10,  10}},
36489 	{m68k_op_sge_8_al            , 0xffff, 0x5cf9, { 20,  20,  10,  10}},
36490 	{m68k_op_trapge_16           , 0xffff, 0x5cfa, {  0,   0,   6,   6}},
36491 	{m68k_op_trapge_32           , 0xffff, 0x5cfb, {  0,   0,   8,   8}},
36492 	{m68k_op_trapge              , 0xffff, 0x5cfc, {  0,   0,   4,   4}},
36493 	{m68k_op_slt_8_pi7           , 0xffff, 0x5ddf, { 12,  12,  10,  10}},
36494 	{m68k_op_slt_8_pd7           , 0xffff, 0x5de7, { 14,  14,  11,  11}},
36495 	{m68k_op_slt_8_aw            , 0xffff, 0x5df8, { 16,  16,  10,  10}},
36496 	{m68k_op_slt_8_al            , 0xffff, 0x5df9, { 20,  20,  10,  10}},
36497 	{m68k_op_traplt_16           , 0xffff, 0x5dfa, {  0,   0,   6,   6}},
36498 	{m68k_op_traplt_32           , 0xffff, 0x5dfb, {  0,   0,   8,   8}},
36499 	{m68k_op_traplt              , 0xffff, 0x5dfc, {  0,   0,   4,   4}},
36500 	{m68k_op_sgt_8_pi7           , 0xffff, 0x5edf, { 12,  12,  10,  10}},
36501 	{m68k_op_sgt_8_pd7           , 0xffff, 0x5ee7, { 14,  14,  11,  11}},
36502 	{m68k_op_sgt_8_aw            , 0xffff, 0x5ef8, { 16,  16,  10,  10}},
36503 	{m68k_op_sgt_8_al            , 0xffff, 0x5ef9, { 20,  20,  10,  10}},
36504 	{m68k_op_trapgt_16           , 0xffff, 0x5efa, {  0,   0,   6,   6}},
36505 	{m68k_op_trapgt_32           , 0xffff, 0x5efb, {  0,   0,   8,   8}},
36506 	{m68k_op_trapgt              , 0xffff, 0x5efc, {  0,   0,   4,   4}},
36507 	{m68k_op_sle_8_pi7           , 0xffff, 0x5fdf, { 12,  12,  10,  10}},
36508 	{m68k_op_sle_8_pd7           , 0xffff, 0x5fe7, { 14,  14,  11,  11}},
36509 	{m68k_op_sle_8_aw            , 0xffff, 0x5ff8, { 16,  16,  10,  10}},
36510 	{m68k_op_sle_8_al            , 0xffff, 0x5ff9, { 20,  20,  10,  10}},
36511 	{m68k_op_traple_16           , 0xffff, 0x5ffa, {  0,   0,   6,   6}},
36512 	{m68k_op_traple_32           , 0xffff, 0x5ffb, {  0,   0,   8,   8}},
36513 	{m68k_op_traple              , 0xffff, 0x5ffc, {  0,   0,   4,   4}},
36514 	{m68k_op_bra_16              , 0xffff, 0x6000, { 10,  10,  10,  10}},
36515 	{m68k_op_bra_32              , 0xffff, 0x60ff, { 10,  10,  10,  10}},
36516 	{m68k_op_bsr_16              , 0xffff, 0x6100, { 18,  18,   7,   7}},
36517 	{m68k_op_bsr_32              , 0xffff, 0x61ff, { 18,  18,   7,   7}},
36518 	{m68k_op_bhi_16              , 0xffff, 0x6200, { 10,  10,   6,   6}},
36519 	{m68k_op_bhi_32              , 0xffff, 0x62ff, { 10,  10,   6,   6}},
36520 	{m68k_op_bls_16              , 0xffff, 0x6300, { 10,  10,   6,   6}},
36521 	{m68k_op_bls_32              , 0xffff, 0x63ff, { 10,  10,   6,   6}},
36522 	{m68k_op_bcc_16              , 0xffff, 0x6400, { 10,  10,   6,   6}},
36523 	{m68k_op_bcc_32              , 0xffff, 0x64ff, { 10,  10,   6,   6}},
36524 	{m68k_op_bcs_16              , 0xffff, 0x6500, { 10,  10,   6,   6}},
36525 	{m68k_op_bcs_32              , 0xffff, 0x65ff, { 10,  10,   6,   6}},
36526 	{m68k_op_bne_16              , 0xffff, 0x6600, { 10,  10,   6,   6}},
36527 	{m68k_op_bne_32              , 0xffff, 0x66ff, { 10,  10,   6,   6}},
36528 	{m68k_op_beq_16              , 0xffff, 0x6700, { 10,  10,   6,   6}},
36529 	{m68k_op_beq_32              , 0xffff, 0x67ff, { 10,  10,   6,   6}},
36530 	{m68k_op_bvc_16              , 0xffff, 0x6800, { 10,  10,   6,   6}},
36531 	{m68k_op_bvc_32              , 0xffff, 0x68ff, { 10,  10,   6,   6}},
36532 	{m68k_op_bvs_16              , 0xffff, 0x6900, { 10,  10,   6,   6}},
36533 	{m68k_op_bvs_32              , 0xffff, 0x69ff, { 10,  10,   6,   6}},
36534 	{m68k_op_bpl_16              , 0xffff, 0x6a00, { 10,  10,   6,   6}},
36535 	{m68k_op_bpl_32              , 0xffff, 0x6aff, { 10,  10,   6,   6}},
36536 	{m68k_op_bmi_16              , 0xffff, 0x6b00, { 10,  10,   6,   6}},
36537 	{m68k_op_bmi_32              , 0xffff, 0x6bff, { 10,  10,   6,   6}},
36538 	{m68k_op_bge_16              , 0xffff, 0x6c00, { 10,  10,   6,   6}},
36539 	{m68k_op_bge_32              , 0xffff, 0x6cff, { 10,  10,   6,   6}},
36540 	{m68k_op_blt_16              , 0xffff, 0x6d00, { 10,  10,   6,   6}},
36541 	{m68k_op_blt_32              , 0xffff, 0x6dff, { 10,  10,   6,   6}},
36542 	{m68k_op_bgt_16              , 0xffff, 0x6e00, { 10,  10,   6,   6}},
36543 	{m68k_op_bgt_32              , 0xffff, 0x6eff, { 10,  10,   6,   6}},
36544 	{m68k_op_ble_16              , 0xffff, 0x6f00, { 10,  10,   6,   6}},
36545 	{m68k_op_ble_32              , 0xffff, 0x6fff, { 10,  10,   6,   6}},
36546 	{m68k_op_sbcd_8_mm_axy7      , 0xffff, 0x8f0f, { 18,  18,  16,  16}},
36547 	{m68k_op_pack_16_mm_axy7     , 0xffff, 0x8f4f, {  0,   0,  13,  13}},
36548 	{m68k_op_unpk_16_mm_axy7     , 0xffff, 0x8f8f, {  0,   0,  13,  13}},
36549 	{m68k_op_subx_8_mm_axy7      , 0xffff, 0x9f0f, { 18,  18,  12,  12}},
36550 	{m68k_op_cmpm_8_axy7         , 0xffff, 0xbf0f, { 12,  12,   9,   9}},
36551 	{m68k_op_abcd_8_mm_axy7      , 0xffff, 0xcf0f, { 18,  18,  16,  16}},
36552 	{m68k_op_addx_8_mm_axy7      , 0xffff, 0xdf0f, { 18,  18,  12,  12}},
36553 	{m68k_op_asr_16_aw           , 0xffff, 0xe0f8, { 16,  16,   9,   9}},
36554 	{m68k_op_asr_16_al           , 0xffff, 0xe0f9, { 20,  20,   9,   9}},
36555 	{m68k_op_asl_16_aw           , 0xffff, 0xe1f8, { 16,  16,  10,  10}},
36556 	{m68k_op_asl_16_al           , 0xffff, 0xe1f9, { 20,  20,  10,  10}},
36557 	{m68k_op_lsr_16_aw           , 0xffff, 0xe2f8, { 16,  16,   9,   9}},
36558 	{m68k_op_lsr_16_al           , 0xffff, 0xe2f9, { 20,  20,   9,   9}},
36559 	{m68k_op_lsl_16_aw           , 0xffff, 0xe3f8, { 16,  16,   9,   9}},
36560 	{m68k_op_lsl_16_al           , 0xffff, 0xe3f9, { 20,  20,   9,   9}},
36561 	{m68k_op_roxr_16_aw          , 0xffff, 0xe4f8, { 16,  16,   9,   9}},
36562 	{m68k_op_roxr_16_al          , 0xffff, 0xe4f9, { 20,  20,   9,   9}},
36563 	{m68k_op_roxl_16_aw          , 0xffff, 0xe5f8, { 16,  16,   9,   9}},
36564 	{m68k_op_roxl_16_al          , 0xffff, 0xe5f9, { 20,  20,   9,   9}},
36565 	{m68k_op_ror_16_aw           , 0xffff, 0xe6f8, { 16,  16,  11,  11}},
36566 	{m68k_op_ror_16_al           , 0xffff, 0xe6f9, { 20,  20,  11,  11}},
36567 	{m68k_op_rol_16_aw           , 0xffff, 0xe7f8, { 16,  16,  11,  11}},
36568 	{m68k_op_rol_16_al           , 0xffff, 0xe7f9, { 20,  20,  11,  11}},
36569 	{m68k_op_bftst_32_aw         , 0xffff, 0xe8f8, {  0,   0,  17,  17}},
36570 	{m68k_op_bftst_32_al         , 0xffff, 0xe8f9, {  0,   0,  17,  17}},
36571 	{m68k_op_bftst_32_pcdi       , 0xffff, 0xe8fa, {  0,   0,  18,  18}},
36572 	{m68k_op_bftst_32_pcix       , 0xffff, 0xe8fb, {  0,   0,  20,  20}},
36573 	{m68k_op_bfextu_32_aw        , 0xffff, 0xe9f8, {  0,   0,  19,  19}},
36574 	{m68k_op_bfextu_32_al        , 0xffff, 0xe9f9, {  0,   0,  19,  19}},
36575 	{m68k_op_bfextu_32_pcdi      , 0xffff, 0xe9fa, {  0,   0,  20,  20}},
36576 	{m68k_op_bfextu_32_pcix      , 0xffff, 0xe9fb, {  0,   0,  22,  22}},
36577 	{m68k_op_bfchg_32_aw         , 0xffff, 0xeaf8, {  0,   0,  24,  24}},
36578 	{m68k_op_bfchg_32_al         , 0xffff, 0xeaf9, {  0,   0,  24,  24}},
36579 	{m68k_op_bfexts_32_aw        , 0xffff, 0xebf8, {  0,   0,  19,  19}},
36580 	{m68k_op_bfexts_32_al        , 0xffff, 0xebf9, {  0,   0,  19,  19}},
36581 	{m68k_op_bfexts_32_pcdi      , 0xffff, 0xebfa, {  0,   0,  20,  20}},
36582 	{m68k_op_bfexts_32_pcix      , 0xffff, 0xebfb, {  0,   0,  22,  22}},
36583 	{m68k_op_bfclr_32_aw         , 0xffff, 0xecf8, {  0,   0,  24,  24}},
36584 	{m68k_op_bfclr_32_al         , 0xffff, 0xecf9, {  0,   0,  24,  24}},
36585 	{m68k_op_bfffo_32_aw         , 0xffff, 0xedf8, {  0,   0,  32,  32}},
36586 	{m68k_op_bfffo_32_al         , 0xffff, 0xedf9, {  0,   0,  32,  32}},
36587 	{m68k_op_bfffo_32_pcdi       , 0xffff, 0xedfa, {  0,   0,  33,  33}},
36588 	{m68k_op_bfffo_32_pcix       , 0xffff, 0xedfb, {  0,   0,  35,  35}},
36589 	{m68k_op_bfset_32_aw         , 0xffff, 0xeef8, {  0,   0,  24,  24}},
36590 	{m68k_op_bfset_32_al         , 0xffff, 0xeef9, {  0,   0,  24,  24}},
36591 	{m68k_op_bfins_32_aw         , 0xffff, 0xeff8, {  0,   0,  21,  21}},
36592 	{m68k_op_bfins_32_al         , 0xffff, 0xeff9, {  0,   0,  21,  21}},
36593 	{m68k_op_pflush_32           , 0xffff, 0xf518, {  0,   0,   0,   4}},
36594 	{0, 0, 0, {0, 0, 0, 0}}
36595 };
36596 
36597 
36598 /* Build the opcode handler jump table */
m68ki_build_opcode_table(void)36599 void m68ki_build_opcode_table(void)
36600 {
36601 	const opcode_handler_struct *ostruct;
36602 	int instr;
36603 	int i;
36604 	int j;
36605 	int k;
36606 
36607 	for(i = 0; i < 0x10000; i++)
36608 	{
36609 		/* default to illegal */
36610 		m68ki_instruction_jump_table[i] = m68k_op_illegal;
36611 		for(k=0;k<NUM_CPU_TYPES;k++)
36612 			m68ki_cycles[k][i] = 0;
36613 	}
36614 
36615 	ostruct = m68k_opcode_handler_table;
36616 	while(ostruct->mask != 0xff00)
36617 	{
36618 		for(i = 0;i < 0x10000;i++)
36619 		{
36620 			if((i & ostruct->mask) == ostruct->match)
36621 			{
36622 				m68ki_instruction_jump_table[i] = ostruct->opcode_handler;
36623 				for(k=0;k<NUM_CPU_TYPES;k++)
36624 					m68ki_cycles[k][i] = ostruct->cycles[k];
36625 			}
36626 		}
36627 		ostruct++;
36628 	}
36629 	while(ostruct->mask == 0xff00)
36630 	{
36631 		for(i = 0;i <= 0xff;i++)
36632 		{
36633 			m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler;
36634 			for(k=0;k<NUM_CPU_TYPES;k++)
36635 				m68ki_cycles[k][ostruct->match | i] = ostruct->cycles[k];
36636 		}
36637 		ostruct++;
36638 	}
36639 	while(ostruct->mask == 0xf1f8)
36640 	{
36641 		for(i = 0;i < 8;i++)
36642 		{
36643 			for(j = 0;j < 8;j++)
36644 			{
36645 				instr = ostruct->match | (i << 9) | j;
36646 				m68ki_instruction_jump_table[instr] = ostruct->opcode_handler;
36647 				for(k=0;k<NUM_CPU_TYPES;k++)
36648 					m68ki_cycles[k][instr] = ostruct->cycles[k];
36649 			}
36650 		}
36651 		ostruct++;
36652 	}
36653 	while(ostruct->mask == 0xfff0)
36654 	{
36655 		for(i = 0;i <= 0x0f;i++)
36656 		{
36657 			m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler;
36658 			for(k=0;k<NUM_CPU_TYPES;k++)
36659 				m68ki_cycles[k][ostruct->match | i] = ostruct->cycles[k];
36660 		}
36661 		ostruct++;
36662 	}
36663 	while(ostruct->mask == 0xf1ff)
36664 	{
36665 		for(i = 0;i <= 0x07;i++)
36666 		{
36667 			m68ki_instruction_jump_table[ostruct->match | (i << 9)] = ostruct->opcode_handler;
36668 			for(k=0;k<NUM_CPU_TYPES;k++)
36669 				m68ki_cycles[k][ostruct->match | (i << 9)] = ostruct->cycles[k];
36670 		}
36671 		ostruct++;
36672 	}
36673 	while(ostruct->mask == 0xfff8)
36674 	{
36675 		for(i = 0;i <= 0x07;i++)
36676 		{
36677 			m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler;
36678 			for(k=0;k<NUM_CPU_TYPES;k++)
36679 				m68ki_cycles[k][ostruct->match | i] = ostruct->cycles[k];
36680 		}
36681 		ostruct++;
36682 	}
36683 	while(ostruct->mask == 0xffff)
36684 	{
36685 		m68ki_instruction_jump_table[ostruct->match] = ostruct->opcode_handler;
36686 		for(k=0;k<NUM_CPU_TYPES;k++)
36687 			m68ki_cycles[k][ostruct->match] = ostruct->cycles[k];
36688 		ostruct++;
36689 	}
36690 }
36691 
36692 
36693 /* ======================================================================== */
36694 /* ============================== END OF FILE ============================= */
36695 /* ======================================================================== */
36696 
36697 
36698