#include <stdio.h>
#include "m68k/m68kcpu.h"
extern void m68040_fpu_op0(void);
extern void m68040_fpu_op1(void);
extern void m68881_mmu_ops();

/* ======================================================================== */
/* ========================= INSTRUCTION HANDLERS ========================= */
/* ======================================================================== */


static void m68k_op_1010(struct m68k_module *module)
{
	m68ki_exception_1010(module);
}


static void m68k_op_1111(struct m68k_module *module)
{
	m68ki_exception_1111(module);
}


static void m68k_op_abcd_8_rr(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = DY;
	uint dst = *r_dst;
	uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();

	FLAG_V = ~res; /* Undefined V behavior */

	if(res > 9)
		res += 6;
	res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
	FLAG_X = FLAG_C = (res > 0x99) << 8;
	if(FLAG_C)
		res -= 0xa0;

	FLAG_V &= res; /* Undefined V behavior part II */
	FLAG_N = NFLAG_8(res); /* Undefined N behavior */

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
}


static void m68k_op_abcd_8_mm_ax7(struct m68k_module *module)
{
	uint src = OPER_AY_PD_8(module);
	uint ea  = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();

	FLAG_V = ~res; /* Undefined V behavior */

	if(res > 9)
		res += 6;
	res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
	FLAG_X = FLAG_C = (res > 0x99) << 8;
	if(FLAG_C)
		res -= 0xa0;

	FLAG_V &= res; /* Undefined V behavior part II */
	FLAG_N = NFLAG_8(res); /* Undefined N behavior */

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_abcd_8_mm_ay7(struct m68k_module *module)
{
	uint src = OPER_A7_PD_8(module);
	uint ea  = EA_AX_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();

	FLAG_V = ~res; /* Undefined V behavior */

	if(res > 9)
		res += 6;
	res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
	FLAG_X = FLAG_C = (res > 0x99) << 8;
	if(FLAG_C)
		res -= 0xa0;

	FLAG_V &= res; /* Undefined V behavior part II */
	FLAG_N = NFLAG_8(res); /* Undefined N behavior */

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_abcd_8_mm_axy7(struct m68k_module *module)
{
	uint src = OPER_A7_PD_8(module);
	uint ea  = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();

	FLAG_V = ~res; /* Undefined V behavior */

	if(res > 9)
		res += 6;
	res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
	FLAG_X = FLAG_C = (res > 0x99) << 8;
	if(FLAG_C)
		res -= 0xa0;

	FLAG_V &= res; /* Undefined V behavior part II */
	FLAG_N = NFLAG_8(res); /* Undefined N behavior */

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_abcd_8_mm(struct m68k_module *module)
{
	uint src = OPER_AY_PD_8(module);
	uint ea  = EA_AX_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();

	FLAG_V = ~res; /* Undefined V behavior */

	if(res > 9)
		res += 6;
	res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
	FLAG_X = FLAG_C = (res > 0x99) << 8;
	if(FLAG_C)
		res -= 0xa0;

	FLAG_V &= res; /* Undefined V behavior part II */
	FLAG_N = NFLAG_8(res); /* Undefined N behavior */

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_add_8_er_d(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_8(DY);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_ai(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_AI_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_pi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PI_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_pi7(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_A7_PI_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_pd(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PD_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_pd7(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_A7_PD_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_di(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_DI_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_ix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_IX_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_aw(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AW_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_al(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AL_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_pcdi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCDI_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_pcix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCIX_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_8_er_i(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_I_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_d(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_16(DY);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_a(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_16(AY);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_ai(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_AI_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_pi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PI_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_pd(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PD_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_di(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_DI_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_ix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_IX_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_aw(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AW_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_al(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AL_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_pcdi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCDI_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_pcix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCIX_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_16_er_i(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_I_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_add_32_er_d(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = DY;
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_a(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = AY;
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_ai(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_AI_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_pi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PI_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_pd(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PD_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_di(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_DI_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_ix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_IX_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_aw(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AW_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_al(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AL_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_pcdi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCDI_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_pcix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCIX_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_32_er_i(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_I_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_add_8_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_add_8_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_add_8_re_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_add_8_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_add_8_re_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_add_8_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_add_8_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_add_8_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_add_8_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_add_16_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_add_16_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_add_16_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_add_16_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_add_16_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_add_16_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_add_16_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_add_32_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_add_32_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_add_32_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_add_32_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_add_32_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_add_32_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_add_32_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_adda_16_d(struct m68k_module *module)
{
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(DY));
}


static void m68k_op_adda_16_a(struct m68k_module *module)
{
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(AY));
}


static void m68k_op_adda_16_ai(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AY_AI_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_16_pi(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AY_PI_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_16_pd(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AY_PD_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_16_di(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AY_DI_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_16_ix(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AY_IX_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_16_aw(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AW_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_16_al(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AL_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_16_pcdi(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_PCDI_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_16_pcix(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_PCIX_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_16_i(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_I_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_32_d(struct m68k_module *module)
{
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + DY);
}


static void m68k_op_adda_32_a(struct m68k_module *module)
{
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + AY);
}


static void m68k_op_adda_32_ai(struct m68k_module *module)
{
	uint src = OPER_AY_AI_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_32_pi(struct m68k_module *module)
{
	uint src = OPER_AY_PI_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_32_pd(struct m68k_module *module)
{
	uint src = OPER_AY_PD_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_32_di(struct m68k_module *module)
{
	uint src = OPER_AY_DI_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_32_ix(struct m68k_module *module)
{
	uint src = OPER_AY_IX_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_32_aw(struct m68k_module *module)
{
	uint src = OPER_AW_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_32_al(struct m68k_module *module)
{
	uint src = OPER_AL_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_32_pcdi(struct m68k_module *module)
{
	uint src = OPER_PCDI_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_32_pcix(struct m68k_module *module)
{
	uint src = OPER_PCIX_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_adda_32_i(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
}


static void m68k_op_addi_8_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = OPER_I_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_addi_8_ai(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_AI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addi_8_pi(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addi_8_pi7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_A7_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addi_8_pd(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addi_8_pd7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addi_8_di(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_DI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addi_8_ix(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_IX_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addi_8_aw(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AW_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addi_8_al(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AL_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addi_16_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = OPER_I_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_addi_16_ai(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_AI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addi_16_pi(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_PI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addi_16_pd(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_PD_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addi_16_di(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_DI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addi_16_ix(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_IX_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addi_16_aw(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AW_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addi_16_al(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AL_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addi_32_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = OPER_I_32(module);
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_addi_32_ai(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_AI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addi_32_pi(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_PI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addi_32_pd(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_PD_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addi_32_di(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_DI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addi_32_ix(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_IX_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addi_32_aw(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AW_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addi_32_al(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AL_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addq_8_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_addq_8_ai(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_AI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addq_8_pi(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addq_8_pi7(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_A7_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addq_8_pd(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addq_8_pd7(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addq_8_di(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_DI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addq_8_ix(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_IX_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addq_8_aw(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AW_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addq_8_al(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AL_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_addq_16_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_addq_16_a(struct m68k_module *module)
{
	uint* r_dst = &AY;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + (((REG_IR >> 9) - 1) & 7) + 1);
}


static void m68k_op_addq_16_ai(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_AI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addq_16_pi(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addq_16_pd(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PD_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addq_16_di(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_DI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addq_16_ix(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_IX_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addq_16_aw(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AW_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addq_16_al(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AL_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst;

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_addq_32_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint dst = *r_dst;
	uint res = src + dst;

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_addq_32_a(struct m68k_module *module)
{
	uint* r_dst = &AY;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst + (((REG_IR >> 9) - 1) & 7) + 1);
}


static void m68k_op_addq_32_ai(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_AI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;


	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addq_32_pi(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;


	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addq_32_pd(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PD_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;


	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addq_32_di(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_DI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;


	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addq_32_ix(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_IX_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;


	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addq_32_aw(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AW_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;


	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addq_32_al(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AL_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst;


	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_addx_8_rr(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_8(DY);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src + dst + XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
}


static void m68k_op_addx_16_rr(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_16(DY);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src + dst + XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
}


static void m68k_op_addx_32_rr(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = DY;
	uint dst = *r_dst;
	uint res = src + dst + XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	*r_dst = res;
}


static void m68k_op_addx_8_mm_ax7(struct m68k_module *module)
{
	uint src = OPER_AY_PD_8(module);
	uint ea  = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst + XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_addx_8_mm_ay7(struct m68k_module *module)
{
	uint src = OPER_A7_PD_8(module);
	uint ea  = EA_AX_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst + XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_addx_8_mm_axy7(struct m68k_module *module)
{
	uint src = OPER_A7_PD_8(module);
	uint ea  = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst + XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_addx_8_mm(struct m68k_module *module)
{
	uint src = OPER_AY_PD_8(module);
	uint ea  = EA_AX_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = src + dst + XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_V = VFLAG_ADD_8(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_8(res);

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_addx_16_mm(struct m68k_module *module)
{
	uint src = OPER_AY_PD_16(module);
	uint ea  = EA_AX_PD_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = src + dst + XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_V = VFLAG_ADD_16(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_16(res);

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_addx_32_mm(struct m68k_module *module)
{
	uint src = OPER_AY_PD_32(module);
	uint ea  = EA_AX_PD_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = src + dst + XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_ADD_32(src, dst, res);
	FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_and_8_er_d(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (DY | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_ai(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_AI_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_pi(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_PI_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_pi7(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_A7_PI_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_pd(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_PD_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_pd7(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_A7_PD_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_di(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_DI_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_ix(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_IX_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_aw(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AW_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_al(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AL_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_pcdi(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_PCDI_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_pcix(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_PCIX_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_er_i(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_I_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_d(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (DY | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_ai(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_AI_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_pi(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_PI_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_pd(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_PD_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_di(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_DI_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_ix(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_IX_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_aw(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AW_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_al(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AL_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_pcdi(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_PCDI_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_pcix(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_PCIX_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_16_er_i(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_I_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_d(struct m68k_module *module)
{
	FLAG_Z = DX &= DY;

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_ai(struct m68k_module *module)
{
	FLAG_Z = DX &= OPER_AY_AI_32(module);

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_pi(struct m68k_module *module)
{
	FLAG_Z = DX &= OPER_AY_PI_32(module);

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_pd(struct m68k_module *module)
{
	FLAG_Z = DX &= OPER_AY_PD_32(module);

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_di(struct m68k_module *module)
{
	FLAG_Z = DX &= OPER_AY_DI_32(module);

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_ix(struct m68k_module *module)
{
	FLAG_Z = DX &= OPER_AY_IX_32(module);

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_aw(struct m68k_module *module)
{
	FLAG_Z = DX &= OPER_AW_32(module);

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_al(struct m68k_module *module)
{
	FLAG_Z = DX &= OPER_AL_32(module);

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_pcdi(struct m68k_module *module)
{
	FLAG_Z = DX &= OPER_PCDI_32(module);

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_pcix(struct m68k_module *module)
{
	FLAG_Z = DX &= OPER_PCIX_32(module);

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_32_er_i(struct m68k_module *module)
{
	FLAG_Z = DX &= OPER_I_32(module);

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_and_8_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint res = DX & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_and_8_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint res = DX & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_and_8_re_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint res = DX & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_and_8_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint res = DX & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_and_8_re_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint res = DX & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_and_8_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint res = DX & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_and_8_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint res = DX & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_and_8_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint res = DX & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_and_8_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint res = DX & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_and_16_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint res = DX & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_and_16_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint res = DX & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_and_16_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint res = DX & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_and_16_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint res = DX & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_and_16_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint res = DX & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_and_16_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint res = DX & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_and_16_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint res = DX & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_and_32_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_32(module);
	uint res = DX & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_and_32_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_32(module);
	uint res = DX & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_and_32_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_32(module);
	uint res = DX & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_and_32_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);
	uint res = DX & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_and_32_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_32(module);
	uint res = DX & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_and_32_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_32(module);
	uint res = DX & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_and_32_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_32(module);
	uint res = DX & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_andi_8_d(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_8(DY &= (OPER_I_8(module) | 0xffffff00));

	FLAG_N = NFLAG_8(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_andi_8_ai(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_AI_8(module);
	uint res = src & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_andi_8_pi(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_PI_8(module);
	uint res = src & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_andi_8_pi7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_A7_PI_8(module);
	uint res = src & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_andi_8_pd(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_PD_8(module);
	uint res = src & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_andi_8_pd7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_A7_PD_8(module);
	uint res = src & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_andi_8_di(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_DI_8(module);
	uint res = src & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_andi_8_ix(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_IX_8(module);
	uint res = src & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_andi_8_aw(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AW_8(module);
	uint res = src & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_andi_8_al(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AL_8(module);
	uint res = src & m68ki_read_8(module, ea);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_andi_16_d(struct m68k_module *module)
{
	FLAG_Z = MASK_OUT_ABOVE_16(DY &= (OPER_I_16(module) | 0xffff0000));

	FLAG_N = NFLAG_16(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_andi_16_ai(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_AI_16(module);
	uint res = src & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_andi_16_pi(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_PI_16(module);
	uint res = src & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_andi_16_pd(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_PD_16(module);
	uint res = src & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_andi_16_di(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_DI_16(module);
	uint res = src & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_andi_16_ix(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_IX_16(module);
	uint res = src & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_andi_16_aw(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AW_16(module);
	uint res = src & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_andi_16_al(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AL_16(module);
	uint res = src & m68ki_read_16(module, ea);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_andi_32_d(struct m68k_module *module)
{
	FLAG_Z = DY &= (OPER_I_32(module));

	FLAG_N = NFLAG_32(FLAG_Z);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_andi_32_ai(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_AI_32(module);
	uint res = src & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_andi_32_pi(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_PI_32(module);
	uint res = src & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_andi_32_pd(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_PD_32(module);
	uint res = src & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_andi_32_di(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_DI_32(module);
	uint res = src & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_andi_32_ix(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_IX_32(module);
	uint res = src & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_andi_32_aw(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AW_32(module);
	uint res = src & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_andi_32_al(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AL_32(module);
	uint res = src & m68ki_read_32(module, ea);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_andi_16_toc(struct m68k_module *module)
{
	m68ki_set_ccr(module, m68ki_get_ccr() & OPER_I_8(module));
}


static void m68k_op_andi_16_tos(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint src = OPER_I_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, m68ki_get_sr() & src);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_asr_8_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src >> shift;

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	if(GET_MSB_8(src))
		res |= m68ki_shift_8_table[shift];

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_X = FLAG_C = src << (9-shift);
}


static void m68k_op_asr_16_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src >> shift;

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	if(GET_MSB_16(src))
		res |= m68ki_shift_16_table[shift];

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_X = FLAG_C = src << (9-shift);
}


static void m68k_op_asr_32_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = *r_dst;
	uint res = src >> shift;

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	if(GET_MSB_32(src))
		res |= m68ki_shift_32_table[shift];

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_X = FLAG_C = src << (9-shift);
}


static void m68k_op_asr_8_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src >> shift;

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift < 8)
		{
			if(GET_MSB_8(src))
				res |= m68ki_shift_8_table[shift];

			*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

			FLAG_X = FLAG_C = src << (9-shift);
			FLAG_N = NFLAG_8(res);
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		if(GET_MSB_8(src))
		{
			*r_dst |= 0xff;
			FLAG_C = CFLAG_SET;
			FLAG_X = XFLAG_SET;
			FLAG_N = NFLAG_SET;
			FLAG_Z = ZFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		*r_dst &= 0xffffff00;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_8(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_asr_16_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src >> shift;

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift < 16)
		{
			if(GET_MSB_16(src))
				res |= m68ki_shift_16_table[shift];

			*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

			FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
			FLAG_N = NFLAG_16(res);
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		if(GET_MSB_16(src))
		{
			*r_dst |= 0xffff;
			FLAG_C = CFLAG_SET;
			FLAG_X = XFLAG_SET;
			FLAG_N = NFLAG_SET;
			FLAG_Z = ZFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		*r_dst &= 0xffff0000;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_16(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_asr_32_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = *r_dst;
	uint res = src >> shift;

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift < 32)
		{
			if(GET_MSB_32(src))
				res |= m68ki_shift_32_table[shift];

			*r_dst = res;

			FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
			FLAG_N = NFLAG_32(res);
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		if(GET_MSB_32(src))
		{
			*r_dst = 0xffffffff;
			FLAG_C = CFLAG_SET;
			FLAG_X = XFLAG_SET;
			FLAG_N = NFLAG_SET;
			FLAG_Z = ZFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		*r_dst = 0;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_32(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_asr_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	if(GET_MSB_16(src))
		res |= 0x8000;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = FLAG_X = src << 8;
}


static void m68k_op_asr_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	if(GET_MSB_16(src))
		res |= 0x8000;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = FLAG_X = src << 8;
}


static void m68k_op_asr_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	if(GET_MSB_16(src))
		res |= 0x8000;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = FLAG_X = src << 8;
}


static void m68k_op_asr_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	if(GET_MSB_16(src))
		res |= 0x8000;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = FLAG_X = src << 8;
}


static void m68k_op_asr_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	if(GET_MSB_16(src))
		res |= 0x8000;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = FLAG_X = src << 8;
}


static void m68k_op_asr_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	if(GET_MSB_16(src))
		res |= 0x8000;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = FLAG_X = src << 8;
}


static void m68k_op_asr_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	if(GET_MSB_16(src))
		res |= 0x8000;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = FLAG_X = src << 8;
}


static void m68k_op_asl_8_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = MASK_OUT_ABOVE_8(src << shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_X = FLAG_C = src << shift;
	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	src &= m68ki_shift_8_table[shift + 1];
	FLAG_V = (!(src == 0 || (src == m68ki_shift_8_table[shift + 1] && shift < 8)))<<7;
}


static void m68k_op_asl_16_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = MASK_OUT_ABOVE_16(src << shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> (8-shift);
	src &= m68ki_shift_16_table[shift + 1];
	FLAG_V = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7;
}


static void m68k_op_asl_32_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = *r_dst;
	uint res = MASK_OUT_ABOVE_32(src << shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> (24-shift);
	src &= m68ki_shift_32_table[shift + 1];
	FLAG_V = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7;
}


static void m68k_op_asl_8_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = MASK_OUT_ABOVE_8(src << shift);

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift < 8)
		{
			*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
			FLAG_X = FLAG_C = src << shift;
			FLAG_N = NFLAG_8(res);
			FLAG_Z = res;
			src &= m68ki_shift_8_table[shift + 1];
			FLAG_V = (!(src == 0 || src == m68ki_shift_8_table[shift + 1]))<<7;
			return;
		}

		*r_dst &= 0xffffff00;
		FLAG_X = FLAG_C = ((shift == 8 ? src & 1 : 0))<<8;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = (!(src == 0))<<7;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_8(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_asl_16_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = MASK_OUT_ABOVE_16(src << shift);

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift < 16)
		{
			*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
			FLAG_X = FLAG_C = (src << shift) >> 8;
			FLAG_N = NFLAG_16(res);
			FLAG_Z = res;
			src &= m68ki_shift_16_table[shift + 1];
			FLAG_V = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7;
			return;
		}

		*r_dst &= 0xffff0000;
		FLAG_X = FLAG_C = ((shift == 16 ? src & 1 : 0))<<8;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = (!(src == 0))<<7;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_16(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_asl_32_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = *r_dst;
	uint res = MASK_OUT_ABOVE_32(src << shift);

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift < 32)
		{
			*r_dst = res;
			FLAG_X = FLAG_C = (src >> (32 - shift)) << 8;
			FLAG_N = NFLAG_32(res);
			FLAG_Z = res;
			src &= m68ki_shift_32_table[shift + 1];
			FLAG_V = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7;
			return;
		}

		*r_dst = 0;
		FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = (!(src == 0))<<7;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_32(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_asl_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	src &= 0xc000;
	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
}


static void m68k_op_asl_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	src &= 0xc000;
	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
}


static void m68k_op_asl_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	src &= 0xc000;
	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
}


static void m68k_op_asl_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	src &= 0xc000;
	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
}


static void m68k_op_asl_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	src &= 0xc000;
	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
}


static void m68k_op_asl_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	src &= 0xc000;
	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
}


static void m68k_op_asl_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	src &= 0xc000;
	FLAG_V = (!(src == 0 || src == 0xc000))<<7;
}


static void m68k_op_bhi_8(struct m68k_module *module)
{
	if(COND_HI())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bls_8(struct m68k_module *module)
{
	if(COND_LS())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bcc_8(struct m68k_module *module)
{
	if(COND_CC())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bcs_8(struct m68k_module *module)
{
	if(COND_CS())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bne_8(struct m68k_module *module)
{
	if(COND_NE())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_beq_8(struct m68k_module *module)
{
	if(COND_EQ())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bvc_8(struct m68k_module *module)
{
	if(COND_VC())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bvs_8(struct m68k_module *module)
{
	if(COND_VS())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bpl_8(struct m68k_module *module)
{
	if(COND_PL())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bmi_8(struct m68k_module *module)
{
	if(COND_MI())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bge_8(struct m68k_module *module)
{
	if(COND_GE())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_blt_8(struct m68k_module *module)
{
	if(COND_LT())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bgt_8(struct m68k_module *module)
{
	if(COND_GT())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_ble_8(struct m68k_module *module)
{
	if(COND_LE())
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		return;
	}
	USE_CYCLES(CYC_BCC_NOTAKE_B);
}


static void m68k_op_bhi_16(struct m68k_module *module)
{
	if(COND_HI())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bls_16(struct m68k_module *module)
{
	if(COND_LS())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bcc_16(struct m68k_module *module)
{
	if(COND_CC())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bcs_16(struct m68k_module *module)
{
	if(COND_CS())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bne_16(struct m68k_module *module)
{
	if(COND_NE())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_beq_16(struct m68k_module *module)
{
	if(COND_EQ())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bvc_16(struct m68k_module *module)
{
	if(COND_VC())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bvs_16(struct m68k_module *module)
{
	if(COND_VS())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bpl_16(struct m68k_module *module)
{
	if(COND_PL())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bmi_16(struct m68k_module *module)
{
	if(COND_MI())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bge_16(struct m68k_module *module)
{
	if(COND_GE())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_blt_16(struct m68k_module *module)
{
	if(COND_LT())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bgt_16(struct m68k_module *module)
{
	if(COND_GT())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_ble_16(struct m68k_module *module)
{
	if(COND_LE())
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_BCC_NOTAKE_W);
}


static void m68k_op_bhi_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_HI())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_HI())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bls_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_LS())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_LS())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bcc_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_CC())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_CC())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bcs_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_CS())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_CS())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bne_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_NE())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_NE())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_beq_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_EQ())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_EQ())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bvc_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_VC())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_VC())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bvs_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_VS())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_VS())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bpl_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_PL())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_PL())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bmi_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_MI())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_MI())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bge_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_GE())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_GE())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_blt_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_LT())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_LT())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bgt_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_GT())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_GT())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_ble_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		if(COND_LE())
		{
			uint offset = OPER_I_32(module);
			REG_PC -= 4;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_32(module, offset);
			return;
		}
		REG_PC += 4;
		return;
	}
	else
	{
		if(COND_LE())
		{
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
			return;
		}
		USE_CYCLES(CYC_BCC_NOTAKE_B);
	}
}


static void m68k_op_bchg_32_r_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint mask = 1 << (DX & 0x1f);

	FLAG_Z = *r_dst & mask;
	*r_dst ^= mask;
}


static void m68k_op_bchg_8_r_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_r_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_r_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_r_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_r_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_r_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_r_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_r_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_r_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_32_s_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint mask = 1 << (OPER_I_8(module) & 0x1f);

	FLAG_Z = *r_dst & mask;
	*r_dst ^= mask;
}


static void m68k_op_bchg_8_s_ai(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_AI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_s_pi(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_PI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_s_pi7(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_A7_PI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_s_pd(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_PD_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_s_pd7(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_A7_PD_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_s_di(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_DI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_s_ix(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_IX_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_s_aw(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AW_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bchg_8_s_al(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AL_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src ^ mask);
}


static void m68k_op_bclr_32_r_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint mask = 1 << (DX & 0x1f);

	FLAG_Z = *r_dst & mask;
	*r_dst &= ~mask;
}


static void m68k_op_bclr_8_r_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_r_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_r_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_r_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_r_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_r_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_r_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_r_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_r_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_32_s_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint mask = 1 << (OPER_I_8(module) & 0x1f);

	FLAG_Z = *r_dst & mask;
	*r_dst &= ~mask;
}


static void m68k_op_bclr_8_s_ai(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_AI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_s_pi(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_PI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_s_pi7(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_A7_PI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_s_pd(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_PD_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_s_pd7(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_A7_PD_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_s_di(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_DI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_s_ix(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_IX_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_s_aw(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AW_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bclr_8_s_al(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AL_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src & ~mask);
}


static void m68k_op_bra_8(struct m68k_module *module)
{
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
	if(REG_PC == REG_PPC)
		USE_ALL_CYCLES();
}


static void m68k_op_bra_16(struct m68k_module *module)
{
	uint offset = OPER_I_16(module);
	REG_PC -= 2;
	m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
	m68ki_branch_16(module, offset);
	if(REG_PC == REG_PPC)
		USE_ALL_CYCLES();
}


static void m68k_op_bra_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		uint offset = OPER_I_32(module);
		REG_PC -= 4;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_32(module, offset);
		if(REG_PC == REG_PPC)
			USE_ALL_CYCLES();
		return;
	}
	else
	{
		m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
		if(REG_PC == REG_PPC)
			USE_ALL_CYCLES();
	}
}


static void m68k_op_bset_32_r_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint mask = 1 << (DX & 0x1f);

	FLAG_Z = *r_dst & mask;
	*r_dst |= mask;
}


static void m68k_op_bset_8_r_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_r_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_r_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_r_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_r_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_r_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_r_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_r_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_r_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint src = m68ki_read_8(module, ea);
	uint mask = 1 << (DX & 7);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_32_s_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint mask = 1 << (OPER_I_8(module) & 0x1f);

	FLAG_Z = *r_dst & mask;
	*r_dst |= mask;
}


static void m68k_op_bset_8_s_ai(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_AI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_s_pi(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_PI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_s_pi7(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_A7_PI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_s_pd(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_PD_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_s_pd7(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_A7_PD_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_s_di(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_DI_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_s_ix(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AY_IX_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_s_aw(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AW_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bset_8_s_al(struct m68k_module *module)
{
	uint mask = 1 << (OPER_I_8(module) & 7);
	uint ea = EA_AL_8(module);
	uint src = m68ki_read_8(module, ea);

	FLAG_Z = src & mask;
	m68ki_write_8(module, ea, src | mask);
}


static void m68k_op_bsr_8(struct m68k_module *module)
{
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_push_32(module, REG_PC);
	m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
}


static void m68k_op_bsr_16(struct m68k_module *module)
{
	uint offset = OPER_I_16(module);
	m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
	m68ki_push_32(module, REG_PC);
	REG_PC -= 2;
	m68ki_branch_16(module, offset);
}


static void m68k_op_bsr_32(struct m68k_module *module)
{
	if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
	{
		uint offset = OPER_I_32(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_push_32(module, REG_PC);
		REG_PC -= 4;
		m68ki_branch_32(module, offset);
		return;
	}
	else
	{
		m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
		m68ki_push_32(module, REG_PC);
		m68ki_branch_8(module, MASK_OUT_ABOVE_8(REG_IR));
	}
}


static void m68k_op_btst_32_r_d(struct m68k_module *module)
{
	FLAG_Z = DY & (1 << (DX & 0x1f));
}


static void m68k_op_btst_8_r_ai(struct m68k_module *module)
{
	FLAG_Z = OPER_AY_AI_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_pi(struct m68k_module *module)
{
	FLAG_Z = OPER_AY_PI_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_pi7(struct m68k_module *module)
{
	FLAG_Z = OPER_A7_PI_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_pd(struct m68k_module *module)
{
	FLAG_Z = OPER_AY_PD_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_pd7(struct m68k_module *module)
{
	FLAG_Z = OPER_A7_PD_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_di(struct m68k_module *module)
{
	FLAG_Z = OPER_AY_DI_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_ix(struct m68k_module *module)
{
	FLAG_Z = OPER_AY_IX_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_aw(struct m68k_module *module)
{
	FLAG_Z = OPER_AW_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_al(struct m68k_module *module)
{
	FLAG_Z = OPER_AL_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_pcdi(struct m68k_module *module)
{
	FLAG_Z = OPER_PCDI_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_pcix(struct m68k_module *module)
{
	FLAG_Z = OPER_PCIX_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_8_r_i(struct m68k_module *module)
{
	FLAG_Z = OPER_I_8(module) & (1 << (DX & 7));
}


static void m68k_op_btst_32_s_d(struct m68k_module *module)
{
	FLAG_Z = DY & (1 << (OPER_I_8(module) & 0x1f));
}


static void m68k_op_btst_8_s_ai(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_AY_AI_8(module) & (1 << bit);
}


static void m68k_op_btst_8_s_pi(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_AY_PI_8(module) & (1 << bit);
}


static void m68k_op_btst_8_s_pi7(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_A7_PI_8(module) & (1 << bit);
}


static void m68k_op_btst_8_s_pd(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_AY_PD_8(module) & (1 << bit);
}


static void m68k_op_btst_8_s_pd7(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_A7_PD_8(module) & (1 << bit);
}


static void m68k_op_btst_8_s_di(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_AY_DI_8(module) & (1 << bit);
}


static void m68k_op_btst_8_s_ix(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_AY_IX_8(module) & (1 << bit);
}


static void m68k_op_btst_8_s_aw(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_AW_8(module) & (1 << bit);
}


static void m68k_op_btst_8_s_al(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_AL_8(module) & (1 << bit);
}


static void m68k_op_btst_8_s_pcdi(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_PCDI_8(module) & (1 << bit);
}


static void m68k_op_btst_8_s_pcix(struct m68k_module *module)
{
	uint bit = OPER_I_8(module) & 7;

	FLAG_Z = OPER_PCIX_8(module) & (1 << bit);
}


static void m68k_op_chk_16_d(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(DY);

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_chk_16_ai(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(OPER_AY_AI_16(module));

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_chk_16_pi(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(OPER_AY_PI_16(module));

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_chk_16_pd(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(OPER_AY_PD_16(module));

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_chk_16_di(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(OPER_AY_DI_16(module));

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_chk_16_ix(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(OPER_AY_IX_16(module));

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_chk_16_aw(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(OPER_AW_16(module));

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_chk_16_al(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(OPER_AL_16(module));

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_chk_16_pcdi(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(OPER_PCDI_16(module));

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_chk_16_pcix(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(OPER_PCIX_16(module));

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_chk_16_i(struct m68k_module *module)
{
	sint src = MAKE_INT_16(DX);
	sint bound = MAKE_INT_16(OPER_I_16(module));

	FLAG_Z = ZFLAG_16(src); /* Undocumented */
	FLAG_V = VFLAG_CLEAR;   /* Undocumented */
	FLAG_C = CFLAG_CLEAR;   /* Undocumented */

	if(src >= 0 && src <= bound)
	{
		return;
	}
	FLAG_N = (src < 0)<<7;
	m68ki_exception_trap(module, EXCEPTION_CHK);
}


static void m68k_op_clr_8_d(struct m68k_module *module)
{
	DY &= 0xffffff00;

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_16_d(struct m68k_module *module)
{
	DY &= 0xffff0000;

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_16_ai(struct m68k_module *module)
{
	m68ki_write_16(module, EA_AY_AI_16(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_16_pi(struct m68k_module *module)
{
	m68ki_write_16(module, EA_AY_PI_16(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_16_pd(struct m68k_module *module)
{
	m68ki_write_16(module, EA_AY_PD_16(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_16_di(struct m68k_module *module)
{
	m68ki_write_16(module, EA_AY_DI_16(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_16_ix(struct m68k_module *module)
{
	m68ki_write_16(module, EA_AY_IX_16(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_16_aw(struct m68k_module *module)
{
	m68ki_write_16(module, EA_AW_16(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_16_al(struct m68k_module *module)
{
	m68ki_write_16(module, EA_AL_16(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_32_d(struct m68k_module *module)
{
	DY = 0;

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_32_ai(struct m68k_module *module)
{
	m68ki_write_32(module, EA_AY_AI_32(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_32_pi(struct m68k_module *module)
{
	m68ki_write_32(module, EA_AY_PI_32(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_32_pd(struct m68k_module *module)
{
	m68ki_write_32(module, EA_AY_PD_32(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_32_di(struct m68k_module *module)
{
	m68ki_write_32(module, EA_AY_DI_32(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_32_ix(struct m68k_module *module)
{
	m68ki_write_32(module, EA_AY_IX_32(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_32_aw(struct m68k_module *module)
{
	m68ki_write_32(module, EA_AW_32(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_clr_32_al(struct m68k_module *module)
{
	m68ki_write_32(module, EA_AL_32(module), 0);

	FLAG_N = NFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	FLAG_Z = ZFLAG_SET;
}


static void m68k_op_cmp_8_d(struct m68k_module *module)
{
	uint src = MASK_OUT_ABOVE_8(DY);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_ai(struct m68k_module *module)
{
	uint src = OPER_AY_AI_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_pi(struct m68k_module *module)
{
	uint src = OPER_AY_PI_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_pi7(struct m68k_module *module)
{
	uint src = OPER_A7_PI_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_pd(struct m68k_module *module)
{
	uint src = OPER_AY_PD_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_pd7(struct m68k_module *module)
{
	uint src = OPER_A7_PD_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_di(struct m68k_module *module)
{
	uint src = OPER_AY_DI_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_ix(struct m68k_module *module)
{
	uint src = OPER_AY_IX_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_aw(struct m68k_module *module)
{
	uint src = OPER_AW_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_al(struct m68k_module *module)
{
	uint src = OPER_AL_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_pcdi(struct m68k_module *module)
{
	uint src = OPER_PCDI_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_pcix(struct m68k_module *module)
{
	uint src = OPER_PCIX_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_8_i(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = MASK_OUT_ABOVE_8(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmp_16_d(struct m68k_module *module)
{
	uint src = MASK_OUT_ABOVE_16(DY);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_a(struct m68k_module *module)
{
	uint src = MASK_OUT_ABOVE_16(AY);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_ai(struct m68k_module *module)
{
	uint src = OPER_AY_AI_16(module);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_pi(struct m68k_module *module)
{
	uint src = OPER_AY_PI_16(module);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_pd(struct m68k_module *module)
{
	uint src = OPER_AY_PD_16(module);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_di(struct m68k_module *module)
{
	uint src = OPER_AY_DI_16(module);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_ix(struct m68k_module *module)
{
	uint src = OPER_AY_IX_16(module);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_aw(struct m68k_module *module)
{
	uint src = OPER_AW_16(module);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_al(struct m68k_module *module)
{
	uint src = OPER_AL_16(module);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_pcdi(struct m68k_module *module)
{
	uint src = OPER_PCDI_16(module);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_pcix(struct m68k_module *module)
{
	uint src = OPER_PCIX_16(module);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_16_i(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint dst = MASK_OUT_ABOVE_16(DX);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmp_32_d(struct m68k_module *module)
{
	uint src = DY;
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_a(struct m68k_module *module)
{
	uint src = AY;
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_ai(struct m68k_module *module)
{
	uint src = OPER_AY_AI_32(module);
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_pi(struct m68k_module *module)
{
	uint src = OPER_AY_PI_32(module);
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_pd(struct m68k_module *module)
{
	uint src = OPER_AY_PD_32(module);
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_di(struct m68k_module *module)
{
	uint src = OPER_AY_DI_32(module);
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_ix(struct m68k_module *module)
{
	uint src = OPER_AY_IX_32(module);
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_aw(struct m68k_module *module)
{
	uint src = OPER_AW_32(module);
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_al(struct m68k_module *module)
{
	uint src = OPER_AL_32(module);
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_pcdi(struct m68k_module *module)
{
	uint src = OPER_PCDI_32(module);
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_pcix(struct m68k_module *module)
{
	uint src = OPER_PCIX_32(module);
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmp_32_i(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint dst = DX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_d(struct m68k_module *module)
{
	uint src = MAKE_INT_16(DY);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_a(struct m68k_module *module)
{
	uint src = MAKE_INT_16(AY);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_ai(struct m68k_module *module)
{
	uint src = MAKE_INT_16(OPER_AY_AI_16(module));
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_pi(struct m68k_module *module)
{
	uint src = MAKE_INT_16(OPER_AY_PI_16(module));
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_pd(struct m68k_module *module)
{
	uint src = MAKE_INT_16(OPER_AY_PD_16(module));
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_di(struct m68k_module *module)
{
	uint src = MAKE_INT_16(OPER_AY_DI_16(module));
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_ix(struct m68k_module *module)
{
	uint src = MAKE_INT_16(OPER_AY_IX_16(module));
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_aw(struct m68k_module *module)
{
	uint src = MAKE_INT_16(OPER_AW_16(module));
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_al(struct m68k_module *module)
{
	uint src = MAKE_INT_16(OPER_AL_16(module));
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_pcdi(struct m68k_module *module)
{
	uint src = MAKE_INT_16(OPER_PCDI_16(module));
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_pcix(struct m68k_module *module)
{
	uint src = MAKE_INT_16(OPER_PCIX_16(module));
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_16_i(struct m68k_module *module)
{
	uint src = MAKE_INT_16(OPER_I_16(module));
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_d(struct m68k_module *module)
{
	uint src = DY;
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_a(struct m68k_module *module)
{
	uint src = AY;
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_ai(struct m68k_module *module)
{
	uint src = OPER_AY_AI_32(module);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_pi(struct m68k_module *module)
{
	uint src = OPER_AY_PI_32(module);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_pd(struct m68k_module *module)
{
	uint src = OPER_AY_PD_32(module);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_di(struct m68k_module *module)
{
	uint src = OPER_AY_DI_32(module);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_ix(struct m68k_module *module)
{
	uint src = OPER_AY_IX_32(module);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_aw(struct m68k_module *module)
{
	uint src = OPER_AW_32(module);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_al(struct m68k_module *module)
{
	uint src = OPER_AL_32(module);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_pcdi(struct m68k_module *module)
{
	uint src = OPER_PCDI_32(module);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_pcix(struct m68k_module *module)
{
	uint src = OPER_PCIX_32(module);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpa_32_i(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint dst = AX;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpi_8_d(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = MASK_OUT_ABOVE_8(DY);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpi_8_ai(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = OPER_AY_AI_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpi_8_pi(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = OPER_AY_PI_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpi_8_pi7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = OPER_A7_PI_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpi_8_pd(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = OPER_AY_PD_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpi_8_pd7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = OPER_A7_PD_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpi_8_di(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = OPER_AY_DI_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpi_8_ix(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = OPER_AY_IX_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpi_8_aw(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = OPER_AW_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpi_8_al(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint dst = OPER_AL_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpi_16_d(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint dst = MASK_OUT_ABOVE_16(DY);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmpi_16_ai(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint dst = OPER_AY_AI_16(module);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmpi_16_pi(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint dst = OPER_AY_PI_16(module);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmpi_16_pd(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint dst = OPER_AY_PD_16(module);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmpi_16_di(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint dst = OPER_AY_DI_16(module);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmpi_16_ix(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint dst = OPER_AY_IX_16(module);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmpi_16_aw(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint dst = OPER_AW_16(module);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmpi_16_al(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint dst = OPER_AL_16(module);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmpi_32_d(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint dst = DY;
	uint res = dst - src;

	m68ki_cmpild_callback(src, REG_IR & 7);		   /* auto-disable (see m68kcpu.h) */
	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpi_32_ai(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint dst = OPER_AY_AI_32(module);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpi_32_pi(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint dst = OPER_AY_PI_32(module);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpi_32_pd(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint dst = OPER_AY_PD_32(module);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpi_32_di(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint dst = OPER_AY_DI_32(module);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpi_32_ix(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint dst = OPER_AY_IX_32(module);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpi_32_aw(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint dst = OPER_AW_32(module);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpi_32_al(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint dst = OPER_AL_32(module);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_cmpm_8_ax7(struct m68k_module *module)
{
	uint src = OPER_AY_PI_8(module);
	uint dst = OPER_A7_PI_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpm_8_ay7(struct m68k_module *module)
{
	uint src = OPER_A7_PI_8(module);
	uint dst = OPER_AX_PI_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpm_8_axy7(struct m68k_module *module)
{
	uint src = OPER_A7_PI_8(module);
	uint dst = OPER_A7_PI_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpm_8(struct m68k_module *module)
{
	uint src = OPER_AY_PI_8(module);
	uint dst = OPER_AX_PI_8(module);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_C = CFLAG_8(res);
}


static void m68k_op_cmpm_16(struct m68k_module *module)
{
	uint src = OPER_AY_PI_16(module);
	uint dst = OPER_AX_PI_16(module);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_C = CFLAG_16(res);
}


static void m68k_op_cmpm_32(struct m68k_module *module)
{
	uint src = OPER_AY_PI_32(module);
	uint dst = OPER_AX_PI_32(module);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_C = CFLAG_SUB_32(src, dst, res);
}


static void m68k_op_dbt_16(struct m68k_module *module)
{
	REG_PC += 2;
}


static void m68k_op_dbf_16(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
	if(res != 0xffff)
	{
		uint offset = OPER_I_16(module);
		REG_PC -= 2;
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_branch_16(module, offset);
		USE_CYCLES(CYC_DBCC_F_NOEXP);
		return;
	}
	REG_PC += 2;
	USE_CYCLES(CYC_DBCC_F_EXP);
}


static void m68k_op_dbhi_16(struct m68k_module *module)
{
	if(COND_NOT_HI())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbls_16(struct m68k_module *module)
{
	if(COND_NOT_LS())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbcc_16(struct m68k_module *module)
{
	if(COND_NOT_CC())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbcs_16(struct m68k_module *module)
{
	if(COND_NOT_CS())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbne_16(struct m68k_module *module)
{
	if(COND_NOT_NE())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbeq_16(struct m68k_module *module)
{
	if(COND_NOT_EQ())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbvc_16(struct m68k_module *module)
{
	if(COND_NOT_VC())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbvs_16(struct m68k_module *module)
{
	if(COND_NOT_VS())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbpl_16(struct m68k_module *module)
{
	if(COND_NOT_PL())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbmi_16(struct m68k_module *module)
{
	if(COND_NOT_MI())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbge_16(struct m68k_module *module)
{
	if(COND_NOT_GE())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dblt_16(struct m68k_module *module)
{
	if(COND_NOT_LT())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dbgt_16(struct m68k_module *module)
{
	if(COND_NOT_GT())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_dble_16(struct m68k_module *module)
{
	if(COND_NOT_LE())
	{
		uint* r_dst = &DY;
		uint res = MASK_OUT_ABOVE_16(*r_dst - 1);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		if(res != 0xffff)
		{
			uint offset = OPER_I_16(module);
			REG_PC -= 2;
			m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
			m68ki_branch_16(module, offset);
			USE_CYCLES(CYC_DBCC_F_NOEXP);
			return;
		}
		REG_PC += 2;
		USE_CYCLES(CYC_DBCC_F_EXP);
		return;
	}
	REG_PC += 2;
}


static void m68k_op_divs_16_d(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(DY);
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divs_16_ai(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(OPER_AY_AI_16(module));
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divs_16_pi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(OPER_AY_PI_16(module));
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divs_16_pd(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(OPER_AY_PD_16(module));
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divs_16_di(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(OPER_AY_DI_16(module));
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divs_16_ix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(OPER_AY_IX_16(module));
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divs_16_aw(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(OPER_AW_16(module));
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divs_16_al(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(OPER_AL_16(module));
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divs_16_pcdi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(OPER_PCDI_16(module));
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divs_16_pcix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(OPER_PCIX_16(module));
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divs_16_i(struct m68k_module *module)
{
	uint* r_dst = &DX;
	sint src = MAKE_INT_16(OPER_I_16(module));
	sint quotient;
	sint remainder;

	if(src != 0)
	{
		if((uint32)*r_dst == 0x80000000 && src == -1)
		{
			FLAG_Z = 0;
			FLAG_N = NFLAG_CLEAR;
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = 0;
			return;
		}

		quotient = MAKE_INT_32(*r_dst) / src;
		remainder = MAKE_INT_32(*r_dst) % src;

		if(quotient == MAKE_INT_16(quotient))
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_d(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_16(DY);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_ai(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_AI_16(module);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_pi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PI_16(module);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_pd(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PD_16(module);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_di(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_DI_16(module);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_ix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_IX_16(module);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_aw(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AW_16(module);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_al(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AL_16(module);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_pcdi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCDI_16(module);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_pcix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCIX_16(module);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_divu_16_i(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_I_16(module);

	if(src != 0)
	{
		uint quotient = *r_dst / src;
		uint remainder = *r_dst % src;

		if(quotient < 0x10000)
		{
			FLAG_Z = quotient;
			FLAG_N = NFLAG_16(quotient);
			FLAG_V = VFLAG_CLEAR;
			FLAG_C = CFLAG_CLEAR;
			*r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
			return;
		}
		FLAG_V = VFLAG_SET;
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_ZERO_DIVIDE);
}


static void m68k_op_eor_8_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY ^= MASK_OUT_ABOVE_8(DX));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_8_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_8_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_8_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_8_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_8_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_8_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_8_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_8_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_8_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_16_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY ^= MASK_OUT_ABOVE_16(DX));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_32_d(struct m68k_module *module)
{
	uint res = DY ^= DX;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_32_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_32(module);
	uint res = DX ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_32_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_32(module);
	uint res = DX ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_32_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_32(module);
	uint res = DX ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_32_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);
	uint res = DX ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_32_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_32(module);
	uint res = DX ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_32_aw(struct m68k_module *module)
{
	uint ea = EA_AW_32(module);
	uint res = DX ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eor_32_al(struct m68k_module *module)
{
	uint ea = EA_AL_32(module);
	uint res = DX ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_8_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY ^= OPER_I_8(module));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_8_ai(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_AI_8(module);
	uint res = src ^ m68ki_read_8(module, ea);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_8_pi(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_PI_8(module);
	uint res = src ^ m68ki_read_8(module, ea);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_8_pi7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_A7_PI_8(module);
	uint res = src ^ m68ki_read_8(module, ea);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_8_pd(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_PD_8(module);
	uint res = src ^ m68ki_read_8(module, ea);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_8_pd7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_A7_PD_8(module);
	uint res = src ^ m68ki_read_8(module, ea);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_8_di(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_DI_8(module);
	uint res = src ^ m68ki_read_8(module, ea);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_8_ix(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_IX_8(module);
	uint res = src ^ m68ki_read_8(module, ea);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_8_aw(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AW_8(module);
	uint res = src ^ m68ki_read_8(module, ea);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_8_al(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AL_8(module);
	uint res = src ^ m68ki_read_8(module, ea);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_16_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY ^= OPER_I_16(module));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_16_ai(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_AI_16(module);
	uint res = src ^ m68ki_read_16(module, ea);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_16_pi(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_PI_16(module);
	uint res = src ^ m68ki_read_16(module, ea);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_16_pd(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_PD_16(module);
	uint res = src ^ m68ki_read_16(module, ea);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_16_di(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_DI_16(module);
	uint res = src ^ m68ki_read_16(module, ea);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_16_ix(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_IX_16(module);
	uint res = src ^ m68ki_read_16(module, ea);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_16_aw(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AW_16(module);
	uint res = src ^ m68ki_read_16(module, ea);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_16_al(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AL_16(module);
	uint res = src ^ m68ki_read_16(module, ea);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_32_d(struct m68k_module *module)
{
	uint res = DY ^= OPER_I_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_32_ai(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_AI_32(module);
	uint res = src ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_32_pi(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_PI_32(module);
	uint res = src ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_32_pd(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_PD_32(module);
	uint res = src ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_32_di(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_DI_32(module);
	uint res = src ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_32_ix(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_IX_32(module);
	uint res = src ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_32_aw(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AW_32(module);
	uint res = src ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_32_al(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AL_32(module);
	uint res = src ^ m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_eori_16_toc(struct m68k_module *module)
{
	m68ki_set_ccr(module, m68ki_get_ccr() ^ OPER_I_8(module));
}


static void m68k_op_eori_16_tos(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint src = OPER_I_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, m68ki_get_sr() ^ src);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_exg_32_dd(struct m68k_module *module)
{
	uint* reg_a = &DX;
	uint* reg_b = &DY;
	uint tmp = *reg_a;
	*reg_a = *reg_b;
	*reg_b = tmp;
}


static void m68k_op_exg_32_aa(struct m68k_module *module)
{
	uint* reg_a = &AX;
	uint* reg_b = &AY;
	uint tmp = *reg_a;
	*reg_a = *reg_b;
	*reg_b = tmp;
}


static void m68k_op_exg_32_da(struct m68k_module *module)
{
	uint* reg_a = &DX;
	uint* reg_b = &AY;
	uint tmp = *reg_a;
	*reg_a = *reg_b;
	*reg_b = tmp;
}


static void m68k_op_ext_16(struct m68k_module *module)
{
	uint* r_dst = &DY;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xff00 : 0);

	FLAG_N = NFLAG_16(*r_dst);
	FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_ext_32(struct m68k_module *module)
{
	uint* r_dst = &DY;

	*r_dst = MASK_OUT_ABOVE_16(*r_dst) | (GET_MSB_16(*r_dst) ? 0xffff0000 : 0);

	FLAG_N = NFLAG_32(*r_dst);
	FLAG_Z = *r_dst;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_illegal(struct m68k_module *module)
{
	m68ki_exception_illegal(module);
}


static void m68k_op_jmp_32_ai(struct m68k_module *module)
{
	m68ki_jump(module, EA_AY_AI_32(module));
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	if(REG_PC == REG_PPC)
		USE_ALL_CYCLES();
}


static void m68k_op_jmp_32_di(struct m68k_module *module)
{
	m68ki_jump(module, EA_AY_DI_32(module));
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	if(REG_PC == REG_PPC)
		USE_ALL_CYCLES();
}


static void m68k_op_jmp_32_ix(struct m68k_module *module)
{
	m68ki_jump(module, EA_AY_IX_32(module));
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	if(REG_PC == REG_PPC)
		USE_ALL_CYCLES();
}


static void m68k_op_jmp_32_aw(struct m68k_module *module)
{
	m68ki_jump(module, EA_AW_32(module));
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	if(REG_PC == REG_PPC)
		USE_ALL_CYCLES();
}


static void m68k_op_jmp_32_al(struct m68k_module *module)
{
	m68ki_jump(module, EA_AL_32(module));
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	if(REG_PC == REG_PPC)
		USE_ALL_CYCLES();
}


static void m68k_op_jmp_32_pcdi(struct m68k_module *module)
{
	m68ki_jump(module, EA_PCDI_32(module));
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	if(REG_PC == REG_PPC)
		USE_ALL_CYCLES();
}


static void m68k_op_jmp_32_pcix(struct m68k_module *module)
{
	m68ki_jump(module, EA_PCIX_32(module));
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	if(REG_PC == REG_PPC)
		USE_ALL_CYCLES();
}


static void m68k_op_jsr_32_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_32(module);
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_push_32(module, REG_PC);
	m68ki_jump(module, ea);
}


static void m68k_op_jsr_32_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_push_32(module, REG_PC);
	m68ki_jump(module, ea);
}


static void m68k_op_jsr_32_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_32(module);
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_push_32(module, REG_PC);
	m68ki_jump(module, ea);
}


static void m68k_op_jsr_32_aw(struct m68k_module *module)
{
	uint ea = EA_AW_32(module);
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_push_32(module, REG_PC);
	m68ki_jump(module, ea);
}


static void m68k_op_jsr_32_al(struct m68k_module *module)
{
	uint ea = EA_AL_32(module);
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_push_32(module, REG_PC);
	m68ki_jump(module, ea);
}


static void m68k_op_jsr_32_pcdi(struct m68k_module *module)
{
	uint ea = EA_PCDI_32(module);
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_push_32(module, REG_PC);
	m68ki_jump(module, ea);
}


static void m68k_op_jsr_32_pcix(struct m68k_module *module)
{
	uint ea = EA_PCIX_32(module);
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_push_32(module, REG_PC);
	m68ki_jump(module, ea);
}


static void m68k_op_lea_32_ai(struct m68k_module *module)
{
	AX = EA_AY_AI_32(module);
}


static void m68k_op_lea_32_di(struct m68k_module *module)
{
	AX = EA_AY_DI_32(module);
}


static void m68k_op_lea_32_ix(struct m68k_module *module)
{
	AX = EA_AY_IX_32(module);
}


static void m68k_op_lea_32_aw(struct m68k_module *module)
{
	AX = EA_AW_32(module);
}


static void m68k_op_lea_32_al(struct m68k_module *module)
{
	AX = EA_AL_32(module);
}


static void m68k_op_lea_32_pcdi(struct m68k_module *module)
{
	AX = EA_PCDI_32(module);
}


static void m68k_op_lea_32_pcix(struct m68k_module *module)
{
	AX = EA_PCIX_32(module);
}


static void m68k_op_link_16_a7(struct m68k_module *module)
{
	REG_A[7] -= 4;
	m68ki_write_32(module, REG_A[7], REG_A[7]);
	REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16(module)));
}


static void m68k_op_link_16(struct m68k_module *module)
{
	uint* r_dst = &AY;

	m68ki_push_32(module, *r_dst);
	*r_dst = REG_A[7];
	REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16(module)));
}


static void m68k_op_lsr_8_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src >> shift;

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_CLEAR;
	FLAG_Z = res;
	FLAG_X = FLAG_C = src << (9-shift);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_16_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src >> shift;

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_CLEAR;
	FLAG_Z = res;
	FLAG_X = FLAG_C = src << (9-shift);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_32_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = *r_dst;
	uint res = src >> shift;

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = res;

	FLAG_N = NFLAG_CLEAR;
	FLAG_Z = res;
	FLAG_X = FLAG_C = src << (9-shift);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_8_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = src >> shift;

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift <= 8)
		{
			*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
			FLAG_X = FLAG_C = src << (9-shift);
			FLAG_N = NFLAG_CLEAR;
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		*r_dst &= 0xffffff00;
		FLAG_X = XFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_8(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_16_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = src >> shift;

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift <= 16)
		{
			*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
			FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
			FLAG_N = NFLAG_CLEAR;
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		*r_dst &= 0xffff0000;
		FLAG_X = XFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_16(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_32_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = *r_dst;
	uint res = src >> shift;

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift < 32)
		{
			*r_dst = res;
			FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
			FLAG_N = NFLAG_CLEAR;
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		*r_dst = 0;
		FLAG_X = FLAG_C = (shift == 32 ? GET_MSB_32(src)>>23 : 0);
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_32(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_CLEAR;
	FLAG_Z = res;
	FLAG_C = FLAG_X = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_CLEAR;
	FLAG_Z = res;
	FLAG_C = FLAG_X = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_CLEAR;
	FLAG_Z = res;
	FLAG_C = FLAG_X = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_CLEAR;
	FLAG_Z = res;
	FLAG_C = FLAG_X = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_CLEAR;
	FLAG_Z = res;
	FLAG_C = FLAG_X = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_CLEAR;
	FLAG_Z = res;
	FLAG_C = FLAG_X = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsr_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = src >> 1;

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_CLEAR;
	FLAG_Z = res;
	FLAG_C = FLAG_X = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_8_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = MASK_OUT_ABOVE_8(src << shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src << shift;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_16_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = MASK_OUT_ABOVE_16(src << shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> (8-shift);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_32_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = *r_dst;
	uint res = MASK_OUT_ABOVE_32(src << shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> (24-shift);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_8_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = MASK_OUT_ABOVE_8(src << shift);

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift <= 8)
		{
			*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
			FLAG_X = FLAG_C = src << shift;
			FLAG_N = NFLAG_8(res);
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		*r_dst &= 0xffffff00;
		FLAG_X = XFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_8(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_16_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = MASK_OUT_ABOVE_16(src << shift);

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift <= 16)
		{
			*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
			FLAG_X = FLAG_C = (src << shift) >> 8;
			FLAG_N = NFLAG_16(res);
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		*r_dst &= 0xffff0000;
		FLAG_X = XFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_16(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_32_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = DX & 0x3f;
	uint src = *r_dst;
	uint res = MASK_OUT_ABOVE_32(src << shift);

	if(shift != 0)
	{
		USE_CYCLES(shift<<CYC_SHIFT);

		if(shift < 32)
		{
			*r_dst = res;
			FLAG_X = FLAG_C = (src >> (32 - shift)) << 8;
			FLAG_N = NFLAG_32(res);
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}

		*r_dst = 0;
		FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8;
		FLAG_N = NFLAG_CLEAR;
		FLAG_Z = ZFLAG_SET;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_32(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_lsl_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(src << 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_X = FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_move_8_d_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_d_i(struct m68k_module *module)
{
	uint res = OPER_I_8(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ai_i(struct m68k_module *module)
{
	uint res = OPER_I_8(module);
	uint ea = EA_AX_AI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi7_i(struct m68k_module *module)
{
	uint res = OPER_I_8(module);
	uint ea = EA_A7_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pi_i(struct m68k_module *module)
{
	uint res = OPER_I_8(module);
	uint ea = EA_AX_PI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd7_i(struct m68k_module *module)
{
	uint res = OPER_I_8(module);
	uint ea = EA_A7_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_pd_i(struct m68k_module *module)
{
	uint res = OPER_I_8(module);
	uint ea = EA_AX_PD_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_di_i(struct m68k_module *module)
{
	uint res = OPER_I_8(module);
	uint ea = EA_AX_DI_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_ix_i(struct m68k_module *module)
{
	uint res = OPER_I_8(module);
	uint ea = EA_AX_IX_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_aw_i(struct m68k_module *module)
{
	uint res = OPER_I_8(module);
	uint ea = EA_AW_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_8_al_i(struct m68k_module *module)
{
	uint res = OPER_I_8(module);
	uint ea = EA_AL_8(module);

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_a(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(AY);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_aw(struct m68k_module *module)
{
	uint res = OPER_AW_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_al(struct m68k_module *module)
{
	uint res = OPER_AL_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_d_i(struct m68k_module *module)
{
	uint res = OPER_I_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_a(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(AY);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_16(module);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_16(module);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_16(module);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_16(module);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_16(module);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_aw(struct m68k_module *module)
{
	uint res = OPER_AW_16(module);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_al(struct m68k_module *module)
{
	uint res = OPER_AL_16(module);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_16(module);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_16(module);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ai_i(struct m68k_module *module)
{
	uint res = OPER_I_16(module);
	uint ea = EA_AX_AI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_a(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(AY);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_16(module);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_16(module);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_16(module);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_16(module);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_16(module);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_aw(struct m68k_module *module)
{
	uint res = OPER_AW_16(module);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_al(struct m68k_module *module)
{
	uint res = OPER_AL_16(module);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_16(module);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_16(module);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pi_i(struct m68k_module *module)
{
	uint res = OPER_I_16(module);
	uint ea = EA_AX_PI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_a(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(AY);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_16(module);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_16(module);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_16(module);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_16(module);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_16(module);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_aw(struct m68k_module *module)
{
	uint res = OPER_AW_16(module);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_al(struct m68k_module *module)
{
	uint res = OPER_AL_16(module);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_16(module);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_16(module);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_pd_i(struct m68k_module *module)
{
	uint res = OPER_I_16(module);
	uint ea = EA_AX_PD_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_a(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(AY);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_16(module);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_16(module);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_16(module);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_16(module);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_16(module);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_aw(struct m68k_module *module)
{
	uint res = OPER_AW_16(module);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_al(struct m68k_module *module)
{
	uint res = OPER_AL_16(module);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_16(module);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_16(module);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_di_i(struct m68k_module *module)
{
	uint res = OPER_I_16(module);
	uint ea = EA_AX_DI_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_a(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(AY);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_16(module);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_16(module);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_16(module);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_16(module);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_16(module);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_aw(struct m68k_module *module)
{
	uint res = OPER_AW_16(module);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_al(struct m68k_module *module)
{
	uint res = OPER_AL_16(module);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_16(module);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_16(module);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_ix_i(struct m68k_module *module)
{
	uint res = OPER_I_16(module);
	uint ea = EA_AX_IX_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_a(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(AY);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_16(module);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_16(module);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_16(module);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_16(module);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_16(module);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_aw(struct m68k_module *module)
{
	uint res = OPER_AW_16(module);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_al(struct m68k_module *module)
{
	uint res = OPER_AL_16(module);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_16(module);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_16(module);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_aw_i(struct m68k_module *module)
{
	uint res = OPER_I_16(module);
	uint ea = EA_AW_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_a(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(AY);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_16(module);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_16(module);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_16(module);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_16(module);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_16(module);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_aw(struct m68k_module *module)
{
	uint res = OPER_AW_16(module);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_al(struct m68k_module *module)
{
	uint res = OPER_AL_16(module);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_16(module);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_16(module);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_16_al_i(struct m68k_module *module)
{
	uint res = OPER_I_16(module);
	uint ea = EA_AL_16(module);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_d(struct m68k_module *module)
{
	uint res = DY;
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_a(struct m68k_module *module)
{
	uint res = AY;
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_32(module);
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_32(module);
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_32(module);
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_32(module);
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_32(module);
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_aw(struct m68k_module *module)
{
	uint res = OPER_AW_32(module);
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_al(struct m68k_module *module)
{
	uint res = OPER_AL_32(module);
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_32(module);
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_32(module);
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_d_i(struct m68k_module *module)
{
	uint res = OPER_I_32(module);
	uint* r_dst = &DX;

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_d(struct m68k_module *module)
{
	uint res = DY;
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_a(struct m68k_module *module)
{
	uint res = AY;
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_32(module);
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_32(module);
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_32(module);
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_32(module);
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_32(module);
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_aw(struct m68k_module *module)
{
	uint res = OPER_AW_32(module);
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_al(struct m68k_module *module)
{
	uint res = OPER_AL_32(module);
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_32(module);
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_32(module);
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ai_i(struct m68k_module *module)
{
	uint res = OPER_I_32(module);
	uint ea = EA_AX_AI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_d(struct m68k_module *module)
{
	uint res = DY;
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_a(struct m68k_module *module)
{
	uint res = AY;
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_32(module);
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_32(module);
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_32(module);
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_32(module);
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_32(module);
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_aw(struct m68k_module *module)
{
	uint res = OPER_AW_32(module);
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_al(struct m68k_module *module)
{
	uint res = OPER_AL_32(module);
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_32(module);
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_32(module);
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pi_i(struct m68k_module *module)
{
	uint res = OPER_I_32(module);
	uint ea = EA_AX_PI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_d(struct m68k_module *module)
{
	uint res = DY;
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_a(struct m68k_module *module)
{
	uint res = AY;
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_32(module);
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_32(module);
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_32(module);
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_32(module);
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_32(module);
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_aw(struct m68k_module *module)
{
	uint res = OPER_AW_32(module);
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_al(struct m68k_module *module)
{
	uint res = OPER_AL_32(module);
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_32(module);
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_32(module);
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_pd_i(struct m68k_module *module)
{
	uint res = OPER_I_32(module);
	uint ea = EA_AX_PD_32(module);

	m68ki_write_16(module, ea+2, res & 0xFFFF );
	m68ki_write_16(module, ea, (res >> 16) & 0xFFFF );

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_d(struct m68k_module *module)
{
	uint res = DY;
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_a(struct m68k_module *module)
{
	uint res = AY;
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_32(module);
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_32(module);
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_32(module);
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_32(module);
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_32(module);
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_aw(struct m68k_module *module)
{
	uint res = OPER_AW_32(module);
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_al(struct m68k_module *module)
{
	uint res = OPER_AL_32(module);
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_32(module);
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_32(module);
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_di_i(struct m68k_module *module)
{
	uint res = OPER_I_32(module);
	uint ea = EA_AX_DI_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_d(struct m68k_module *module)
{
	uint res = DY;
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_a(struct m68k_module *module)
{
	uint res = AY;
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_32(module);
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_32(module);
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_32(module);
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_32(module);
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_32(module);
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_aw(struct m68k_module *module)
{
	uint res = OPER_AW_32(module);
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_al(struct m68k_module *module)
{
	uint res = OPER_AL_32(module);
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_32(module);
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_32(module);
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_ix_i(struct m68k_module *module)
{
	uint res = OPER_I_32(module);
	uint ea = EA_AX_IX_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_d(struct m68k_module *module)
{
	uint res = DY;
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_a(struct m68k_module *module)
{
	uint res = AY;
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_32(module);
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_32(module);
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_32(module);
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_32(module);
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_32(module);
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_aw(struct m68k_module *module)
{
	uint res = OPER_AW_32(module);
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_al(struct m68k_module *module)
{
	uint res = OPER_AL_32(module);
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_32(module);
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_32(module);
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_aw_i(struct m68k_module *module)
{
	uint res = OPER_I_32(module);
	uint ea = EA_AW_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_d(struct m68k_module *module)
{
	uint res = DY;
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_a(struct m68k_module *module)
{
	uint res = AY;
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_32(module);
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_32(module);
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_32(module);
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_32(module);
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_32(module);
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_aw(struct m68k_module *module)
{
	uint res = OPER_AW_32(module);
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_al(struct m68k_module *module)
{
	uint res = OPER_AL_32(module);
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_pcdi(struct m68k_module *module)
{
	uint res = OPER_PCDI_32(module);
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_pcix(struct m68k_module *module)
{
	uint res = OPER_PCIX_32(module);
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_move_32_al_i(struct m68k_module *module)
{
	uint res = OPER_I_32(module);
	uint ea = EA_AL_32(module);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_movea_16_d(struct m68k_module *module)
{
	AX = MAKE_INT_16(DY);
}


static void m68k_op_movea_16_a(struct m68k_module *module)
{
	AX = MAKE_INT_16(AY);
}


static void m68k_op_movea_16_ai(struct m68k_module *module)
{
	AX = MAKE_INT_16(OPER_AY_AI_16(module));
}


static void m68k_op_movea_16_pi(struct m68k_module *module)
{
	AX = MAKE_INT_16(OPER_AY_PI_16(module));
}


static void m68k_op_movea_16_pd(struct m68k_module *module)
{
	AX = MAKE_INT_16(OPER_AY_PD_16(module));
}


static void m68k_op_movea_16_di(struct m68k_module *module)
{
	AX = MAKE_INT_16(OPER_AY_DI_16(module));
}


static void m68k_op_movea_16_ix(struct m68k_module *module)
{
	AX = MAKE_INT_16(OPER_AY_IX_16(module));
}


static void m68k_op_movea_16_aw(struct m68k_module *module)
{
	AX = MAKE_INT_16(OPER_AW_16(module));
}


static void m68k_op_movea_16_al(struct m68k_module *module)
{
	AX = MAKE_INT_16(OPER_AL_16(module));
}


static void m68k_op_movea_16_pcdi(struct m68k_module *module)
{
	AX = MAKE_INT_16(OPER_PCDI_16(module));
}


static void m68k_op_movea_16_pcix(struct m68k_module *module)
{
	AX = MAKE_INT_16(OPER_PCIX_16(module));
}


static void m68k_op_movea_16_i(struct m68k_module *module)
{
	AX = MAKE_INT_16(OPER_I_16(module));
}


static void m68k_op_movea_32_d(struct m68k_module *module)
{
	AX = DY;
}


static void m68k_op_movea_32_a(struct m68k_module *module)
{
	AX = AY;
}


static void m68k_op_movea_32_ai(struct m68k_module *module)
{
	AX = OPER_AY_AI_32(module);
}


static void m68k_op_movea_32_pi(struct m68k_module *module)
{
	AX = OPER_AY_PI_32(module);
}


static void m68k_op_movea_32_pd(struct m68k_module *module)
{
	AX = OPER_AY_PD_32(module);
}


static void m68k_op_movea_32_di(struct m68k_module *module)
{
	AX = OPER_AY_DI_32(module);
}


static void m68k_op_movea_32_ix(struct m68k_module *module)
{
	AX = OPER_AY_IX_32(module);
}


static void m68k_op_movea_32_aw(struct m68k_module *module)
{
	AX = OPER_AW_32(module);
}


static void m68k_op_movea_32_al(struct m68k_module *module)
{
	AX = OPER_AL_32(module);
}


static void m68k_op_movea_32_pcdi(struct m68k_module *module)
{
	AX = OPER_PCDI_32(module);
}


static void m68k_op_movea_32_pcix(struct m68k_module *module)
{
	AX = OPER_PCIX_32(module);
}


static void m68k_op_movea_32_i(struct m68k_module *module)
{
	AX = OPER_I_32(module);
}


static void m68k_op_move_16_toc_d(struct m68k_module *module)
{
	m68ki_set_ccr(module, DY);
}


static void m68k_op_move_16_toc_ai(struct m68k_module *module)
{
	m68ki_set_ccr(module, OPER_AY_AI_16(module));
}


static void m68k_op_move_16_toc_pi(struct m68k_module *module)
{
	m68ki_set_ccr(module, OPER_AY_PI_16(module));
}


static void m68k_op_move_16_toc_pd(struct m68k_module *module)
{
	m68ki_set_ccr(module, OPER_AY_PD_16(module));
}


static void m68k_op_move_16_toc_di(struct m68k_module *module)
{
	m68ki_set_ccr(module, OPER_AY_DI_16(module));
}


static void m68k_op_move_16_toc_ix(struct m68k_module *module)
{
	m68ki_set_ccr(module, OPER_AY_IX_16(module));
}


static void m68k_op_move_16_toc_aw(struct m68k_module *module)
{
	m68ki_set_ccr(module, OPER_AW_16(module));
}


static void m68k_op_move_16_toc_al(struct m68k_module *module)
{
	m68ki_set_ccr(module, OPER_AL_16(module));
}


static void m68k_op_move_16_toc_pcdi(struct m68k_module *module)
{
	m68ki_set_ccr(module, OPER_PCDI_16(module));
}


static void m68k_op_move_16_toc_pcix(struct m68k_module *module)
{
	m68ki_set_ccr(module, OPER_PCIX_16(module));
}


static void m68k_op_move_16_toc_i(struct m68k_module *module)
{
	m68ki_set_ccr(module, OPER_I_16(module));
}


static void m68k_op_move_16_frs_d(struct m68k_module *module)
{
	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
	{
		DY = MASK_OUT_BELOW_16(DY) | m68ki_get_sr();
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_frs_ai(struct m68k_module *module)
{
	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
	{
		uint ea = EA_AY_AI_16(module);
		m68ki_write_16(module, ea, m68ki_get_sr());
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_frs_pi(struct m68k_module *module)
{
	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
	{
		uint ea = EA_AY_PI_16(module);
		m68ki_write_16(module, ea, m68ki_get_sr());
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_frs_pd(struct m68k_module *module)
{
	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
	{
		uint ea = EA_AY_PD_16(module);
		m68ki_write_16(module, ea, m68ki_get_sr());
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_frs_di(struct m68k_module *module)
{
	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
	{
		uint ea = EA_AY_DI_16(module);
		m68ki_write_16(module, ea, m68ki_get_sr());
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_frs_ix(struct m68k_module *module)
{
	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
	{
		uint ea = EA_AY_IX_16(module);
		m68ki_write_16(module, ea, m68ki_get_sr());
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_frs_aw(struct m68k_module *module)
{
	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
	{
		uint ea = EA_AW_16(module);
		m68ki_write_16(module, ea, m68ki_get_sr());
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_frs_al(struct m68k_module *module)
{
	if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S)	/* NS990408 */
	{
		uint ea = EA_AL_16(module);
		m68ki_write_16(module, ea, m68ki_get_sr());
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_d(struct m68k_module *module)
{
	if(FLAG_S)
	{
		m68ki_set_sr(module, DY);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_ai(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_AY_AI_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, new_sr);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_pi(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_AY_PI_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, new_sr);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_pd(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_AY_PD_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, new_sr);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_di(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_AY_DI_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, new_sr);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_ix(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_AY_IX_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, new_sr);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_aw(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_AW_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, new_sr);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_al(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_AL_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, new_sr);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_pcdi(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_PCDI_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, new_sr);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_pcix(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_PCIX_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, new_sr);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_16_tos_i(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_I_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, new_sr);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_32_fru(struct m68k_module *module)
{
	if(FLAG_S)
	{
		AY = REG_USP;
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_move_32_tou(struct m68k_module *module)
{
	if(FLAG_S)
	{
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		REG_USP = AY;
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_movem_16_re_pd(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = AY;
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			ea -= 2;
			m68ki_write_16(module, ea, MASK_OUT_ABOVE_16(REG_DA[15-i]));
			count++;
		}
	AY = ea;

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_re_ai(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_AI_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			m68ki_write_16(module, ea, MASK_OUT_ABOVE_16(REG_DA[i]));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_re_di(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_DI_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			m68ki_write_16(module, ea, MASK_OUT_ABOVE_16(REG_DA[i]));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_re_ix(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_IX_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			m68ki_write_16(module, ea, MASK_OUT_ABOVE_16(REG_DA[i]));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_re_aw(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AW_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			m68ki_write_16(module, ea, MASK_OUT_ABOVE_16(REG_DA[i]));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_re_al(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AL_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			m68ki_write_16(module, ea, MASK_OUT_ABOVE_16(REG_DA[i]));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_32_re_pd(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = AY;
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			ea -= 4;
			m68ki_write_16(module, ea+2, REG_DA[15-i] & 0xFFFF );
			m68ki_write_16(module, ea, (REG_DA[15-i] >> 16) & 0xFFFF );
			count++;
		}
	AY = ea;

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_re_ai(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_AI_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			m68ki_write_32(module, ea, REG_DA[i]);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_re_di(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_DI_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			m68ki_write_32(module, ea, REG_DA[i]);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_re_ix(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_IX_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			m68ki_write_32(module, ea, REG_DA[i]);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_re_aw(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AW_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			m68ki_write_32(module, ea, REG_DA[i]);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_re_al(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AL_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			m68ki_write_32(module, ea, REG_DA[i]);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_16_er_pi(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = AY;
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(module, ea)));
			ea += 2;
			count++;
		}
	AY = ea;

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_er_pcdi(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_PCDI_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(module, ea)));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_er_pcix(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_PCIX_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(module, ea)));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_er_ai(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_AI_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(module, ea)));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_er_di(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_DI_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(module, ea)));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_er_ix(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_IX_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(module, ea)));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_er_aw(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AW_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(module, ea)));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_16_er_al(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AL_16(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(module, ea)));
			ea += 2;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_W);
}


static void m68k_op_movem_32_er_pi(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = AY;
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = m68ki_read_32(module, ea);
			ea += 4;
			count++;
		}
	AY = ea;

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_er_pcdi(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_PCDI_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = m68ki_read_pcrel_32(module, ea);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_er_pcix(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_PCIX_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = m68ki_read_pcrel_32(module, ea);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_er_ai(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_AI_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = m68ki_read_32(module, ea);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_er_di(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_DI_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = m68ki_read_32(module, ea);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_er_ix(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AY_IX_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = m68ki_read_32(module, ea);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_er_aw(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AW_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = m68ki_read_32(module, ea);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movem_32_er_al(struct m68k_module *module)
{
	uint i = 0;
	uint register_list = OPER_I_16(module);
	uint ea = EA_AL_32(module);
	uint count = 0;

	for(; i < 16; i++)
		if(register_list & (1 << i))
		{
			REG_DA[i] = m68ki_read_32(module, ea);
			ea += 4;
			count++;
		}

	USE_CYCLES(count<<CYC_MOVEM_L);
}


static void m68k_op_movep_16_re(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = DX;

	m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(src >> 8));
	m68ki_write_8(module, ea += 2, MASK_OUT_ABOVE_8(src));
}


static void m68k_op_movep_32_re(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);
	uint src = DX;

	m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(src >> 24));
	m68ki_write_8(module, ea += 2, MASK_OUT_ABOVE_8(src >> 16));
	m68ki_write_8(module, ea += 2, MASK_OUT_ABOVE_8(src >> 8));
	m68ki_write_8(module, ea += 2, MASK_OUT_ABOVE_8(src));
}


static void m68k_op_movep_16_er(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint* r_dst = &DX;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8(module, ea) << 8) + m68ki_read_8(module, ea + 2));
}


static void m68k_op_movep_32_er(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);

	DX = (m68ki_read_8(module, ea) << 24) + (m68ki_read_8(module, ea + 2) << 16)
		+ (m68ki_read_8(module, ea + 4) << 8) + m68ki_read_8(module, ea + 6);
}


static void m68k_op_moveq_32(struct m68k_module *module)
{
	uint res = DX = MAKE_INT_8(MASK_OUT_ABOVE_8(REG_IR));

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_d(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(DY) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_ai(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_AI_16(module)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_pi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PI_16(module)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_pd(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PD_16(module)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_di(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_DI_16(module)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_ix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_IX_16(module)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_aw(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AW_16(module)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_al(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AL_16(module)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_pcdi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCDI_16(module)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_pcix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCIX_16(module)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_muls_16_i(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_I_16(module)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_d(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = MASK_OUT_ABOVE_16(DY) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_ai(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = OPER_AY_AI_16(module) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_pi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = OPER_AY_PI_16(module) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_pd(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = OPER_AY_PD_16(module) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_di(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = OPER_AY_DI_16(module) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_ix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = OPER_AY_IX_16(module) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_aw(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = OPER_AW_16(module) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_al(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = OPER_AL_16(module) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_pcdi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = OPER_PCDI_16(module) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_pcix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = OPER_PCIX_16(module) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_mulu_16_i(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint res = OPER_I_16(module) * MASK_OUT_ABOVE_16(*r_dst);

	*r_dst = res;

	FLAG_Z = res;
	FLAG_N = NFLAG_32(res);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_nbcd_8_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint dst = *r_dst;
	uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());

	if(res != 0x9a)
	{
		FLAG_V = ~res; /* Undefined V behavior */

		if((res & 0x0f) == 0xa)
			res = (res & 0xf0) + 0x10;

		res = MASK_OUT_ABOVE_8(res);

		FLAG_V &= res; /* Undefined V behavior part II */

		*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

		FLAG_Z |= res;
		FLAG_C = CFLAG_SET;
		FLAG_X = XFLAG_SET;
	}
	else
	{
		FLAG_V = VFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
	}
	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
}


static void m68k_op_nbcd_8_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());

	if(res != 0x9a)
	{
		FLAG_V = ~res; /* Undefined V behavior */

		if((res & 0x0f) == 0xa)
			res = (res & 0xf0) + 0x10;

		res = MASK_OUT_ABOVE_8(res);

		FLAG_V &= res; /* Undefined V behavior part II */

		m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(res));

		FLAG_Z |= res;
		FLAG_C = CFLAG_SET;
		FLAG_X = XFLAG_SET;
	}
	else
	{
		FLAG_V = VFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
	}
	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
}


static void m68k_op_nbcd_8_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());

	if(res != 0x9a)
	{
		FLAG_V = ~res; /* Undefined V behavior */

		if((res & 0x0f) == 0xa)
			res = (res & 0xf0) + 0x10;

		res = MASK_OUT_ABOVE_8(res);

		FLAG_V &= res; /* Undefined V behavior part II */

		m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(res));

		FLAG_Z |= res;
		FLAG_C = CFLAG_SET;
		FLAG_X = XFLAG_SET;
	}
	else
	{
		FLAG_V = VFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
	}
	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
}


static void m68k_op_nbcd_8_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());

	if(res != 0x9a)
	{
		FLAG_V = ~res; /* Undefined V behavior */

		if((res & 0x0f) == 0xa)
			res = (res & 0xf0) + 0x10;

		res = MASK_OUT_ABOVE_8(res);

		FLAG_V &= res; /* Undefined V behavior part II */

		m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(res));

		FLAG_Z |= res;
		FLAG_C = CFLAG_SET;
		FLAG_X = XFLAG_SET;
	}
	else
	{
		FLAG_V = VFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
	}
	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
}


static void m68k_op_nbcd_8_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());

	if(res != 0x9a)
	{
		FLAG_V = ~res; /* Undefined V behavior */

		if((res & 0x0f) == 0xa)
			res = (res & 0xf0) + 0x10;

		res = MASK_OUT_ABOVE_8(res);

		FLAG_V &= res; /* Undefined V behavior part II */

		m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(res));

		FLAG_Z |= res;
		FLAG_C = CFLAG_SET;
		FLAG_X = XFLAG_SET;
	}
	else
	{
		FLAG_V = VFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
	}
	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
}


static void m68k_op_nbcd_8_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());

	if(res != 0x9a)
	{
		FLAG_V = ~res; /* Undefined V behavior */

		if((res & 0x0f) == 0xa)
			res = (res & 0xf0) + 0x10;

		res = MASK_OUT_ABOVE_8(res);

		FLAG_V &= res; /* Undefined V behavior part II */

		m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(res));

		FLAG_Z |= res;
		FLAG_C = CFLAG_SET;
		FLAG_X = XFLAG_SET;
	}
	else
	{
		FLAG_V = VFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
	}
	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
}


static void m68k_op_nbcd_8_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());

	if(res != 0x9a)
	{
		FLAG_V = ~res; /* Undefined V behavior */

		if((res & 0x0f) == 0xa)
			res = (res & 0xf0) + 0x10;

		res = MASK_OUT_ABOVE_8(res);

		FLAG_V &= res; /* Undefined V behavior part II */

		m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(res));

		FLAG_Z |= res;
		FLAG_C = CFLAG_SET;
		FLAG_X = XFLAG_SET;
	}
	else
	{
		FLAG_V = VFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
	}
	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
}


static void m68k_op_nbcd_8_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());

	if(res != 0x9a)
	{
		FLAG_V = ~res; /* Undefined V behavior */

		if((res & 0x0f) == 0xa)
			res = (res & 0xf0) + 0x10;

		res = MASK_OUT_ABOVE_8(res);

		FLAG_V &= res; /* Undefined V behavior part II */

		m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(res));

		FLAG_Z |= res;
		FLAG_C = CFLAG_SET;
		FLAG_X = XFLAG_SET;
	}
	else
	{
		FLAG_V = VFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
	}
	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
}


static void m68k_op_nbcd_8_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());

	if(res != 0x9a)
	{
		FLAG_V = ~res; /* Undefined V behavior */

		if((res & 0x0f) == 0xa)
			res = (res & 0xf0) + 0x10;

		res = MASK_OUT_ABOVE_8(res);

		FLAG_V &= res; /* Undefined V behavior part II */

		m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(res));

		FLAG_Z |= res;
		FLAG_C = CFLAG_SET;
		FLAG_X = XFLAG_SET;
	}
	else
	{
		FLAG_V = VFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
	}
	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
}


static void m68k_op_nbcd_8_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());

	if(res != 0x9a)
	{
		FLAG_V = ~res; /* Undefined V behavior */

		if((res & 0x0f) == 0xa)
			res = (res & 0xf0) + 0x10;

		res = MASK_OUT_ABOVE_8(res);

		FLAG_V &= res; /* Undefined V behavior part II */

		m68ki_write_8(module, ea, MASK_OUT_ABOVE_8(res));

		FLAG_Z |= res;
		FLAG_C = CFLAG_SET;
		FLAG_X = XFLAG_SET;
	}
	else
	{
		FLAG_V = VFLAG_CLEAR;
		FLAG_C = CFLAG_CLEAR;
		FLAG_X = XFLAG_CLEAR;
	}
	FLAG_N = NFLAG_8(res);	/* Undefined N behavior */
}


static void m68k_op_neg_8_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint res = 0 - MASK_OUT_ABOVE_8(*r_dst);

	FLAG_N = NFLAG_8(res);
	FLAG_C = FLAG_X = CFLAG_8(res);
	FLAG_V = *r_dst & res;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_neg_8_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_8(res);
	FLAG_C = FLAG_X = CFLAG_8(res);
	FLAG_V = src & res;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_neg_8_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_8(res);
	FLAG_C = FLAG_X = CFLAG_8(res);
	FLAG_V = src & res;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_neg_8_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_8(res);
	FLAG_C = FLAG_X = CFLAG_8(res);
	FLAG_V = src & res;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_neg_8_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_8(res);
	FLAG_C = FLAG_X = CFLAG_8(res);
	FLAG_V = src & res;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_neg_8_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_8(res);
	FLAG_C = FLAG_X = CFLAG_8(res);
	FLAG_V = src & res;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_neg_8_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_8(res);
	FLAG_C = FLAG_X = CFLAG_8(res);
	FLAG_V = src & res;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_neg_8_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_8(res);
	FLAG_C = FLAG_X = CFLAG_8(res);
	FLAG_V = src & res;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_neg_8_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_8(res);
	FLAG_C = FLAG_X = CFLAG_8(res);
	FLAG_V = src & res;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_neg_8_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_8(res);
	FLAG_C = FLAG_X = CFLAG_8(res);
	FLAG_V = src & res;
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_neg_16_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint res = 0 - MASK_OUT_ABOVE_16(*r_dst);

	FLAG_N = NFLAG_16(res);
	FLAG_C = FLAG_X = CFLAG_16(res);
	FLAG_V = (*r_dst & res)>>8;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_neg_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_16(res);
	FLAG_C = FLAG_X = CFLAG_16(res);
	FLAG_V = (src & res)>>8;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_neg_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_16(res);
	FLAG_C = FLAG_X = CFLAG_16(res);
	FLAG_V = (src & res)>>8;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_neg_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_16(res);
	FLAG_C = FLAG_X = CFLAG_16(res);
	FLAG_V = (src & res)>>8;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_neg_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_16(res);
	FLAG_C = FLAG_X = CFLAG_16(res);
	FLAG_V = (src & res)>>8;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_neg_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_16(res);
	FLAG_C = FLAG_X = CFLAG_16(res);
	FLAG_V = (src & res)>>8;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_neg_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_16(res);
	FLAG_C = FLAG_X = CFLAG_16(res);
	FLAG_V = (src & res)>>8;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_neg_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_16(res);
	FLAG_C = FLAG_X = CFLAG_16(res);
	FLAG_V = (src & res)>>8;
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_neg_32_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint res = 0 - *r_dst;

	FLAG_N = NFLAG_32(res);
	FLAG_C = FLAG_X = CFLAG_SUB_32(*r_dst, 0, res);
	FLAG_V = (*r_dst & res)>>24;
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_neg_32_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_32(res);
	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_neg_32_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_32(res);
	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_neg_32_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_32(res);
	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_neg_32_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_32(res);
	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_neg_32_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_32(res);
	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_neg_32_aw(struct m68k_module *module)
{
	uint ea = EA_AW_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_32(res);
	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_neg_32_al(struct m68k_module *module)
{
	uint ea = EA_AL_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - src;

	FLAG_N = NFLAG_32(res);
	FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_negx_8_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint res = 0 - MASK_OUT_ABOVE_8(*r_dst) - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = *r_dst & res;

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
}


static void m68k_op_negx_8_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = src & res;

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_negx_8_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = src & res;

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_negx_8_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = src & res;

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_negx_8_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = src & res;

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_negx_8_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = src & res;

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_negx_8_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = src & res;

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_negx_8_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = src & res;

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_negx_8_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = src & res;

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_negx_8_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint src = m68ki_read_8(module, ea);
	uint res = 0 - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = src & res;

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_negx_16_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint res = 0 - MASK_OUT_ABOVE_16(*r_dst) - XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = (*r_dst & res)>>8;

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
}


static void m68k_op_negx_16_ai(struct m68k_module *module)
{
	uint ea  = EA_AY_AI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = (src & res)>>8;

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_negx_16_pi(struct m68k_module *module)
{
	uint ea  = EA_AY_PI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = (src & res)>>8;

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_negx_16_pd(struct m68k_module *module)
{
	uint ea  = EA_AY_PD_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = (src & res)>>8;

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_negx_16_di(struct m68k_module *module)
{
	uint ea  = EA_AY_DI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = (src & res)>>8;

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_negx_16_ix(struct m68k_module *module)
{
	uint ea  = EA_AY_IX_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = (src & res)>>8;

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_negx_16_aw(struct m68k_module *module)
{
	uint ea  = EA_AW_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = (src & res)>>8;

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_negx_16_al(struct m68k_module *module)
{
	uint ea  = EA_AL_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = (src & res)>>8;

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_negx_32_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint res = 0 - MASK_OUT_ABOVE_32(*r_dst) - XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(*r_dst, 0, res);
	FLAG_V = (*r_dst & res)>>24;

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	*r_dst = res;
}


static void m68k_op_negx_32_ai(struct m68k_module *module)
{
	uint ea  = EA_AY_AI_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_negx_32_pi(struct m68k_module *module)
{
	uint ea  = EA_AY_PI_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_negx_32_pd(struct m68k_module *module)
{
	uint ea  = EA_AY_PD_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_negx_32_di(struct m68k_module *module)
{
	uint ea  = EA_AY_DI_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_negx_32_ix(struct m68k_module *module)
{
	uint ea  = EA_AY_IX_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_negx_32_aw(struct m68k_module *module)
{
	uint ea  = EA_AW_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_negx_32_al(struct m68k_module *module)
{
	uint ea  = EA_AL_32(module);
	uint src = m68ki_read_32(module, ea);
	uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
	FLAG_V = (src & res)>>24;

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_nop(struct m68k_module *module)
{
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
}


static void m68k_op_not_8_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint res = MASK_OUT_ABOVE_8(~*r_dst);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_8_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_8_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_8_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_8_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_8_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_8_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_8_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_8_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_8_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_16_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint res = MASK_OUT_ABOVE_16(~*r_dst);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_32_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint res = *r_dst = MASK_OUT_ABOVE_32(~*r_dst);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_32_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_32(module);
	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(module, ea));

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_32_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_32(module);
	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(module, ea));

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_32_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_32(module);
	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(module, ea));

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_32_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);
	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(module, ea));

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_32_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_32(module);
	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(module, ea));

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_32_aw(struct m68k_module *module)
{
	uint ea = EA_AW_32(module);
	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(module, ea));

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_not_32_al(struct m68k_module *module)
{
	uint ea = EA_AL_32(module);
	uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(module, ea));

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= MASK_OUT_ABOVE_8(DY)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_ai(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_AI_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_pi(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PI_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_pi7(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PI_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_pd(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PD_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_pd7(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PD_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_di(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_DI_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_ix(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_IX_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_aw(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AW_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_al(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_AL_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_pcdi(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCDI_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_pcix(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCIX_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_er_i(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DX |= OPER_I_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= MASK_OUT_ABOVE_16(DY)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_ai(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_AI_16(module)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_pi(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PI_16(module)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_pd(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PD_16(module)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_di(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_DI_16(module)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_ix(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_IX_16(module)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_aw(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AW_16(module)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_al(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= OPER_AL_16(module)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_pcdi(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCDI_16(module)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_pcix(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCIX_16(module)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_er_i(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16((DX |= OPER_I_16(module)));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_d(struct m68k_module *module)
{
	uint res = DX |= DY;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_ai(struct m68k_module *module)
{
	uint res = DX |= OPER_AY_AI_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_pi(struct m68k_module *module)
{
	uint res = DX |= OPER_AY_PI_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_pd(struct m68k_module *module)
{
	uint res = DX |= OPER_AY_PD_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_di(struct m68k_module *module)
{
	uint res = DX |= OPER_AY_DI_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_ix(struct m68k_module *module)
{
	uint res = DX |= OPER_AY_IX_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_aw(struct m68k_module *module)
{
	uint res = DX |= OPER_AW_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_al(struct m68k_module *module)
{
	uint res = DX |= OPER_AL_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_pcdi(struct m68k_module *module)
{
	uint res = DX |= OPER_PCDI_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_pcix(struct m68k_module *module)
{
	uint res = DX |= OPER_PCIX_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_er_i(struct m68k_module *module)
{
	uint res = DX |= OPER_I_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_re_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_re_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_8_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_16_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_32(module);
	uint res = DX | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_32(module);
	uint res = DX | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_32(module);
	uint res = DX | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);
	uint res = DX | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_32(module);
	uint res = DX | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_32(module);
	uint res = DX | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_or_32_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_32(module);
	uint res = DX | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_8_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8((DY |= OPER_I_8(module)));

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_8_ai(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_AI_8(module);
	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_8_pi(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_PI_8(module);
	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_8_pi7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_A7_PI_8(module);
	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_8_pd(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_PD_8(module);
	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_8_pd7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_A7_PD_8(module);
	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_8_di(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_DI_8(module);
	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_8_ix(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_IX_8(module);
	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_8_aw(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AW_8(module);
	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_8_al(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AL_8(module);
	uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(module, ea));

	m68ki_write_8(module, ea, res);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_16_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY |= OPER_I_16(module));

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_16_ai(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_AI_16(module);
	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_16_pi(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_PI_16(module);
	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_16_pd(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_PD_16(module);
	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_16_di(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_DI_16(module);
	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_16_ix(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_IX_16(module);
	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_16_aw(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AW_16(module);
	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_16_al(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AL_16(module);
	uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(module, ea));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_32_d(struct m68k_module *module)
{
	uint res = DY |= OPER_I_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_32_ai(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_AI_32(module);
	uint res = src | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_32_pi(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_PI_32(module);
	uint res = src | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_32_pd(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_PD_32(module);
	uint res = src | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_32_di(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_DI_32(module);
	uint res = src | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_32_ix(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_IX_32(module);
	uint res = src | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_32_aw(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AW_32(module);
	uint res = src | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_32_al(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AL_32(module);
	uint res = src | m68ki_read_32(module, ea);

	m68ki_write_32(module, ea, res);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ori_16_toc(struct m68k_module *module)
{
	m68ki_set_ccr(module, m68ki_get_ccr() | OPER_I_8(module));
}


static void m68k_op_ori_16_tos(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint src = OPER_I_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		m68ki_set_sr(module, m68ki_get_sr() | src);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_pea_32_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_32(module);

	m68ki_push_32(module, ea);
}


static void m68k_op_pea_32_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);

	m68ki_push_32(module, ea);
}


static void m68k_op_pea_32_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_32(module);

	m68ki_push_32(module, ea);
}


static void m68k_op_pea_32_aw(struct m68k_module *module)
{
	uint ea = EA_AW_32(module);

	m68ki_push_32(module, ea);
}


static void m68k_op_pea_32_al(struct m68k_module *module)
{
	uint ea = EA_AL_32(module);

	m68ki_push_32(module, ea);
}


static void m68k_op_pea_32_pcdi(struct m68k_module *module)
{
	uint ea = EA_PCDI_32(module);

	m68ki_push_32(module, ea);
}


static void m68k_op_pea_32_pcix(struct m68k_module *module)
{
	uint ea = EA_PCIX_32(module);

	m68ki_push_32(module, ea);
}


static void m68k_op_reset(struct m68k_module *module)
{
	if(FLAG_S)
	{
		m68ki_output_reset();		   /* auto-disable (see m68kcpu.h) */
		USE_CYCLES(CYC_RESET);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_ror_8_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint shift = orig_shift & 7;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = ROR_8(src, shift);

	if(orig_shift != 0)
		USE_CYCLES(orig_shift<<CYC_SHIFT);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = src << (9-orig_shift);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_16_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = ROR_16(src, shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src << (9-shift);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_32_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint64 src = *r_dst;
	uint res = ROR_32(src, shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = src << (9-shift);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_8_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;
	uint shift = orig_shift & 7;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = ROR_8(src, shift);

	if(orig_shift != 0)
	{
		USE_CYCLES(orig_shift<<CYC_SHIFT);

		*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
		FLAG_C = src << (8-((shift-1)&7));
		FLAG_N = NFLAG_8(res);
		FLAG_Z = res;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_8(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_16_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;
	uint shift = orig_shift & 15;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = ROR_16(src, shift);

	if(orig_shift != 0)
	{
		USE_CYCLES(orig_shift<<CYC_SHIFT);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		FLAG_C = (src >> ((shift - 1) & 15)) << 8;
		FLAG_N = NFLAG_16(res);
		FLAG_Z = res;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_16(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_32_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;
	uint shift = orig_shift & 31;
	uint64 src = *r_dst;
	uint res = ROR_32(src, shift);

	if(orig_shift != 0)
	{
		USE_CYCLES(orig_shift<<CYC_SHIFT);

		*r_dst = res;
		FLAG_C = (src >> ((shift - 1) & 31)) << 8;
		FLAG_N = NFLAG_32(res);
		FLAG_Z = res;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_32(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_16(src, 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_16(src, 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_16(src, 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_16(src, 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_16(src, 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_16(src, 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_ror_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_16(src, 1);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src << 8;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_8_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint shift = orig_shift & 7;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = ROL_8(src, shift);

	if(orig_shift != 0)
		USE_CYCLES(orig_shift<<CYC_SHIFT);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_C = src << orig_shift;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_16_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = ROL_16(src, shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src >> (8-shift);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_32_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint64 src = *r_dst;
	uint res = ROL_32(src, shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_C = src >> (24-shift);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_8_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;
	uint shift = orig_shift & 7;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = ROL_8(src, shift);

	if(orig_shift != 0)
	{
		USE_CYCLES(orig_shift<<CYC_SHIFT);

		if(shift != 0)
		{
			*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
			FLAG_C = src << shift;
			FLAG_N = NFLAG_8(res);
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}
		FLAG_C = (src & 1)<<8;
		FLAG_N = NFLAG_8(src);
		FLAG_Z = src;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_8(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_16_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;
	uint shift = orig_shift & 15;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = MASK_OUT_ABOVE_16(ROL_16(src, shift));

	if(orig_shift != 0)
	{
		USE_CYCLES(orig_shift<<CYC_SHIFT);

		if(shift != 0)
		{
			*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
			FLAG_C = (src << shift) >> 8;
			FLAG_N = NFLAG_16(res);
			FLAG_Z = res;
			FLAG_V = VFLAG_CLEAR;
			return;
		}
		FLAG_C = (src & 1)<<8;
		FLAG_N = NFLAG_16(src);
		FLAG_Z = src;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_16(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_32_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;
	uint shift = orig_shift & 31;
	uint64 src = *r_dst;
	uint res = ROL_32(src, shift);

	if(orig_shift != 0)
	{
		USE_CYCLES(orig_shift<<CYC_SHIFT);

		*r_dst = res;

		FLAG_C = (src >> ((32 - shift) & 0x1f)) << 8;
		FLAG_N = NFLAG_32(res);
		FLAG_Z = res;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = CFLAG_CLEAR;
	FLAG_N = NFLAG_32(src);
	FLAG_Z = src;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rol_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_C = src >> 7;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_8_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	FLAG_C = FLAG_X = res;
	res = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_16_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = ROR_17(src | (XFLAG_AS_1() << 16), shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_32_s(struct m68k_module *module)
{
#if M68K_USE_64_BIT

	uint*  r_dst = &DY;
	uint   shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint64 src   = *r_dst;
	uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	res = ROR_33_64(res, shift);

	FLAG_C = FLAG_X = res >> 24;
	res = MASK_OUT_ABOVE_32(res);

	*r_dst =  res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;

#else

	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = *r_dst;
	uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift)));
	uint new_x_flag = src & (1 << (shift - 1));

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = res;

	FLAG_C = FLAG_X = (new_x_flag != 0)<<8;
	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;

#endif
}


static void m68k_op_roxr_8_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;

	if(orig_shift != 0)
	{
		uint shift = orig_shift % 9;
		uint src   = MASK_OUT_ABOVE_8(*r_dst);
		uint res   = ROR_9(src | (XFLAG_AS_1() << 8), shift);

		USE_CYCLES(orig_shift<<CYC_SHIFT);

		FLAG_C = FLAG_X = res;
		res = MASK_OUT_ABOVE_8(res);

		*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
		FLAG_N = NFLAG_8(res);
		FLAG_Z = res;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = FLAG_X;
	FLAG_N = NFLAG_8(*r_dst);
	FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_16_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;

	if(orig_shift != 0)
	{
		uint shift = orig_shift % 17;
		uint src   = MASK_OUT_ABOVE_16(*r_dst);
		uint res   = ROR_17(src | (XFLAG_AS_1() << 16), shift);

		USE_CYCLES(orig_shift<<CYC_SHIFT);

		FLAG_C = FLAG_X = res >> 8;
		res = MASK_OUT_ABOVE_16(res);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		FLAG_N = NFLAG_16(res);
		FLAG_Z = res;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = FLAG_X;
	FLAG_N = NFLAG_16(*r_dst);
	FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_32_r(struct m68k_module *module)
{
#if M68K_USE_64_BIT

	uint*  r_dst = &DY;
	uint   orig_shift = DX & 0x3f;

	if(orig_shift != 0)
	{
		uint   shift = orig_shift % 33;
		uint64 src   = *r_dst;
		uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);

		res = ROR_33_64(res, shift);

		USE_CYCLES(orig_shift<<CYC_SHIFT);

		FLAG_C = FLAG_X = res >> 24;
		res = MASK_OUT_ABOVE_32(res);

		*r_dst = res;
		FLAG_N = NFLAG_32(res);
		FLAG_Z = res;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = FLAG_X;
	FLAG_N = NFLAG_32(*r_dst);
	FLAG_Z = *r_dst;
	FLAG_V = VFLAG_CLEAR;

#else

	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;
	uint shift = orig_shift % 33;
	uint src = *r_dst;
	uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift)));
	uint new_x_flag = src & (1 << (shift - 1));

	if(orig_shift != 0)
		USE_CYCLES(orig_shift<<CYC_SHIFT);

	if(shift != 0)
	{
		*r_dst = res;
		FLAG_X = (new_x_flag != 0)<<8;
	}
	else
		res = src;
	FLAG_C = FLAG_X;
	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;

#endif
}


static void m68k_op_roxr_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxr_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_8_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_8(*r_dst);
	uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	FLAG_C = FLAG_X = res;
	res = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_16_s(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = MASK_OUT_ABOVE_16(*r_dst);
	uint res = ROL_17(src | (XFLAG_AS_1() << 16), shift);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_32_s(struct m68k_module *module)
{
#if M68K_USE_64_BIT

	uint*  r_dst = &DY;
	uint   shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint64 src   = *r_dst;
	uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	res = ROL_33_64(res, shift);

	FLAG_C = FLAG_X = res >> 24;
	res = MASK_OUT_ABOVE_32(res);

	*r_dst = res;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;

#else

	uint* r_dst = &DY;
	uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
	uint src = *r_dst;
	uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1)));
	uint new_x_flag = src & (1 << (32 - shift));

	if(shift != 0)
		USE_CYCLES(shift<<CYC_SHIFT);

	*r_dst = res;

	FLAG_C = FLAG_X = (new_x_flag != 0)<<8;
	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;

#endif
}


static void m68k_op_roxl_8_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;


	if(orig_shift != 0)
	{
		uint shift = orig_shift % 9;
		uint src   = MASK_OUT_ABOVE_8(*r_dst);
		uint res   = ROL_9(src | (XFLAG_AS_1() << 8), shift);

		USE_CYCLES(orig_shift<<CYC_SHIFT);

		FLAG_C = FLAG_X = res;
		res = MASK_OUT_ABOVE_8(res);

		*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
		FLAG_N = NFLAG_8(res);
		FLAG_Z = res;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = FLAG_X;
	FLAG_N = NFLAG_8(*r_dst);
	FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_16_r(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;

	if(orig_shift != 0)
	{
		uint shift = orig_shift % 17;
		uint src   = MASK_OUT_ABOVE_16(*r_dst);
		uint res   = ROL_17(src | (XFLAG_AS_1() << 16), shift);

		USE_CYCLES(orig_shift<<CYC_SHIFT);

		FLAG_C = FLAG_X = res >> 8;
		res = MASK_OUT_ABOVE_16(res);

		*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
		FLAG_N = NFLAG_16(res);
		FLAG_Z = res;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = FLAG_X;
	FLAG_N = NFLAG_16(*r_dst);
	FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_32_r(struct m68k_module *module)
{
#if M68K_USE_64_BIT

	uint*  r_dst = &DY;
	uint   orig_shift = DX & 0x3f;

	if(orig_shift != 0)
	{
		uint   shift = orig_shift % 33;
		uint64 src   = *r_dst;
		uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);

		res = ROL_33_64(res, shift);

		USE_CYCLES(orig_shift<<CYC_SHIFT);

		FLAG_C = FLAG_X = res >> 24;
		res = MASK_OUT_ABOVE_32(res);

		*r_dst = res;
		FLAG_N = NFLAG_32(res);
		FLAG_Z = res;
		FLAG_V = VFLAG_CLEAR;
		return;
	}

	FLAG_C = FLAG_X;
	FLAG_N = NFLAG_32(*r_dst);
	FLAG_Z = *r_dst;
	FLAG_V = VFLAG_CLEAR;

#else

	uint* r_dst = &DY;
	uint orig_shift = DX & 0x3f;
	uint shift = orig_shift % 33;
	uint src = *r_dst;
	uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1)));
	uint new_x_flag = src & (1 << (32 - shift));

	if(orig_shift != 0)
		USE_CYCLES(orig_shift<<CYC_SHIFT);

	if(shift != 0)
	{
		*r_dst = res;
		FLAG_X = (new_x_flag != 0)<<8;
	}
	else
		res = src;
	FLAG_C = FLAG_X;
	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;

#endif
}


static void m68k_op_roxl_16_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_16_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_16_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_16_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_16_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_16_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_roxl_16_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = m68ki_read_16(module, ea);
	uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);

	FLAG_C = FLAG_X = res >> 8;
	res = MASK_OUT_ABOVE_16(res);

	m68ki_write_16(module, ea, res);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_rte_32(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr;
		uint new_pc;
		uint format_word;

		m68ki_rte_callback();		   /* auto-disable (see m68kcpu.h) */
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */

		if(CPU_TYPE_IS_000(CPU_TYPE))
		{
			new_sr = m68ki_pull_16(module);
			new_pc = m68ki_pull_32(module);
			m68ki_jump(module, new_pc);
			m68ki_set_sr(module, new_sr);

			CPU_INSTR_MODE = INSTRUCTION_YES;
			CPU_RUN_MODE = RUN_MODE_NORMAL;

			return;
		}

		if(CPU_TYPE_IS_010(CPU_TYPE))
		{
			format_word = m68ki_read_16(module, REG_A[7]+6) >> 12;
			if(format_word == 0)
			{
				new_sr = m68ki_pull_16(module);
				new_pc = m68ki_pull_32(module);
				m68ki_fake_pull_16(module);	/* format word */
				m68ki_jump(module, new_pc);
				m68ki_set_sr(module, new_sr);
				CPU_INSTR_MODE = INSTRUCTION_YES;
				CPU_RUN_MODE = RUN_MODE_NORMAL;
				return;
			} else if (format_word == 8) {
				/* Format 8 stack frame -- 68010 only. 29 word bus/address error */
				new_sr = m68ki_pull_16(module);
				new_pc = m68ki_pull_32(module);
				m68ki_fake_pull_16(module);	/* format word */
				m68ki_fake_pull_16(module);	/* special status word */
				m68ki_fake_pull_32(module);	/* fault address */
				m68ki_fake_pull_16(module);	/* unused/reserved */
				m68ki_fake_pull_16(module);	/* data output buffer */
				m68ki_fake_pull_16(module);	/* unused/reserved */
				m68ki_fake_pull_16(module);	/* data input buffer */
				m68ki_fake_pull_16(module);	/* unused/reserved */
				m68ki_fake_pull_16(module);	/* instruction input buffer */
				m68ki_fake_pull_32(module);	/* internal information, 16 words */
				m68ki_fake_pull_32(module);	/* (actually, we use 8 DWORDs) */
				m68ki_fake_pull_32(module);
				m68ki_fake_pull_32(module);
				m68ki_fake_pull_32(module);
				m68ki_fake_pull_32(module);
				m68ki_fake_pull_32(module);
				m68ki_fake_pull_32(module);
				m68ki_jump(module, new_pc);
				m68ki_set_sr(module, new_sr);
				CPU_INSTR_MODE = INSTRUCTION_YES;
				CPU_RUN_MODE = RUN_MODE_NORMAL;
				return;
			}
			CPU_INSTR_MODE = INSTRUCTION_YES;
			CPU_RUN_MODE = RUN_MODE_NORMAL;
			/* Not handling other exception types (9) */
			m68ki_exception_format_error(module);
			return;
		}

		/* Otherwise it's 020 */
rte_loop:
		format_word = m68ki_read_16(module, REG_A[7]+6) >> 12;
		switch(format_word)
		{
			case 0: /* Normal */
				new_sr = m68ki_pull_16(module);
				new_pc = m68ki_pull_32(module);
				m68ki_fake_pull_16(module);	/* format word */
				m68ki_jump(module, new_pc);
				m68ki_set_sr(module, new_sr);
				CPU_INSTR_MODE = INSTRUCTION_YES;
				CPU_RUN_MODE = RUN_MODE_NORMAL;
				return;
			case 1: /* Throwaway */
				new_sr = m68ki_pull_16(module);
				m68ki_fake_pull_32(module);	/* program counter */
				m68ki_fake_pull_16(module);	/* format word */
				m68ki_set_sr_noint(module, new_sr);
				goto rte_loop;
			case 2: /* Trap */
				new_sr = m68ki_pull_16(module);
				new_pc = m68ki_pull_32(module);
				m68ki_fake_pull_16(module);	/* format word */
				m68ki_fake_pull_32(module);	/* address */
				m68ki_jump(module, new_pc);
				m68ki_set_sr(module, new_sr);
				CPU_INSTR_MODE = INSTRUCTION_YES;
				CPU_RUN_MODE = RUN_MODE_NORMAL;
				return;
		}
		/* Not handling long or short bus fault */
		CPU_INSTR_MODE = INSTRUCTION_YES;
		CPU_RUN_MODE = RUN_MODE_NORMAL;
		m68ki_exception_format_error(module);
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_rtr_32(struct m68k_module *module)
{
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_set_ccr(module, m68ki_pull_16(module));
	m68ki_jump(module, m68ki_pull_32(module));
}


static void m68k_op_rts_32(struct m68k_module *module)
{
	m68ki_trace_t0();				   /* auto-disable (see m68kcpu.h) */
	m68ki_jump(module, m68ki_pull_32(module));
}


static void m68k_op_sbcd_8_rr(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = DY;
	uint dst = *r_dst;
	uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();

	FLAG_V = ~res; /* Undefined V behavior */

	if(res > 9)
		res -= 6;
	res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
	FLAG_X = FLAG_C = (res > 0x99) << 8;
	if(FLAG_C)
		res += 0xa0;

	res = MASK_OUT_ABOVE_8(res);

	FLAG_V &= res; /* Undefined V behavior part II */
	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
	FLAG_Z |= res;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
}


static void m68k_op_sbcd_8_mm_ax7(struct m68k_module *module)
{
	uint src = OPER_AY_PD_8(module);
	uint ea  = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();

	FLAG_V = ~res; /* Undefined V behavior */

	if(res > 9)
		res -= 6;
	res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
	FLAG_X = FLAG_C = (res > 0x99) << 8;
	if(FLAG_C)
		res += 0xa0;

	res = MASK_OUT_ABOVE_8(res);

	FLAG_V &= res; /* Undefined V behavior part II */
	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_sbcd_8_mm_ay7(struct m68k_module *module)
{
	uint src = OPER_A7_PD_8(module);
	uint ea  = EA_AX_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();

	FLAG_V = ~res; /* Undefined V behavior */

	if(res > 9)
		res -= 6;
	res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
	FLAG_X = FLAG_C = (res > 0x99) << 8;
	if(FLAG_C)
		res += 0xa0;

	res = MASK_OUT_ABOVE_8(res);

	FLAG_V &= res; /* Undefined V behavior part II */
	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_sbcd_8_mm_axy7(struct m68k_module *module)
{
	uint src = OPER_A7_PD_8(module);
	uint ea  = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();

	FLAG_V = ~res; /* Undefined V behavior */

	if(res > 9)
		res -= 6;
	res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
	FLAG_X = FLAG_C = (res > 0x99) << 8;
	if(FLAG_C)
		res += 0xa0;

	res = MASK_OUT_ABOVE_8(res);

	FLAG_V &= res; /* Undefined V behavior part II */
	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_sbcd_8_mm(struct m68k_module *module)
{
	uint src = OPER_AY_PD_8(module);
	uint ea  = EA_AX_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();

	FLAG_V = ~res; /* Undefined V behavior */

	if(res > 9)
		res -= 6;
	res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
	FLAG_X = FLAG_C = (res > 0x99) << 8;
	if(FLAG_C)
		res += 0xa0;

	res = MASK_OUT_ABOVE_8(res);

	FLAG_V &= res; /* Undefined V behavior part II */
	FLAG_N = NFLAG_8(res); /* Undefined N behavior */
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_st_8_d(struct m68k_module *module)
{
	DY |= 0xff;
}


static void m68k_op_st_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), 0xff);
}


static void m68k_op_st_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), 0xff);
}


static void m68k_op_st_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), 0xff);
}


static void m68k_op_st_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), 0xff);
}


static void m68k_op_st_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), 0xff);
}


static void m68k_op_st_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), 0xff);
}


static void m68k_op_st_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), 0xff);
}


static void m68k_op_st_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), 0xff);
}


static void m68k_op_st_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), 0xff);
}


static void m68k_op_sf_8_d(struct m68k_module *module)
{
	DY &= 0xffffff00;
}


static void m68k_op_sf_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), 0);
}


static void m68k_op_sf_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), 0);
}


static void m68k_op_sf_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), 0);
}


static void m68k_op_sf_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), 0);
}


static void m68k_op_sf_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), 0);
}


static void m68k_op_sf_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), 0);
}


static void m68k_op_sf_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), 0);
}


static void m68k_op_sf_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), 0);
}


static void m68k_op_sf_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), 0);
}


static void m68k_op_shi_8_d(struct m68k_module *module)
{
	if(COND_HI())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_sls_8_d(struct m68k_module *module)
{
	if(COND_LS())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_scc_8_d(struct m68k_module *module)
{
	if(COND_CC())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_scs_8_d(struct m68k_module *module)
{
	if(COND_CS())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_sne_8_d(struct m68k_module *module)
{
	if(COND_NE())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_seq_8_d(struct m68k_module *module)
{
	if(COND_EQ())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_svc_8_d(struct m68k_module *module)
{
	if(COND_VC())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_svs_8_d(struct m68k_module *module)
{
	if(COND_VS())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_spl_8_d(struct m68k_module *module)
{
	if(COND_PL())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_smi_8_d(struct m68k_module *module)
{
	if(COND_MI())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_sge_8_d(struct m68k_module *module)
{
	if(COND_GE())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_slt_8_d(struct m68k_module *module)
{
	if(COND_LT())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_sgt_8_d(struct m68k_module *module)
{
	if(COND_GT())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_sle_8_d(struct m68k_module *module)
{
	if(COND_LE())
	{
		DY |= 0xff;
		USE_CYCLES(CYC_SCC_R_TRUE);
		return;
	}
	DY &= 0xffffff00;
}


static void m68k_op_shi_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_HI() ? 0xff : 0);
}


static void m68k_op_shi_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_HI() ? 0xff : 0);
}


static void m68k_op_shi_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_HI() ? 0xff : 0);
}


static void m68k_op_shi_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_HI() ? 0xff : 0);
}


static void m68k_op_shi_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_HI() ? 0xff : 0);
}


static void m68k_op_shi_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_HI() ? 0xff : 0);
}


static void m68k_op_shi_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_HI() ? 0xff : 0);
}


static void m68k_op_shi_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_HI() ? 0xff : 0);
}


static void m68k_op_shi_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_HI() ? 0xff : 0);
}


static void m68k_op_sls_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_LS() ? 0xff : 0);
}


static void m68k_op_sls_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_LS() ? 0xff : 0);
}


static void m68k_op_sls_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_LS() ? 0xff : 0);
}


static void m68k_op_sls_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_LS() ? 0xff : 0);
}


static void m68k_op_sls_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_LS() ? 0xff : 0);
}


static void m68k_op_sls_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_LS() ? 0xff : 0);
}


static void m68k_op_sls_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_LS() ? 0xff : 0);
}


static void m68k_op_sls_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_LS() ? 0xff : 0);
}


static void m68k_op_sls_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_LS() ? 0xff : 0);
}


static void m68k_op_scc_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_CC() ? 0xff : 0);
}


static void m68k_op_scc_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_CC() ? 0xff : 0);
}


static void m68k_op_scc_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_CC() ? 0xff : 0);
}


static void m68k_op_scc_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_CC() ? 0xff : 0);
}


static void m68k_op_scc_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_CC() ? 0xff : 0);
}


static void m68k_op_scc_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_CC() ? 0xff : 0);
}


static void m68k_op_scc_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_CC() ? 0xff : 0);
}


static void m68k_op_scc_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_CC() ? 0xff : 0);
}


static void m68k_op_scc_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_CC() ? 0xff : 0);
}


static void m68k_op_scs_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_CS() ? 0xff : 0);
}


static void m68k_op_scs_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_CS() ? 0xff : 0);
}


static void m68k_op_scs_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_CS() ? 0xff : 0);
}


static void m68k_op_scs_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_CS() ? 0xff : 0);
}


static void m68k_op_scs_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_CS() ? 0xff : 0);
}


static void m68k_op_scs_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_CS() ? 0xff : 0);
}


static void m68k_op_scs_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_CS() ? 0xff : 0);
}


static void m68k_op_scs_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_CS() ? 0xff : 0);
}


static void m68k_op_scs_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_CS() ? 0xff : 0);
}


static void m68k_op_sne_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_NE() ? 0xff : 0);
}


static void m68k_op_sne_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_NE() ? 0xff : 0);
}


static void m68k_op_sne_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_NE() ? 0xff : 0);
}


static void m68k_op_sne_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_NE() ? 0xff : 0);
}


static void m68k_op_sne_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_NE() ? 0xff : 0);
}


static void m68k_op_sne_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_NE() ? 0xff : 0);
}


static void m68k_op_sne_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_NE() ? 0xff : 0);
}


static void m68k_op_sne_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_NE() ? 0xff : 0);
}


static void m68k_op_sne_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_NE() ? 0xff : 0);
}


static void m68k_op_seq_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_EQ() ? 0xff : 0);
}


static void m68k_op_seq_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_EQ() ? 0xff : 0);
}


static void m68k_op_seq_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_EQ() ? 0xff : 0);
}


static void m68k_op_seq_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_EQ() ? 0xff : 0);
}


static void m68k_op_seq_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_EQ() ? 0xff : 0);
}


static void m68k_op_seq_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_EQ() ? 0xff : 0);
}


static void m68k_op_seq_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_EQ() ? 0xff : 0);
}


static void m68k_op_seq_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_EQ() ? 0xff : 0);
}


static void m68k_op_seq_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_EQ() ? 0xff : 0);
}


static void m68k_op_svc_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_VC() ? 0xff : 0);
}


static void m68k_op_svc_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_VC() ? 0xff : 0);
}


static void m68k_op_svc_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_VC() ? 0xff : 0);
}


static void m68k_op_svc_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_VC() ? 0xff : 0);
}


static void m68k_op_svc_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_VC() ? 0xff : 0);
}


static void m68k_op_svc_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_VC() ? 0xff : 0);
}


static void m68k_op_svc_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_VC() ? 0xff : 0);
}


static void m68k_op_svc_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_VC() ? 0xff : 0);
}


static void m68k_op_svc_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_VC() ? 0xff : 0);
}


static void m68k_op_svs_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_VS() ? 0xff : 0);
}


static void m68k_op_svs_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_VS() ? 0xff : 0);
}


static void m68k_op_svs_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_VS() ? 0xff : 0);
}


static void m68k_op_svs_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_VS() ? 0xff : 0);
}


static void m68k_op_svs_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_VS() ? 0xff : 0);
}


static void m68k_op_svs_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_VS() ? 0xff : 0);
}


static void m68k_op_svs_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_VS() ? 0xff : 0);
}


static void m68k_op_svs_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_VS() ? 0xff : 0);
}


static void m68k_op_svs_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_VS() ? 0xff : 0);
}


static void m68k_op_spl_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_PL() ? 0xff : 0);
}


static void m68k_op_spl_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_PL() ? 0xff : 0);
}


static void m68k_op_spl_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_PL() ? 0xff : 0);
}


static void m68k_op_spl_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_PL() ? 0xff : 0);
}


static void m68k_op_spl_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_PL() ? 0xff : 0);
}


static void m68k_op_spl_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_PL() ? 0xff : 0);
}


static void m68k_op_spl_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_PL() ? 0xff : 0);
}


static void m68k_op_spl_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_PL() ? 0xff : 0);
}


static void m68k_op_spl_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_PL() ? 0xff : 0);
}


static void m68k_op_smi_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_MI() ? 0xff : 0);
}


static void m68k_op_smi_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_MI() ? 0xff : 0);
}


static void m68k_op_smi_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_MI() ? 0xff : 0);
}


static void m68k_op_smi_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_MI() ? 0xff : 0);
}


static void m68k_op_smi_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_MI() ? 0xff : 0);
}


static void m68k_op_smi_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_MI() ? 0xff : 0);
}


static void m68k_op_smi_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_MI() ? 0xff : 0);
}


static void m68k_op_smi_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_MI() ? 0xff : 0);
}


static void m68k_op_smi_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_MI() ? 0xff : 0);
}


static void m68k_op_sge_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_GE() ? 0xff : 0);
}


static void m68k_op_sge_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_GE() ? 0xff : 0);
}


static void m68k_op_sge_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_GE() ? 0xff : 0);
}


static void m68k_op_sge_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_GE() ? 0xff : 0);
}


static void m68k_op_sge_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_GE() ? 0xff : 0);
}


static void m68k_op_sge_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_GE() ? 0xff : 0);
}


static void m68k_op_sge_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_GE() ? 0xff : 0);
}


static void m68k_op_sge_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_GE() ? 0xff : 0);
}


static void m68k_op_sge_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_GE() ? 0xff : 0);
}


static void m68k_op_slt_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_LT() ? 0xff : 0);
}


static void m68k_op_slt_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_LT() ? 0xff : 0);
}


static void m68k_op_slt_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_LT() ? 0xff : 0);
}


static void m68k_op_slt_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_LT() ? 0xff : 0);
}


static void m68k_op_slt_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_LT() ? 0xff : 0);
}


static void m68k_op_slt_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_LT() ? 0xff : 0);
}


static void m68k_op_slt_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_LT() ? 0xff : 0);
}


static void m68k_op_slt_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_LT() ? 0xff : 0);
}


static void m68k_op_slt_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_LT() ? 0xff : 0);
}


static void m68k_op_sgt_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_GT() ? 0xff : 0);
}


static void m68k_op_sgt_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_GT() ? 0xff : 0);
}


static void m68k_op_sgt_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_GT() ? 0xff : 0);
}


static void m68k_op_sgt_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_GT() ? 0xff : 0);
}


static void m68k_op_sgt_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_GT() ? 0xff : 0);
}


static void m68k_op_sgt_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_GT() ? 0xff : 0);
}


static void m68k_op_sgt_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_GT() ? 0xff : 0);
}


static void m68k_op_sgt_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_GT() ? 0xff : 0);
}


static void m68k_op_sgt_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_GT() ? 0xff : 0);
}


static void m68k_op_sle_8_ai(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_AI_8(module), COND_LE() ? 0xff : 0);
}


static void m68k_op_sle_8_pi(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PI_8(module), COND_LE() ? 0xff : 0);
}


static void m68k_op_sle_8_pi7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PI_8(module), COND_LE() ? 0xff : 0);
}


static void m68k_op_sle_8_pd(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_PD_8(module), COND_LE() ? 0xff : 0);
}


static void m68k_op_sle_8_pd7(struct m68k_module *module)
{
	m68ki_write_8(module, EA_A7_PD_8(module), COND_LE() ? 0xff : 0);
}


static void m68k_op_sle_8_di(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_DI_8(module), COND_LE() ? 0xff : 0);
}


static void m68k_op_sle_8_ix(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AY_IX_8(module), COND_LE() ? 0xff : 0);
}


static void m68k_op_sle_8_aw(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AW_8(module), COND_LE() ? 0xff : 0);
}


static void m68k_op_sle_8_al(struct m68k_module *module)
{
	m68ki_write_8(module, EA_AL_8(module), COND_LE() ? 0xff : 0);
}


static void m68k_op_stop(struct m68k_module *module)
{
	if(FLAG_S)
	{
		uint new_sr = OPER_I_16(module);
		m68ki_trace_t0();			   /* auto-disable (see m68kcpu.h) */
		CPU_STOPPED |= STOP_LEVEL_STOP;
		m68ki_set_sr(module, new_sr);
		if(module->m68ki_remaining_cycles >= CYC_INSTRUCTION[REG_IR])
			module->m68ki_remaining_cycles = CYC_INSTRUCTION[REG_IR];
		else
			USE_ALL_CYCLES();
		return;
	}
	m68ki_exception_privilege_violation(module);
}


static void m68k_op_sub_8_er_d(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_8(DY);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_ai(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_AI_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_pi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PI_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_pi7(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_A7_PI_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_pd(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PD_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_pd7(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_A7_PD_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_di(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_DI_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_ix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_IX_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_aw(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AW_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_al(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AL_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_pcdi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCDI_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_pcix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCIX_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_8_er_i(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_I_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_d(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_16(DY);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_a(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_16(AY);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_ai(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_AI_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_pi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PI_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_pd(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PD_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_di(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_DI_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_ix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_IX_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_aw(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AW_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_al(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AL_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_pcdi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCDI_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_pcix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCIX_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_16_er_i(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_I_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_sub_32_er_d(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = DY;
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_a(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = AY;
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_ai(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_AI_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_pi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PI_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_pd(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_PD_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_di(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_DI_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_ix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AY_IX_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_aw(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AW_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_al(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_AL_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_pcdi(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCDI_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_pcix(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_PCIX_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_32_er_i(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = OPER_I_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);

	*r_dst = FLAG_Z;
}


static void m68k_op_sub_8_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_sub_8_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_sub_8_re_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_sub_8_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_sub_8_re_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_sub_8_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_sub_8_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_sub_8_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_sub_8_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint src = MASK_OUT_ABOVE_8(DX);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_sub_16_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_sub_16_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_sub_16_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_sub_16_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_sub_16_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_sub_16_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_sub_16_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_16(module);
	uint src = MASK_OUT_ABOVE_16(DX);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_sub_32_re_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_sub_32_re_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_sub_32_re_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_sub_32_re_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_sub_32_re_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_sub_32_re_aw(struct m68k_module *module)
{
	uint ea = EA_AW_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_sub_32_re_al(struct m68k_module *module)
{
	uint ea = EA_AL_32(module);
	uint src = DX;
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_suba_16_d(struct m68k_module *module)
{
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(DY));
}


static void m68k_op_suba_16_a(struct m68k_module *module)
{
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(AY));
}


static void m68k_op_suba_16_ai(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AY_AI_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_16_pi(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AY_PI_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_16_pd(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AY_PD_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_16_di(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AY_DI_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_16_ix(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AY_IX_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_16_aw(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AW_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_16_al(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_AL_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_16_pcdi(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_PCDI_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_16_pcix(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_PCIX_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_16_i(struct m68k_module *module)
{
	uint* r_dst = &AX;
	uint src = MAKE_INT_16(OPER_I_16(module));

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_32_d(struct m68k_module *module)
{
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - DY);
}


static void m68k_op_suba_32_a(struct m68k_module *module)
{
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - AY);
}


static void m68k_op_suba_32_ai(struct m68k_module *module)
{
	uint src = OPER_AY_AI_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_32_pi(struct m68k_module *module)
{
	uint src = OPER_AY_PI_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_32_pd(struct m68k_module *module)
{
	uint src = OPER_AY_PD_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_32_di(struct m68k_module *module)
{
	uint src = OPER_AY_DI_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_32_ix(struct m68k_module *module)
{
	uint src = OPER_AY_IX_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_32_aw(struct m68k_module *module)
{
	uint src = OPER_AW_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_32_al(struct m68k_module *module)
{
	uint src = OPER_AL_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_32_pcdi(struct m68k_module *module)
{
	uint src = OPER_PCDI_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_32_pcix(struct m68k_module *module)
{
	uint src = OPER_PCIX_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_suba_32_i(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint* r_dst = &AX;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
}


static void m68k_op_subi_8_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = OPER_I_8(module);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_subi_8_ai(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_AI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subi_8_pi(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subi_8_pi7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_A7_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subi_8_pd(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subi_8_pd7(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subi_8_di(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_DI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subi_8_ix(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AY_IX_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subi_8_aw(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AW_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subi_8_al(struct m68k_module *module)
{
	uint src = OPER_I_8(module);
	uint ea = EA_AL_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subi_16_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = OPER_I_16(module);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_subi_16_ai(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_AI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subi_16_pi(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_PI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subi_16_pd(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_PD_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subi_16_di(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_DI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subi_16_ix(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AY_IX_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subi_16_aw(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AW_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subi_16_al(struct m68k_module *module)
{
	uint src = OPER_I_16(module);
	uint ea = EA_AL_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subi_32_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = OPER_I_32(module);
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	*r_dst = FLAG_Z;
}


static void m68k_op_subi_32_ai(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_AI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subi_32_pi(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_PI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subi_32_pd(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_PD_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subi_32_di(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_DI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subi_32_ix(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AY_IX_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subi_32_aw(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AW_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subi_32_al(struct m68k_module *module)
{
	uint src = OPER_I_32(module);
	uint ea = EA_AL_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subq_8_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
}


static void m68k_op_subq_8_ai(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_AI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subq_8_pi(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subq_8_pi7(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_A7_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subq_8_pd(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subq_8_pd7(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subq_8_di(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_DI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subq_8_ix(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_IX_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subq_8_aw(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AW_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subq_8_al(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AL_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_8(res);
	FLAG_Z = MASK_OUT_ABOVE_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	m68ki_write_8(module, ea, FLAG_Z);
}


static void m68k_op_subq_16_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
}


static void m68k_op_subq_16_a(struct m68k_module *module)
{
	uint* r_dst = &AY;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1));
}


static void m68k_op_subq_16_ai(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_AI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subq_16_pi(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subq_16_pd(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PD_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subq_16_di(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_DI_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subq_16_ix(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_IX_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subq_16_aw(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AW_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subq_16_al(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AL_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_16(res);
	FLAG_Z = MASK_OUT_ABOVE_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	m68ki_write_16(module, ea, FLAG_Z);
}


static void m68k_op_subq_32_d(struct m68k_module *module)
{
	uint* r_dst = &DY;
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint dst = *r_dst;
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	*r_dst = FLAG_Z;
}


static void m68k_op_subq_32_a(struct m68k_module *module)
{
	uint* r_dst = &AY;

	*r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1));
}


static void m68k_op_subq_32_ai(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_AI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subq_32_pi(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subq_32_pd(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_PD_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subq_32_di(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_DI_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subq_32_ix(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AY_IX_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subq_32_aw(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AW_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subq_32_al(struct m68k_module *module)
{
	uint src = (((REG_IR >> 9) - 1) & 7) + 1;
	uint ea = EA_AL_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = MASK_OUT_ABOVE_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	m68ki_write_32(module, ea, FLAG_Z);
}


static void m68k_op_subx_8_rr(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_8(DY);
	uint dst = MASK_OUT_ABOVE_8(*r_dst);
	uint res = dst - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	*r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
}


static void m68k_op_subx_16_rr(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = MASK_OUT_ABOVE_16(DY);
	uint dst = MASK_OUT_ABOVE_16(*r_dst);
	uint res = dst - src - XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	*r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
}


static void m68k_op_subx_32_rr(struct m68k_module *module)
{
	uint* r_dst = &DX;
	uint src = DY;
	uint dst = *r_dst;
	uint res = dst - src - XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	*r_dst = res;
}


static void m68k_op_subx_8_mm_ax7(struct m68k_module *module)
{
	uint src = OPER_AY_PD_8(module);
	uint ea  = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_subx_8_mm_ay7(struct m68k_module *module)
{
	uint src = OPER_A7_PD_8(module);
	uint ea  = EA_AX_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_subx_8_mm_axy7(struct m68k_module *module)
{
	uint src = OPER_A7_PD_8(module);
	uint ea  = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_subx_8_mm(struct m68k_module *module)
{
	uint src = OPER_AY_PD_8(module);
	uint ea  = EA_AX_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint res = dst - src - XFLAG_AS_1();

	FLAG_N = NFLAG_8(res);
	FLAG_X = FLAG_C = CFLAG_8(res);
	FLAG_V = VFLAG_SUB_8(src, dst, res);

	res = MASK_OUT_ABOVE_8(res);
	FLAG_Z |= res;

	m68ki_write_8(module, ea, res);
}


static void m68k_op_subx_16_mm(struct m68k_module *module)
{
	uint src = OPER_AY_PD_16(module);
	uint ea  = EA_AX_PD_16(module);
	uint dst = m68ki_read_16(module, ea);
	uint res = dst - src - XFLAG_AS_1();

	FLAG_N = NFLAG_16(res);
	FLAG_X = FLAG_C = CFLAG_16(res);
	FLAG_V = VFLAG_SUB_16(src, dst, res);

	res = MASK_OUT_ABOVE_16(res);
	FLAG_Z |= res;

	m68ki_write_16(module, ea, res);
}


static void m68k_op_subx_32_mm(struct m68k_module *module)
{
	uint src = OPER_AY_PD_32(module);
	uint ea  = EA_AX_PD_32(module);
	uint dst = m68ki_read_32(module, ea);
	uint res = dst - src - XFLAG_AS_1();

	FLAG_N = NFLAG_32(res);
	FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
	FLAG_V = VFLAG_SUB_32(src, dst, res);

	res = MASK_OUT_ABOVE_32(res);
	FLAG_Z |= res;

	m68ki_write_32(module, ea, res);
}


static void m68k_op_swap_32(struct m68k_module *module)
{
	uint* r_dst = &DY;

	FLAG_Z = MASK_OUT_ABOVE_32(*r_dst<<16);
	*r_dst = (*r_dst>>16) | FLAG_Z;

	FLAG_Z = *r_dst;
	FLAG_N = NFLAG_32(*r_dst);
	FLAG_C = CFLAG_CLEAR;
	FLAG_V = VFLAG_CLEAR;
}


static void m68k_op_tas_8_d(struct m68k_module *module)
{
	uint* r_dst = &DY;

	FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
	FLAG_N = NFLAG_8(*r_dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
	*r_dst |= 0x80;
}


static void m68k_op_tas_8_ai(struct m68k_module *module)
{
	uint ea = EA_AY_AI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint allow_writeback;

	FLAG_Z = dst;
	FLAG_N = NFLAG_8(dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;

	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
       disabled in order to function properly.  Some Amiga software may also rely
       on this, but only when accessing specific addresses so additional functionality
       will be needed. */
	allow_writeback = m68ki_tas_callback();

	if (allow_writeback==1) m68ki_write_8(module, ea, dst | 0x80);
}


static void m68k_op_tas_8_pi(struct m68k_module *module)
{
	uint ea = EA_AY_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint allow_writeback;

	FLAG_Z = dst;
	FLAG_N = NFLAG_8(dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;

	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
       disabled in order to function properly.  Some Amiga software may also rely
       on this, but only when accessing specific addresses so additional functionality
       will be needed. */
	allow_writeback = m68ki_tas_callback();

	if (allow_writeback==1) m68ki_write_8(module, ea, dst | 0x80);
}


static void m68k_op_tas_8_pi7(struct m68k_module *module)
{
	uint ea = EA_A7_PI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint allow_writeback;

	FLAG_Z = dst;
	FLAG_N = NFLAG_8(dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;

	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
       disabled in order to function properly.  Some Amiga software may also rely
       on this, but only when accessing specific addresses so additional functionality
       will be needed. */
	allow_writeback = m68ki_tas_callback();

	if (allow_writeback==1) m68ki_write_8(module, ea, dst | 0x80);
}


static void m68k_op_tas_8_pd(struct m68k_module *module)
{
	uint ea = EA_AY_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint allow_writeback;

	FLAG_Z = dst;
	FLAG_N = NFLAG_8(dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;

	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
       disabled in order to function properly.  Some Amiga software may also rely
       on this, but only when accessing specific addresses so additional functionality
       will be needed. */
	allow_writeback = m68ki_tas_callback();

	if (allow_writeback==1) m68ki_write_8(module, ea, dst | 0x80);
}


static void m68k_op_tas_8_pd7(struct m68k_module *module)
{
	uint ea = EA_A7_PD_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint allow_writeback;

	FLAG_Z = dst;
	FLAG_N = NFLAG_8(dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;

	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
       disabled in order to function properly.  Some Amiga software may also rely
       on this, but only when accessing specific addresses so additional functionality
       will be needed. */
	allow_writeback = m68ki_tas_callback();

	if (allow_writeback==1) m68ki_write_8(module, ea, dst | 0x80);
}


static void m68k_op_tas_8_di(struct m68k_module *module)
{
	uint ea = EA_AY_DI_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint allow_writeback;

	FLAG_Z = dst;
	FLAG_N = NFLAG_8(dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;

	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
       disabled in order to function properly.  Some Amiga software may also rely
       on this, but only when accessing specific addresses so additional functionality
       will be needed. */
	allow_writeback = m68ki_tas_callback();

	if (allow_writeback==1) m68ki_write_8(module, ea, dst | 0x80);
}


static void m68k_op_tas_8_ix(struct m68k_module *module)
{
	uint ea = EA_AY_IX_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint allow_writeback;

	FLAG_Z = dst;
	FLAG_N = NFLAG_8(dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;

	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
       disabled in order to function properly.  Some Amiga software may also rely
       on this, but only when accessing specific addresses so additional functionality
       will be needed. */
	allow_writeback = m68ki_tas_callback();

	if (allow_writeback==1) m68ki_write_8(module, ea, dst | 0x80);
}


static void m68k_op_tas_8_aw(struct m68k_module *module)
{
	uint ea = EA_AW_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint allow_writeback;

	FLAG_Z = dst;
	FLAG_N = NFLAG_8(dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;

	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
       disabled in order to function properly.  Some Amiga software may also rely
       on this, but only when accessing specific addresses so additional functionality
       will be needed. */
	allow_writeback = m68ki_tas_callback();

	if (allow_writeback==1) m68ki_write_8(module, ea, dst | 0x80);
}


static void m68k_op_tas_8_al(struct m68k_module *module)
{
	uint ea = EA_AL_8(module);
	uint dst = m68ki_read_8(module, ea);
	uint allow_writeback;

	FLAG_Z = dst;
	FLAG_N = NFLAG_8(dst);
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;

	/* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
       disabled in order to function properly.  Some Amiga software may also rely
       on this, but only when accessing specific addresses so additional functionality
       will be needed. */
	allow_writeback = m68ki_tas_callback();

	if (allow_writeback==1) m68ki_write_8(module, ea, dst | 0x80);
}


static void m68k_op_trap(struct m68k_module *module)
{
	/* Trap#n stacks exception frame type 0 */
	m68ki_exception_trapN(module, EXCEPTION_TRAP_BASE + (REG_IR & 0xf));	/* HJB 990403 */
}


static void m68k_op_trapv(struct m68k_module *module)
{
	if(COND_VC())
	{
		return;
	}
	m68ki_exception_trap(module, EXCEPTION_TRAPV);  /* HJB 990403 */
}


static void m68k_op_tst_8_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_8(DY);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_8_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_8(module);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_8_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_8(module);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_8_pi7(struct m68k_module *module)
{
	uint res = OPER_A7_PI_8(module);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_8_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_8(module);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_8_pd7(struct m68k_module *module)
{
	uint res = OPER_A7_PD_8(module);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_8_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_8(module);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_8_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_8(module);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_8_aw(struct m68k_module *module)
{
	uint res = OPER_AW_8(module);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_8_al(struct m68k_module *module)
{
	uint res = OPER_AL_8(module);

	FLAG_N = NFLAG_8(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_16_d(struct m68k_module *module)
{
	uint res = MASK_OUT_ABOVE_16(DY);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_16_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_16(module);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_16_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_16(module);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_16_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_16(module);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_16_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_16(module);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_16_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_16(module);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_16_aw(struct m68k_module *module)
{
	uint res = OPER_AW_16(module);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_16_al(struct m68k_module *module)
{
	uint res = OPER_AL_16(module);

	FLAG_N = NFLAG_16(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_32_d(struct m68k_module *module)
{
	uint res = DY;

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_32_ai(struct m68k_module *module)
{
	uint res = OPER_AY_AI_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_32_pi(struct m68k_module *module)
{
	uint res = OPER_AY_PI_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_32_pd(struct m68k_module *module)
{
	uint res = OPER_AY_PD_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_32_di(struct m68k_module *module)
{
	uint res = OPER_AY_DI_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_32_ix(struct m68k_module *module)
{
	uint res = OPER_AY_IX_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_32_aw(struct m68k_module *module)
{
	uint res = OPER_AW_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_tst_32_al(struct m68k_module *module)
{
	uint res = OPER_AL_32(module);

	FLAG_N = NFLAG_32(res);
	FLAG_Z = res;
	FLAG_V = VFLAG_CLEAR;
	FLAG_C = CFLAG_CLEAR;
}


static void m68k_op_unlk_32_a7(struct m68k_module *module)
{
	REG_A[7] = m68ki_read_32(module, REG_A[7]);
}


static void m68k_op_unlk_32(struct m68k_module *module)
{
	uint* r_dst = &AY;

	REG_A[7] = *r_dst;
	*r_dst = m68ki_pull_32(module);
}


/* ======================================================================== */
/* ============================== END OF FILE ============================= */
/* ======================================================================== */


/* ======================================================================== */
/* ========================= OPCODE TABLE BUILDER ========================= */
/* ======================================================================== */

#include <stdio.h>
#include "m68k/m68kops.h"

/* This is used to generate the opcode handler jump table */
typedef struct
{
	void (*opcode_handler)(struct m68k_module *module);        /* handler function */
	unsigned int  mask;                  /* mask on opcode */
	unsigned int  match;                 /* what to match after masking */
	unsigned char cycles[NUM_CPU_TYPES]; /* cycles each cpu type takes */
} opcode_handler_struct;


/* Opcode handler table */
static const opcode_handler_struct m68k_opcode_handler_table[] =
{
/*   function                      mask    match    000  010  020  040 */


	{m68k_op_1010                , 0xf000, 0xa000, {  4,   4,   4,   4,   4}},
	{m68k_op_1111                , 0xf000, 0xf000, {  4,   4,   4,   4,   4}},
	{m68k_op_moveq_32            , 0xf100, 0x7000, {  4,   4,   2,   2,   2}},
	{m68k_op_bra_8               , 0xff00, 0x6000, { 10,  10,  10,  10,  10}},
	{m68k_op_bsr_8               , 0xff00, 0x6100, { 18,  18,   7,   7,   7}},
	{m68k_op_bhi_8               , 0xff00, 0x6200, { 10,  10,   6,   6,   6}},
	{m68k_op_bls_8               , 0xff00, 0x6300, { 10,  10,   6,   6,   6}},
	{m68k_op_bcc_8               , 0xff00, 0x6400, { 10,  10,   6,   6,   6}},
	{m68k_op_bcs_8               , 0xff00, 0x6500, { 10,  10,   6,   6,   6}},
	{m68k_op_bne_8               , 0xff00, 0x6600, { 10,  10,   6,   6,   6}},
	{m68k_op_beq_8               , 0xff00, 0x6700, { 10,  10,   6,   6,   6}},
	{m68k_op_bvc_8               , 0xff00, 0x6800, { 10,  10,   6,   6,   6}},
	{m68k_op_bvs_8               , 0xff00, 0x6900, { 10,  10,   6,   6,   6}},
	{m68k_op_bpl_8               , 0xff00, 0x6a00, { 10,  10,   6,   6,   6}},
	{m68k_op_bmi_8               , 0xff00, 0x6b00, { 10,  10,   6,   6,   6}},
	{m68k_op_bge_8               , 0xff00, 0x6c00, { 10,  10,   6,   6,   6}},
	{m68k_op_blt_8               , 0xff00, 0x6d00, { 10,  10,   6,   6,   6}},
	{m68k_op_bgt_8               , 0xff00, 0x6e00, { 10,  10,   6,   6,   6}},
	{m68k_op_ble_8               , 0xff00, 0x6f00, { 10,  10,   6,   6,   6}},
	{m68k_op_btst_32_r_d         , 0xf1f8, 0x0100, {  6,   6,   4,   4,   4}},
	{m68k_op_movep_16_er         , 0xf1f8, 0x0108, { 16,  16,  12,  12,  12}},
	{m68k_op_btst_8_r_ai         , 0xf1f8, 0x0110, {  8,   8,   8,   8,   8}},
	{m68k_op_btst_8_r_pi         , 0xf1f8, 0x0118, {  8,   8,   8,   8,   8}},
	{m68k_op_btst_8_r_pd         , 0xf1f8, 0x0120, { 10,  10,   9,   9,   9}},
	{m68k_op_btst_8_r_di         , 0xf1f8, 0x0128, { 12,  12,   9,   9,   9}},
	{m68k_op_btst_8_r_ix         , 0xf1f8, 0x0130, { 14,  14,  11,  11,  11}},
	{m68k_op_bchg_32_r_d         , 0xf1f8, 0x0140, {  8,   8,   4,   4,   4}},
	{m68k_op_movep_32_er         , 0xf1f8, 0x0148, { 24,  24,  18,  18,  18}},
	{m68k_op_bchg_8_r_ai         , 0xf1f8, 0x0150, { 12,  12,   8,   8,   8}},
	{m68k_op_bchg_8_r_pi         , 0xf1f8, 0x0158, { 12,  12,   8,   8,   8}},
	{m68k_op_bchg_8_r_pd         , 0xf1f8, 0x0160, { 14,  14,   9,   9,   9}},
	{m68k_op_bchg_8_r_di         , 0xf1f8, 0x0168, { 16,  16,   9,   9,   9}},
	{m68k_op_bchg_8_r_ix         , 0xf1f8, 0x0170, { 18,  18,  11,  11,  11}},
	{m68k_op_bclr_32_r_d         , 0xf1f8, 0x0180, { 10,  10,   4,   4,   4}},
	{m68k_op_movep_16_re         , 0xf1f8, 0x0188, { 16,  16,  11,  11,  11}},
	{m68k_op_bclr_8_r_ai         , 0xf1f8, 0x0190, { 12,  14,   8,   8,   8}},
	{m68k_op_bclr_8_r_pi         , 0xf1f8, 0x0198, { 12,  14,   8,   8,   8}},
	{m68k_op_bclr_8_r_pd         , 0xf1f8, 0x01a0, { 14,  16,   9,   9,   9}},
	{m68k_op_bclr_8_r_di         , 0xf1f8, 0x01a8, { 16,  18,   9,   9,   9}},
	{m68k_op_bclr_8_r_ix         , 0xf1f8, 0x01b0, { 18,  20,  11,  11,  11}},
	{m68k_op_bset_32_r_d         , 0xf1f8, 0x01c0, {  8,   8,   4,   4,   4}},
	{m68k_op_movep_32_re         , 0xf1f8, 0x01c8, { 24,  24,  17,  17,  17}},
	{m68k_op_bset_8_r_ai         , 0xf1f8, 0x01d0, { 12,  12,   8,   8,   8}},
	{m68k_op_bset_8_r_pi         , 0xf1f8, 0x01d8, { 12,  12,   8,   8,   8}},
	{m68k_op_bset_8_r_pd         , 0xf1f8, 0x01e0, { 14,  14,   9,   9,   9}},
	{m68k_op_bset_8_r_di         , 0xf1f8, 0x01e8, { 16,  16,   9,   9,   9}},
	{m68k_op_bset_8_r_ix         , 0xf1f8, 0x01f0, { 18,  18,  11,  11,  11}},
	{m68k_op_move_8_d_d          , 0xf1f8, 0x1000, {  4,   4,   2,   2,   2}},
	{m68k_op_move_8_d_ai         , 0xf1f8, 0x1010, {  8,   8,   6,   6,   6}},
	{m68k_op_move_8_d_pi         , 0xf1f8, 0x1018, {  8,   8,   6,   6,   6}},
	{m68k_op_move_8_d_pd         , 0xf1f8, 0x1020, { 10,  10,   7,   7,   7}},
	{m68k_op_move_8_d_di         , 0xf1f8, 0x1028, { 12,  12,   7,   7,   7}},
	{m68k_op_move_8_d_ix         , 0xf1f8, 0x1030, { 14,  14,   9,   9,   9}},
	{m68k_op_move_8_ai_d         , 0xf1f8, 0x1080, {  8,   8,   4,   4,   4}},
	{m68k_op_move_8_ai_ai        , 0xf1f8, 0x1090, { 12,  12,   8,   8,   8}},
	{m68k_op_move_8_ai_pi        , 0xf1f8, 0x1098, { 12,  12,   8,   8,   8}},
	{m68k_op_move_8_ai_pd        , 0xf1f8, 0x10a0, { 14,  14,   9,   9,   9}},
	{m68k_op_move_8_ai_di        , 0xf1f8, 0x10a8, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_ai_ix        , 0xf1f8, 0x10b0, { 18,  18,  11,  11,  11}},
	{m68k_op_move_8_pi_d         , 0xf1f8, 0x10c0, {  8,   8,   4,   4,   4}},
	{m68k_op_move_8_pi_ai        , 0xf1f8, 0x10d0, { 12,  12,   8,   8,   8}},
	{m68k_op_move_8_pi_pi        , 0xf1f8, 0x10d8, { 12,  12,   8,   8,   8}},
	{m68k_op_move_8_pi_pd        , 0xf1f8, 0x10e0, { 14,  14,   9,   9,   9}},
	{m68k_op_move_8_pi_di        , 0xf1f8, 0x10e8, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_pi_ix        , 0xf1f8, 0x10f0, { 18,  18,  11,  11,  11}},
	{m68k_op_move_8_pd_d         , 0xf1f8, 0x1100, {  8,   8,   5,   5,   5}},
	{m68k_op_move_8_pd_ai        , 0xf1f8, 0x1110, { 12,  12,   9,   9,   9}},
	{m68k_op_move_8_pd_pi        , 0xf1f8, 0x1118, { 12,  12,   9,   9,   9}},
	{m68k_op_move_8_pd_pd        , 0xf1f8, 0x1120, { 14,  14,  10,  10,  10}},
	{m68k_op_move_8_pd_di        , 0xf1f8, 0x1128, { 16,  16,  10,  10,  10}},
	{m68k_op_move_8_pd_ix        , 0xf1f8, 0x1130, { 18,  18,  12,  12,  12}},
	{m68k_op_move_8_di_d         , 0xf1f8, 0x1140, { 12,  12,   5,   5,   5}},
	{m68k_op_move_8_di_ai        , 0xf1f8, 0x1150, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_di_pi        , 0xf1f8, 0x1158, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_di_pd        , 0xf1f8, 0x1160, { 18,  18,  10,  10,  10}},
	{m68k_op_move_8_di_di        , 0xf1f8, 0x1168, { 20,  20,  10,  10,  10}},
	{m68k_op_move_8_di_ix        , 0xf1f8, 0x1170, { 22,  22,  12,  12,  12}},
	{m68k_op_move_8_ix_d         , 0xf1f8, 0x1180, { 14,  14,   7,   7,   7}},
	{m68k_op_move_8_ix_ai        , 0xf1f8, 0x1190, { 18,  18,  11,  11,  11}},
	{m68k_op_move_8_ix_pi        , 0xf1f8, 0x1198, { 18,  18,  11,  11,  11}},
	{m68k_op_move_8_ix_pd        , 0xf1f8, 0x11a0, { 20,  20,  12,  12,  12}},
	{m68k_op_move_8_ix_di        , 0xf1f8, 0x11a8, { 22,  22,  12,  12,  12}},
	{m68k_op_move_8_ix_ix        , 0xf1f8, 0x11b0, { 24,  24,  14,  14,  14}},
	{m68k_op_move_32_d_d         , 0xf1f8, 0x2000, {  4,   4,   2,   2,   2}},
	{m68k_op_move_32_d_a         , 0xf1f8, 0x2008, {  4,   4,   2,   2,   2}},
	{m68k_op_move_32_d_ai        , 0xf1f8, 0x2010, { 12,  12,   6,   6,   6}},
	{m68k_op_move_32_d_pi        , 0xf1f8, 0x2018, { 12,  12,   6,   6,   6}},
	{m68k_op_move_32_d_pd        , 0xf1f8, 0x2020, { 14,  14,   7,   7,   7}},
	{m68k_op_move_32_d_di        , 0xf1f8, 0x2028, { 16,  16,   7,   7,   7}},
	{m68k_op_move_32_d_ix        , 0xf1f8, 0x2030, { 18,  18,   9,   9,   9}},
	{m68k_op_movea_32_d          , 0xf1f8, 0x2040, {  4,   4,   2,   2,   2}},
	{m68k_op_movea_32_a          , 0xf1f8, 0x2048, {  4,   4,   2,   2,   2}},
	{m68k_op_movea_32_ai         , 0xf1f8, 0x2050, { 12,  12,   6,   6,   6}},
	{m68k_op_movea_32_pi         , 0xf1f8, 0x2058, { 12,  12,   6,   6,   6}},
	{m68k_op_movea_32_pd         , 0xf1f8, 0x2060, { 14,  14,   7,   7,   7}},
	{m68k_op_movea_32_di         , 0xf1f8, 0x2068, { 16,  16,   7,   7,   7}},
	{m68k_op_movea_32_ix         , 0xf1f8, 0x2070, { 18,  18,   9,   9,   9}},
	{m68k_op_move_32_ai_d        , 0xf1f8, 0x2080, { 12,  12,   4,   4,   4}},
	{m68k_op_move_32_ai_a        , 0xf1f8, 0x2088, { 12,  12,   4,   4,   4}},
	{m68k_op_move_32_ai_ai       , 0xf1f8, 0x2090, { 20,  20,   8,   8,   8}},
	{m68k_op_move_32_ai_pi       , 0xf1f8, 0x2098, { 20,  20,   8,   8,   8}},
	{m68k_op_move_32_ai_pd       , 0xf1f8, 0x20a0, { 22,  22,   9,   9,   9}},
	{m68k_op_move_32_ai_di       , 0xf1f8, 0x20a8, { 24,  24,   9,   9,   9}},
	{m68k_op_move_32_ai_ix       , 0xf1f8, 0x20b0, { 26,  26,  11,  11,  11}},
	{m68k_op_move_32_pi_d        , 0xf1f8, 0x20c0, { 12,  12,   4,   4,   4}},
	{m68k_op_move_32_pi_a        , 0xf1f8, 0x20c8, { 12,  12,   4,   4,   4}},
	{m68k_op_move_32_pi_ai       , 0xf1f8, 0x20d0, { 20,  20,   8,   8,   8}},
	{m68k_op_move_32_pi_pi       , 0xf1f8, 0x20d8, { 20,  20,   8,   8,   8}},
	{m68k_op_move_32_pi_pd       , 0xf1f8, 0x20e0, { 22,  22,   9,   9,   9}},
	{m68k_op_move_32_pi_di       , 0xf1f8, 0x20e8, { 24,  24,   9,   9,   9}},
	{m68k_op_move_32_pi_ix       , 0xf1f8, 0x20f0, { 26,  26,  11,  11,  11}},
	{m68k_op_move_32_pd_d        , 0xf1f8, 0x2100, { 12,  14,   5,   5,   5}},
	{m68k_op_move_32_pd_a        , 0xf1f8, 0x2108, { 12,  14,   5,   5,   5}},
	{m68k_op_move_32_pd_ai       , 0xf1f8, 0x2110, { 20,  22,   9,   9,   9}},
	{m68k_op_move_32_pd_pi       , 0xf1f8, 0x2118, { 20,  22,   9,   9,   9}},
	{m68k_op_move_32_pd_pd       , 0xf1f8, 0x2120, { 22,  24,  10,  10,  10}},
	{m68k_op_move_32_pd_di       , 0xf1f8, 0x2128, { 24,  26,  10,  10,  10}},
	{m68k_op_move_32_pd_ix       , 0xf1f8, 0x2130, { 26,  28,  12,  12,  12}},
	{m68k_op_move_32_di_d        , 0xf1f8, 0x2140, { 16,  16,   5,   5,   5}},
	{m68k_op_move_32_di_a        , 0xf1f8, 0x2148, { 16,  16,   5,   5,   5}},
	{m68k_op_move_32_di_ai       , 0xf1f8, 0x2150, { 24,  24,   9,   9,   9}},
	{m68k_op_move_32_di_pi       , 0xf1f8, 0x2158, { 24,  24,   9,   9,   9}},
	{m68k_op_move_32_di_pd       , 0xf1f8, 0x2160, { 26,  26,  10,  10,  10}},
	{m68k_op_move_32_di_di       , 0xf1f8, 0x2168, { 28,  28,  10,  10,  10}},
	{m68k_op_move_32_di_ix       , 0xf1f8, 0x2170, { 30,  30,  12,  12,  12}},
	{m68k_op_move_32_ix_d        , 0xf1f8, 0x2180, { 18,  18,   7,   7,   7}},
	{m68k_op_move_32_ix_a        , 0xf1f8, 0x2188, { 18,  18,   7,   7,   7}},
	{m68k_op_move_32_ix_ai       , 0xf1f8, 0x2190, { 26,  26,  11,  11,  11}},
	{m68k_op_move_32_ix_pi       , 0xf1f8, 0x2198, { 26,  26,  11,  11,  11}},
	{m68k_op_move_32_ix_pd       , 0xf1f8, 0x21a0, { 28,  28,  12,  12,  12}},
	{m68k_op_move_32_ix_di       , 0xf1f8, 0x21a8, { 30,  30,  12,  12,  12}},
	{m68k_op_move_32_ix_ix       , 0xf1f8, 0x21b0, { 32,  32,  14,  14,  14}},
	{m68k_op_move_16_d_d         , 0xf1f8, 0x3000, {  4,   4,   2,   2,   2}},
	{m68k_op_move_16_d_a         , 0xf1f8, 0x3008, {  4,   4,   2,   2,   2}},
	{m68k_op_move_16_d_ai        , 0xf1f8, 0x3010, {  8,   8,   6,   6,   6}},
	{m68k_op_move_16_d_pi        , 0xf1f8, 0x3018, {  8,   8,   6,   6,   6}},
	{m68k_op_move_16_d_pd        , 0xf1f8, 0x3020, { 10,  10,   7,   7,   7}},
	{m68k_op_move_16_d_di        , 0xf1f8, 0x3028, { 12,  12,   7,   7,   7}},
	{m68k_op_move_16_d_ix        , 0xf1f8, 0x3030, { 14,  14,   9,   9,   9}},
	{m68k_op_movea_16_d          , 0xf1f8, 0x3040, {  4,   4,   2,   2,   2}},
	{m68k_op_movea_16_a          , 0xf1f8, 0x3048, {  4,   4,   2,   2,   2}},
	{m68k_op_movea_16_ai         , 0xf1f8, 0x3050, {  8,   8,   6,   6,   6}},
	{m68k_op_movea_16_pi         , 0xf1f8, 0x3058, {  8,   8,   6,   6,   6}},
	{m68k_op_movea_16_pd         , 0xf1f8, 0x3060, { 10,  10,   7,   7,   7}},
	{m68k_op_movea_16_di         , 0xf1f8, 0x3068, { 12,  12,   7,   7,   7}},
	{m68k_op_movea_16_ix         , 0xf1f8, 0x3070, { 14,  14,   9,   9,   9}},
	{m68k_op_move_16_ai_d        , 0xf1f8, 0x3080, {  8,   8,   4,   4,   4}},
	{m68k_op_move_16_ai_a        , 0xf1f8, 0x3088, {  8,   8,   4,   4,   4}},
	{m68k_op_move_16_ai_ai       , 0xf1f8, 0x3090, { 12,  12,   8,   8,   8}},
	{m68k_op_move_16_ai_pi       , 0xf1f8, 0x3098, { 12,  12,   8,   8,   8}},
	{m68k_op_move_16_ai_pd       , 0xf1f8, 0x30a0, { 14,  14,   9,   9,   9}},
	{m68k_op_move_16_ai_di       , 0xf1f8, 0x30a8, { 16,  16,   9,   9,   9}},
	{m68k_op_move_16_ai_ix       , 0xf1f8, 0x30b0, { 18,  18,  11,  11,  11}},
	{m68k_op_move_16_pi_d        , 0xf1f8, 0x30c0, {  8,   8,   4,   4,   4}},
	{m68k_op_move_16_pi_a        , 0xf1f8, 0x30c8, {  8,   8,   4,   4,   4}},
	{m68k_op_move_16_pi_ai       , 0xf1f8, 0x30d0, { 12,  12,   8,   8,   8}},
	{m68k_op_move_16_pi_pi       , 0xf1f8, 0x30d8, { 12,  12,   8,   8,   8}},
	{m68k_op_move_16_pi_pd       , 0xf1f8, 0x30e0, { 14,  14,   9,   9,   9}},
	{m68k_op_move_16_pi_di       , 0xf1f8, 0x30e8, { 16,  16,   9,   9,   9}},
	{m68k_op_move_16_pi_ix       , 0xf1f8, 0x30f0, { 18,  18,  11,  11,  11}},
	{m68k_op_move_16_pd_d        , 0xf1f8, 0x3100, {  8,   8,   5,   5,   5}},
	{m68k_op_move_16_pd_a        , 0xf1f8, 0x3108, {  8,   8,   5,   5,   5}},
	{m68k_op_move_16_pd_ai       , 0xf1f8, 0x3110, { 12,  12,   9,   9,   9}},
	{m68k_op_move_16_pd_pi       , 0xf1f8, 0x3118, { 12,  12,   9,   9,   9}},
	{m68k_op_move_16_pd_pd       , 0xf1f8, 0x3120, { 14,  14,  10,  10,  10}},
	{m68k_op_move_16_pd_di       , 0xf1f8, 0x3128, { 16,  16,  10,  10,  10}},
	{m68k_op_move_16_pd_ix       , 0xf1f8, 0x3130, { 18,  18,  12,  12,  12}},
	{m68k_op_move_16_di_d        , 0xf1f8, 0x3140, { 12,  12,   5,   5,   5}},
	{m68k_op_move_16_di_a        , 0xf1f8, 0x3148, { 12,  12,   5,   5,   5}},
	{m68k_op_move_16_di_ai       , 0xf1f8, 0x3150, { 16,  16,   9,   9,   9}},
	{m68k_op_move_16_di_pi       , 0xf1f8, 0x3158, { 16,  16,   9,   9,   9}},
	{m68k_op_move_16_di_pd       , 0xf1f8, 0x3160, { 18,  18,  10,  10,  10}},
	{m68k_op_move_16_di_di       , 0xf1f8, 0x3168, { 20,  20,  10,  10,  10}},
	{m68k_op_move_16_di_ix       , 0xf1f8, 0x3170, { 22,  22,  12,  12,  12}},
	{m68k_op_move_16_ix_d        , 0xf1f8, 0x3180, { 14,  14,   7,   7,   7}},
	{m68k_op_move_16_ix_a        , 0xf1f8, 0x3188, { 14,  14,   7,   7,   7}},
	{m68k_op_move_16_ix_ai       , 0xf1f8, 0x3190, { 18,  18,  11,  11,  11}},
	{m68k_op_move_16_ix_pi       , 0xf1f8, 0x3198, { 18,  18,  11,  11,  11}},
	{m68k_op_move_16_ix_pd       , 0xf1f8, 0x31a0, { 20,  20,  12,  12,  12}},
	{m68k_op_move_16_ix_di       , 0xf1f8, 0x31a8, { 22,  22,  12,  12,  12}},
	{m68k_op_move_16_ix_ix       , 0xf1f8, 0x31b0, { 24,  24,  14,  14,  14}},
	{m68k_op_chk_16_d            , 0xf1f8, 0x4180, { 10,   8,   8,   8,   8}},
	{m68k_op_chk_16_ai           , 0xf1f8, 0x4190, { 14,  12,  12,  12,  12}},
	{m68k_op_chk_16_pi           , 0xf1f8, 0x4198, { 14,  12,  12,  12,  12}},
	{m68k_op_chk_16_pd           , 0xf1f8, 0x41a0, { 16,  14,  13,  13,  13}},
	{m68k_op_chk_16_di           , 0xf1f8, 0x41a8, { 18,  16,  13,  13,  13}},
	{m68k_op_chk_16_ix           , 0xf1f8, 0x41b0, { 20,  18,  15,  15,  15}},
	{m68k_op_lea_32_ai           , 0xf1f8, 0x41d0, {  4,   4,   6,   6,   6}},
	{m68k_op_lea_32_di           , 0xf1f8, 0x41e8, {  8,   8,   7,   7,   7}},
	{m68k_op_lea_32_ix           , 0xf1f8, 0x41f0, { 12,  12,   9,   9,   9}},
	{m68k_op_addq_8_d            , 0xf1f8, 0x5000, {  4,   4,   2,   2,   2}},
	{m68k_op_addq_8_ai           , 0xf1f8, 0x5010, { 12,  12,   8,   8,   8}},
	{m68k_op_addq_8_pi           , 0xf1f8, 0x5018, { 12,  12,   8,   8,   8}},
	{m68k_op_addq_8_pd           , 0xf1f8, 0x5020, { 14,  14,   9,   9,   9}},
	{m68k_op_addq_8_di           , 0xf1f8, 0x5028, { 16,  16,   9,   9,   9}},
	{m68k_op_addq_8_ix           , 0xf1f8, 0x5030, { 18,  18,  11,  11,  11}},
	{m68k_op_addq_16_d           , 0xf1f8, 0x5040, {  4,   4,   2,   2,   2}},
	{m68k_op_addq_16_a           , 0xf1f8, 0x5048, {  4,   4,   2,   2,   2}},
	{m68k_op_addq_16_ai          , 0xf1f8, 0x5050, { 12,  12,   8,   8,   8}},
	{m68k_op_addq_16_pi          , 0xf1f8, 0x5058, { 12,  12,   8,   8,   8}},
	{m68k_op_addq_16_pd          , 0xf1f8, 0x5060, { 14,  14,   9,   9,   9}},
	{m68k_op_addq_16_di          , 0xf1f8, 0x5068, { 16,  16,   9,   9,   9}},
	{m68k_op_addq_16_ix          , 0xf1f8, 0x5070, { 18,  18,  11,  11,  11}},
	{m68k_op_addq_32_d           , 0xf1f8, 0x5080, {  8,   8,   2,   2,   2}},
	{m68k_op_addq_32_a           , 0xf1f8, 0x5088, {  8,   8,   2,   2,   2}},
	{m68k_op_addq_32_ai          , 0xf1f8, 0x5090, { 20,  20,   8,   8,   8}},
	{m68k_op_addq_32_pi          , 0xf1f8, 0x5098, { 20,  20,   8,   8,   8}},
	{m68k_op_addq_32_pd          , 0xf1f8, 0x50a0, { 22,  22,   9,   9,   9}},
	{m68k_op_addq_32_di          , 0xf1f8, 0x50a8, { 24,  24,   9,   9,   9}},
	{m68k_op_addq_32_ix          , 0xf1f8, 0x50b0, { 26,  26,  11,  11,  11}},
	{m68k_op_subq_8_d            , 0xf1f8, 0x5100, {  4,   4,   2,   2,   2}},
	{m68k_op_subq_8_ai           , 0xf1f8, 0x5110, { 12,  12,   8,   8,   8}},
	{m68k_op_subq_8_pi           , 0xf1f8, 0x5118, { 12,  12,   8,   8,   8}},
	{m68k_op_subq_8_pd           , 0xf1f8, 0x5120, { 14,  14,   9,   9,   9}},
	{m68k_op_subq_8_di           , 0xf1f8, 0x5128, { 16,  16,   9,   9,   9}},
	{m68k_op_subq_8_ix           , 0xf1f8, 0x5130, { 18,  18,  11,  11,  11}},
	{m68k_op_subq_16_d           , 0xf1f8, 0x5140, {  4,   4,   2,   2,   2}},
	{m68k_op_subq_16_a           , 0xf1f8, 0x5148, {  8,   4,   2,   2,   2}},
	{m68k_op_subq_16_ai          , 0xf1f8, 0x5150, { 12,  12,   8,   8,   8}},
	{m68k_op_subq_16_pi          , 0xf1f8, 0x5158, { 12,  12,   8,   8,   8}},
	{m68k_op_subq_16_pd          , 0xf1f8, 0x5160, { 14,  14,   9,   9,   9}},
	{m68k_op_subq_16_di          , 0xf1f8, 0x5168, { 16,  16,   9,   9,   9}},
	{m68k_op_subq_16_ix          , 0xf1f8, 0x5170, { 18,  18,  11,  11,  11}},
	{m68k_op_subq_32_d           , 0xf1f8, 0x5180, {  8,   8,   2,   2,   2}},
	{m68k_op_subq_32_a           , 0xf1f8, 0x5188, {  8,   8,   2,   2,   2}},
	{m68k_op_subq_32_ai          , 0xf1f8, 0x5190, { 20,  20,   8,   8,   8}},
	{m68k_op_subq_32_pi          , 0xf1f8, 0x5198, { 20,  20,   8,   8,   8}},
	{m68k_op_subq_32_pd          , 0xf1f8, 0x51a0, { 22,  22,   9,   9,   9}},
	{m68k_op_subq_32_di          , 0xf1f8, 0x51a8, { 24,  24,   9,   9,   9}},
	{m68k_op_subq_32_ix          , 0xf1f8, 0x51b0, { 26,  26,  11,  11,  11}},
	{m68k_op_or_8_er_d           , 0xf1f8, 0x8000, {  4,   4,   2,   2,   2}},
	{m68k_op_or_8_er_ai          , 0xf1f8, 0x8010, {  8,   8,   6,   6,   6}},
	{m68k_op_or_8_er_pi          , 0xf1f8, 0x8018, {  8,   8,   6,   6,   6}},
	{m68k_op_or_8_er_pd          , 0xf1f8, 0x8020, { 10,  10,   7,   7,   7}},
	{m68k_op_or_8_er_di          , 0xf1f8, 0x8028, { 12,  12,   7,   7,   7}},
	{m68k_op_or_8_er_ix          , 0xf1f8, 0x8030, { 14,  14,   9,   9,   9}},
	{m68k_op_or_16_er_d          , 0xf1f8, 0x8040, {  4,   4,   2,   2,   2}},
	{m68k_op_or_16_er_ai         , 0xf1f8, 0x8050, {  8,   8,   6,   6,   6}},
	{m68k_op_or_16_er_pi         , 0xf1f8, 0x8058, {  8,   8,   6,   6,   6}},
	{m68k_op_or_16_er_pd         , 0xf1f8, 0x8060, { 10,  10,   7,   7,   7}},
	{m68k_op_or_16_er_di         , 0xf1f8, 0x8068, { 12,  12,   7,   7,   7}},
	{m68k_op_or_16_er_ix         , 0xf1f8, 0x8070, { 14,  14,   9,   9,   9}},
	{m68k_op_or_32_er_d          , 0xf1f8, 0x8080, {  6,   6,   2,   2,   2}},
	{m68k_op_or_32_er_ai         , 0xf1f8, 0x8090, { 14,  14,   6,   6,   6}},
	{m68k_op_or_32_er_pi         , 0xf1f8, 0x8098, { 14,  14,   6,   6,   6}},
	{m68k_op_or_32_er_pd         , 0xf1f8, 0x80a0, { 16,  16,   7,   7,   7}},
	{m68k_op_or_32_er_di         , 0xf1f8, 0x80a8, { 18,  18,   7,   7,   7}},
	{m68k_op_or_32_er_ix         , 0xf1f8, 0x80b0, { 20,  20,   9,   9,   9}},
	{m68k_op_divu_16_d           , 0xf1f8, 0x80c0, {140, 108,  44,  44,  44}},
	{m68k_op_divu_16_ai          , 0xf1f8, 0x80d0, {144, 112,  48,  48,  48}},
	{m68k_op_divu_16_pi          , 0xf1f8, 0x80d8, {144, 112,  48,  48,  48}},
	{m68k_op_divu_16_pd          , 0xf1f8, 0x80e0, {146, 114,  49,  49,  49}},
	{m68k_op_divu_16_di          , 0xf1f8, 0x80e8, {148, 116,  49,  49,  49}},
	{m68k_op_divu_16_ix          , 0xf1f8, 0x80f0, {150, 118,  51,  51,  51}},
	{m68k_op_sbcd_8_rr           , 0xf1f8, 0x8100, {  6,   6,   4,   4,   4}},
	{m68k_op_sbcd_8_mm           , 0xf1f8, 0x8108, { 18,  18,  16,  16,  16}},
	{m68k_op_or_8_re_ai          , 0xf1f8, 0x8110, { 12,  12,   8,   8,   8}},
	{m68k_op_or_8_re_pi          , 0xf1f8, 0x8118, { 12,  12,   8,   8,   8}},
	{m68k_op_or_8_re_pd          , 0xf1f8, 0x8120, { 14,  14,   9,   9,   9}},
	{m68k_op_or_8_re_di          , 0xf1f8, 0x8128, { 16,  16,   9,   9,   9}},
	{m68k_op_or_8_re_ix          , 0xf1f8, 0x8130, { 18,  18,  11,  11,  11}},
	{m68k_op_or_16_re_ai         , 0xf1f8, 0x8150, { 12,  12,   8,   8,   8}},
	{m68k_op_or_16_re_pi         , 0xf1f8, 0x8158, { 12,  12,   8,   8,   8}},
	{m68k_op_or_16_re_pd         , 0xf1f8, 0x8160, { 14,  14,   9,   9,   9}},
	{m68k_op_or_16_re_di         , 0xf1f8, 0x8168, { 16,  16,   9,   9,   9}},
	{m68k_op_or_16_re_ix         , 0xf1f8, 0x8170, { 18,  18,  11,  11,  11}},
	{m68k_op_or_32_re_ai         , 0xf1f8, 0x8190, { 20,  20,   8,   8,   8}},
	{m68k_op_or_32_re_pi         , 0xf1f8, 0x8198, { 20,  20,   8,   8,   8}},
	{m68k_op_or_32_re_pd         , 0xf1f8, 0x81a0, { 22,  22,   9,   9,   9}},
	{m68k_op_or_32_re_di         , 0xf1f8, 0x81a8, { 24,  24,   9,   9,   9}},
	{m68k_op_or_32_re_ix         , 0xf1f8, 0x81b0, { 26,  26,  11,  11,  11}},
	{m68k_op_divs_16_d           , 0xf1f8, 0x81c0, {158, 122,  56,  56,  56}},
	{m68k_op_divs_16_ai          , 0xf1f8, 0x81d0, {162, 126,  60,  60,  60}},
	{m68k_op_divs_16_pi          , 0xf1f8, 0x81d8, {162, 126,  60,  60,  60}},
	{m68k_op_divs_16_pd          , 0xf1f8, 0x81e0, {164, 128,  61,  61,  61}},
	{m68k_op_divs_16_di          , 0xf1f8, 0x81e8, {166, 130,  61,  61,  61}},
	{m68k_op_divs_16_ix          , 0xf1f8, 0x81f0, {168, 132,  63,  63,  63}},
	{m68k_op_sub_8_er_d          , 0xf1f8, 0x9000, {  4,   4,   2,   2,   2}},
	{m68k_op_sub_8_er_ai         , 0xf1f8, 0x9010, {  8,   8,   6,   6,   6}},
	{m68k_op_sub_8_er_pi         , 0xf1f8, 0x9018, {  8,   8,   6,   6,   6}},
	{m68k_op_sub_8_er_pd         , 0xf1f8, 0x9020, { 10,  10,   7,   7,   7}},
	{m68k_op_sub_8_er_di         , 0xf1f8, 0x9028, { 12,  12,   7,   7,   7}},
	{m68k_op_sub_8_er_ix         , 0xf1f8, 0x9030, { 14,  14,   9,   9,   9}},
	{m68k_op_sub_16_er_d         , 0xf1f8, 0x9040, {  4,   4,   2,   2,   2}},
	{m68k_op_sub_16_er_a         , 0xf1f8, 0x9048, {  4,   4,   2,   2,   2}},
	{m68k_op_sub_16_er_ai        , 0xf1f8, 0x9050, {  8,   8,   6,   6,   6}},
	{m68k_op_sub_16_er_pi        , 0xf1f8, 0x9058, {  8,   8,   6,   6,   6}},
	{m68k_op_sub_16_er_pd        , 0xf1f8, 0x9060, { 10,  10,   7,   7,   7}},
	{m68k_op_sub_16_er_di        , 0xf1f8, 0x9068, { 12,  12,   7,   7,   7}},
	{m68k_op_sub_16_er_ix        , 0xf1f8, 0x9070, { 14,  14,   9,   9,   9}},
	{m68k_op_sub_32_er_d         , 0xf1f8, 0x9080, {  6,   6,   2,   2,   2}},
	{m68k_op_sub_32_er_a         , 0xf1f8, 0x9088, {  6,   6,   2,   2,   2}},
	{m68k_op_sub_32_er_ai        , 0xf1f8, 0x9090, { 14,  14,   6,   6,   6}},
	{m68k_op_sub_32_er_pi        , 0xf1f8, 0x9098, { 14,  14,   6,   6,   6}},
	{m68k_op_sub_32_er_pd        , 0xf1f8, 0x90a0, { 16,  16,   7,   7,   7}},
	{m68k_op_sub_32_er_di        , 0xf1f8, 0x90a8, { 18,  18,   7,   7,   7}},
	{m68k_op_sub_32_er_ix        , 0xf1f8, 0x90b0, { 20,  20,   9,   9,   9}},
	{m68k_op_suba_16_d           , 0xf1f8, 0x90c0, {  8,   8,   2,   2,   2}},
	{m68k_op_suba_16_a           , 0xf1f8, 0x90c8, {  8,   8,   2,   2,   2}},
	{m68k_op_suba_16_ai          , 0xf1f8, 0x90d0, { 12,  12,   6,   6,   6}},
	{m68k_op_suba_16_pi          , 0xf1f8, 0x90d8, { 12,  12,   6,   6,   6}},
	{m68k_op_suba_16_pd          , 0xf1f8, 0x90e0, { 14,  14,   7,   7,   7}},
	{m68k_op_suba_16_di          , 0xf1f8, 0x90e8, { 16,  16,   7,   7,   7}},
	{m68k_op_suba_16_ix          , 0xf1f8, 0x90f0, { 18,  18,   9,   9,   9}},
	{m68k_op_subx_8_rr           , 0xf1f8, 0x9100, {  4,   4,   2,   2,   2}},
	{m68k_op_subx_8_mm           , 0xf1f8, 0x9108, { 18,  18,  12,  12,  12}},
	{m68k_op_sub_8_re_ai         , 0xf1f8, 0x9110, { 12,  12,   8,   8,   8}},
	{m68k_op_sub_8_re_pi         , 0xf1f8, 0x9118, { 12,  12,   8,   8,   8}},
	{m68k_op_sub_8_re_pd         , 0xf1f8, 0x9120, { 14,  14,   9,   9,   9}},
	{m68k_op_sub_8_re_di         , 0xf1f8, 0x9128, { 16,  16,   9,   9,   9}},
	{m68k_op_sub_8_re_ix         , 0xf1f8, 0x9130, { 18,  18,  11,  11,  11}},
	{m68k_op_subx_16_rr          , 0xf1f8, 0x9140, {  4,   4,   2,   2,   2}},
	{m68k_op_subx_16_mm          , 0xf1f8, 0x9148, { 18,  18,  12,  12,  12}},
	{m68k_op_sub_16_re_ai        , 0xf1f8, 0x9150, { 12,  12,   8,   8,   8}},
	{m68k_op_sub_16_re_pi        , 0xf1f8, 0x9158, { 12,  12,   8,   8,   8}},
	{m68k_op_sub_16_re_pd        , 0xf1f8, 0x9160, { 14,  14,   9,   9,   9}},
	{m68k_op_sub_16_re_di        , 0xf1f8, 0x9168, { 16,  16,   9,   9,   9}},
	{m68k_op_sub_16_re_ix        , 0xf1f8, 0x9170, { 18,  18,  11,  11,  11}},
	{m68k_op_subx_32_rr          , 0xf1f8, 0x9180, {  8,   6,   2,   2,   2}},
	{m68k_op_subx_32_mm          , 0xf1f8, 0x9188, { 30,  30,  12,  12,  12}},
	{m68k_op_sub_32_re_ai        , 0xf1f8, 0x9190, { 20,  20,   8,   8,   8}},
	{m68k_op_sub_32_re_pi        , 0xf1f8, 0x9198, { 20,  20,   8,   8,   8}},
	{m68k_op_sub_32_re_pd        , 0xf1f8, 0x91a0, { 22,  22,   9,   9,   9}},
	{m68k_op_sub_32_re_di        , 0xf1f8, 0x91a8, { 24,  24,   9,   9,   9}},
	{m68k_op_sub_32_re_ix        , 0xf1f8, 0x91b0, { 26,  26,  11,  11,  11}},
	{m68k_op_suba_32_d           , 0xf1f8, 0x91c0, {  6,   6,   2,   2,   2}},
	{m68k_op_suba_32_a           , 0xf1f8, 0x91c8, {  6,   6,   2,   2,   2}},
	{m68k_op_suba_32_ai          , 0xf1f8, 0x91d0, { 14,  14,   6,   6,   6}},
	{m68k_op_suba_32_pi          , 0xf1f8, 0x91d8, { 14,  14,   6,   6,   6}},
	{m68k_op_suba_32_pd          , 0xf1f8, 0x91e0, { 16,  16,   7,   7,   7}},
	{m68k_op_suba_32_di          , 0xf1f8, 0x91e8, { 18,  18,   7,   7,   7}},
	{m68k_op_suba_32_ix          , 0xf1f8, 0x91f0, { 20,  20,   9,   9,   9}},
	{m68k_op_cmp_8_d             , 0xf1f8, 0xb000, {  4,   4,   2,   2,   2}},
	{m68k_op_cmp_8_ai            , 0xf1f8, 0xb010, {  8,   8,   6,   6,   6}},
	{m68k_op_cmp_8_pi            , 0xf1f8, 0xb018, {  8,   8,   6,   6,   6}},
	{m68k_op_cmp_8_pd            , 0xf1f8, 0xb020, { 10,  10,   7,   7,   7}},
	{m68k_op_cmp_8_di            , 0xf1f8, 0xb028, { 12,  12,   7,   7,   7}},
	{m68k_op_cmp_8_ix            , 0xf1f8, 0xb030, { 14,  14,   9,   9,   9}},
	{m68k_op_cmp_16_d            , 0xf1f8, 0xb040, {  4,   4,   2,   2,   2}},
	{m68k_op_cmp_16_a            , 0xf1f8, 0xb048, {  4,   4,   2,   2,   2}},
	{m68k_op_cmp_16_ai           , 0xf1f8, 0xb050, {  8,   8,   6,   6,   6}},
	{m68k_op_cmp_16_pi           , 0xf1f8, 0xb058, {  8,   8,   6,   6,   6}},
	{m68k_op_cmp_16_pd           , 0xf1f8, 0xb060, { 10,  10,   7,   7,   7}},
	{m68k_op_cmp_16_di           , 0xf1f8, 0xb068, { 12,  12,   7,   7,   7}},
	{m68k_op_cmp_16_ix           , 0xf1f8, 0xb070, { 14,  14,   9,   9,   9}},
	{m68k_op_cmp_32_d            , 0xf1f8, 0xb080, {  6,   6,   2,   2,   2}},
	{m68k_op_cmp_32_a            , 0xf1f8, 0xb088, {  6,   6,   2,   2,   2}},
	{m68k_op_cmp_32_ai           , 0xf1f8, 0xb090, { 14,  14,   6,   6,   6}},
	{m68k_op_cmp_32_pi           , 0xf1f8, 0xb098, { 14,  14,   6,   6,   6}},
	{m68k_op_cmp_32_pd           , 0xf1f8, 0xb0a0, { 16,  16,   7,   7,   7}},
	{m68k_op_cmp_32_di           , 0xf1f8, 0xb0a8, { 18,  18,   7,   7,   7}},
	{m68k_op_cmp_32_ix           , 0xf1f8, 0xb0b0, { 20,  20,   9,   9,   9}},
	{m68k_op_cmpa_16_d           , 0xf1f8, 0xb0c0, {  6,   6,   4,   4,   4}},
	{m68k_op_cmpa_16_a           , 0xf1f8, 0xb0c8, {  6,   6,   4,   4,   4}},
	{m68k_op_cmpa_16_ai          , 0xf1f8, 0xb0d0, { 10,  10,   8,   8,   8}},
	{m68k_op_cmpa_16_pi          , 0xf1f8, 0xb0d8, { 10,  10,   8,   8,   8}},
	{m68k_op_cmpa_16_pd          , 0xf1f8, 0xb0e0, { 12,  12,   9,   9,   9}},
	{m68k_op_cmpa_16_di          , 0xf1f8, 0xb0e8, { 14,  14,   9,   9,   9}},
	{m68k_op_cmpa_16_ix          , 0xf1f8, 0xb0f0, { 16,  16,  11,  11,  11}},
	{m68k_op_eor_8_d             , 0xf1f8, 0xb100, {  4,   4,   2,   2,   2}},
	{m68k_op_cmpm_8              , 0xf1f8, 0xb108, { 12,  12,   9,   9,   9}},
	{m68k_op_eor_8_ai            , 0xf1f8, 0xb110, { 12,  12,   8,   8,   8}},
	{m68k_op_eor_8_pi            , 0xf1f8, 0xb118, { 12,  12,   8,   8,   8}},
	{m68k_op_eor_8_pd            , 0xf1f8, 0xb120, { 14,  14,   9,   9,   9}},
	{m68k_op_eor_8_di            , 0xf1f8, 0xb128, { 16,  16,   9,   9,   9}},
	{m68k_op_eor_8_ix            , 0xf1f8, 0xb130, { 18,  18,  11,  11,  11}},
	{m68k_op_eor_16_d            , 0xf1f8, 0xb140, {  4,   4,   2,   2,   2}},
	{m68k_op_cmpm_16             , 0xf1f8, 0xb148, { 12,  12,   9,   9,   9}},
	{m68k_op_eor_16_ai           , 0xf1f8, 0xb150, { 12,  12,   8,   8,   8}},
	{m68k_op_eor_16_pi           , 0xf1f8, 0xb158, { 12,  12,   8,   8,   8}},
	{m68k_op_eor_16_pd           , 0xf1f8, 0xb160, { 14,  14,   9,   9,   9}},
	{m68k_op_eor_16_di           , 0xf1f8, 0xb168, { 16,  16,   9,   9,   9}},
	{m68k_op_eor_16_ix           , 0xf1f8, 0xb170, { 18,  18,  11,  11,  11}},
	{m68k_op_eor_32_d            , 0xf1f8, 0xb180, {  8,   6,   2,   2,   2}},
	{m68k_op_cmpm_32             , 0xf1f8, 0xb188, { 20,  20,   9,   9,   9}},
	{m68k_op_eor_32_ai           , 0xf1f8, 0xb190, { 20,  20,   8,   8,   8}},
	{m68k_op_eor_32_pi           , 0xf1f8, 0xb198, { 20,  20,   8,   8,   8}},
	{m68k_op_eor_32_pd           , 0xf1f8, 0xb1a0, { 22,  22,   9,   9,   9}},
	{m68k_op_eor_32_di           , 0xf1f8, 0xb1a8, { 24,  24,   9,   9,   9}},
	{m68k_op_eor_32_ix           , 0xf1f8, 0xb1b0, { 26,  26,  11,  11,  11}},
	{m68k_op_cmpa_32_d           , 0xf1f8, 0xb1c0, {  6,   6,   4,   4,   4}},
	{m68k_op_cmpa_32_a           , 0xf1f8, 0xb1c8, {  6,   6,   4,   4,   4}},
	{m68k_op_cmpa_32_ai          , 0xf1f8, 0xb1d0, { 14,  14,   8,   8,   8}},
	{m68k_op_cmpa_32_pi          , 0xf1f8, 0xb1d8, { 14,  14,   8,   8,   8}},
	{m68k_op_cmpa_32_pd          , 0xf1f8, 0xb1e0, { 16,  16,   9,   9,   9}},
	{m68k_op_cmpa_32_di          , 0xf1f8, 0xb1e8, { 18,  18,   9,   9,   9}},
	{m68k_op_cmpa_32_ix          , 0xf1f8, 0xb1f0, { 20,  20,  11,  11,  11}},
	{m68k_op_and_8_er_d          , 0xf1f8, 0xc000, {  4,   4,   2,   2,   2}},
	{m68k_op_and_8_er_ai         , 0xf1f8, 0xc010, {  8,   8,   6,   6,   6}},
	{m68k_op_and_8_er_pi         , 0xf1f8, 0xc018, {  8,   8,   6,   6,   6}},
	{m68k_op_and_8_er_pd         , 0xf1f8, 0xc020, { 10,  10,   7,   7,   7}},
	{m68k_op_and_8_er_di         , 0xf1f8, 0xc028, { 12,  12,   7,   7,   7}},
	{m68k_op_and_8_er_ix         , 0xf1f8, 0xc030, { 14,  14,   9,   9,   9}},
	{m68k_op_and_16_er_d         , 0xf1f8, 0xc040, {  4,   4,   2,   2,   2}},
	{m68k_op_and_16_er_ai        , 0xf1f8, 0xc050, {  8,   8,   6,   6,   6}},
	{m68k_op_and_16_er_pi        , 0xf1f8, 0xc058, {  8,   8,   6,   6,   6}},
	{m68k_op_and_16_er_pd        , 0xf1f8, 0xc060, { 10,  10,   7,   7,   7}},
	{m68k_op_and_16_er_di        , 0xf1f8, 0xc068, { 12,  12,   7,   7,   7}},
	{m68k_op_and_16_er_ix        , 0xf1f8, 0xc070, { 14,  14,   9,   9,   9}},
	{m68k_op_and_32_er_d         , 0xf1f8, 0xc080, {  6,   6,   2,   2,   2}},
	{m68k_op_and_32_er_ai        , 0xf1f8, 0xc090, { 14,  14,   6,   6,   6}},
	{m68k_op_and_32_er_pi        , 0xf1f8, 0xc098, { 14,  14,   6,   6,   6}},
	{m68k_op_and_32_er_pd        , 0xf1f8, 0xc0a0, { 16,  16,   7,   7,   7}},
	{m68k_op_and_32_er_di        , 0xf1f8, 0xc0a8, { 18,  18,   7,   7,   7}},
	{m68k_op_and_32_er_ix        , 0xf1f8, 0xc0b0, { 20,  20,   9,   9,   9}},
	{m68k_op_mulu_16_d           , 0xf1f8, 0xc0c0, { 54,  30,  27,  27,  27}},
	{m68k_op_mulu_16_ai          , 0xf1f8, 0xc0d0, { 58,  34,  31,  31,  31}},
	{m68k_op_mulu_16_pi          , 0xf1f8, 0xc0d8, { 58,  34,  31,  31,  31}},
	{m68k_op_mulu_16_pd          , 0xf1f8, 0xc0e0, { 60,  36,  32,  32,  32}},
	{m68k_op_mulu_16_di          , 0xf1f8, 0xc0e8, { 62,  38,  32,  32,  32}},
	{m68k_op_mulu_16_ix          , 0xf1f8, 0xc0f0, { 64,  40,  34,  34,  34}},
	{m68k_op_abcd_8_rr           , 0xf1f8, 0xc100, {  6,   6,   4,   4,   4}},
	{m68k_op_abcd_8_mm           , 0xf1f8, 0xc108, { 18,  18,  16,  16,  16}},
	{m68k_op_and_8_re_ai         , 0xf1f8, 0xc110, { 12,  12,   8,   8,   8}},
	{m68k_op_and_8_re_pi         , 0xf1f8, 0xc118, { 12,  12,   8,   8,   8}},
	{m68k_op_and_8_re_pd         , 0xf1f8, 0xc120, { 14,  14,   9,   9,   9}},
	{m68k_op_and_8_re_di         , 0xf1f8, 0xc128, { 16,  16,   9,   9,   9}},
	{m68k_op_and_8_re_ix         , 0xf1f8, 0xc130, { 18,  18,  11,  11,  11}},
	{m68k_op_exg_32_dd           , 0xf1f8, 0xc140, {  6,   6,   2,   2,   2}},
	{m68k_op_exg_32_aa           , 0xf1f8, 0xc148, {  6,   6,   2,   2,   2}},
	{m68k_op_and_16_re_ai        , 0xf1f8, 0xc150, { 12,  12,   8,   8,   8}},
	{m68k_op_and_16_re_pi        , 0xf1f8, 0xc158, { 12,  12,   8,   8,   8}},
	{m68k_op_and_16_re_pd        , 0xf1f8, 0xc160, { 14,  14,   9,   9,   9}},
	{m68k_op_and_16_re_di        , 0xf1f8, 0xc168, { 16,  16,   9,   9,   9}},
	{m68k_op_and_16_re_ix        , 0xf1f8, 0xc170, { 18,  18,  11,  11,  11}},
	{m68k_op_exg_32_da           , 0xf1f8, 0xc188, {  6,   6,   2,   2,   2}},
	{m68k_op_and_32_re_ai        , 0xf1f8, 0xc190, { 20,  20,   8,   8,   8}},
	{m68k_op_and_32_re_pi        , 0xf1f8, 0xc198, { 20,  20,   8,   8,   8}},
	{m68k_op_and_32_re_pd        , 0xf1f8, 0xc1a0, { 22,  22,   9,   9,   9}},
	{m68k_op_and_32_re_di        , 0xf1f8, 0xc1a8, { 24,  24,   9,   9,   9}},
	{m68k_op_and_32_re_ix        , 0xf1f8, 0xc1b0, { 26,  26,  11,  11,  11}},
	{m68k_op_muls_16_d           , 0xf1f8, 0xc1c0, { 54,  32,  27,  27,  27}},
	{m68k_op_muls_16_ai          , 0xf1f8, 0xc1d0, { 58,  36,  31,  31,  31}},
	{m68k_op_muls_16_pi          , 0xf1f8, 0xc1d8, { 58,  36,  31,  31,  31}},
	{m68k_op_muls_16_pd          , 0xf1f8, 0xc1e0, { 60,  38,  32,  32,  32}},
	{m68k_op_muls_16_di          , 0xf1f8, 0xc1e8, { 62,  40,  32,  32,  32}},
	{m68k_op_muls_16_ix          , 0xf1f8, 0xc1f0, { 64,  42,  34,  34,  34}},
	{m68k_op_add_8_er_d          , 0xf1f8, 0xd000, {  4,   4,   2,   2,   2}},
	{m68k_op_add_8_er_ai         , 0xf1f8, 0xd010, {  8,   8,   6,   6,   6}},
	{m68k_op_add_8_er_pi         , 0xf1f8, 0xd018, {  8,   8,   6,   6,   6}},
	{m68k_op_add_8_er_pd         , 0xf1f8, 0xd020, { 10,  10,   7,   7,   7}},
	{m68k_op_add_8_er_di         , 0xf1f8, 0xd028, { 12,  12,   7,   7,   7}},
	{m68k_op_add_8_er_ix         , 0xf1f8, 0xd030, { 14,  14,   9,   9,   9}},
	{m68k_op_add_16_er_d         , 0xf1f8, 0xd040, {  4,   4,   2,   2,   2}},
	{m68k_op_add_16_er_a         , 0xf1f8, 0xd048, {  4,   4,   2,   2,   2}},
	{m68k_op_add_16_er_ai        , 0xf1f8, 0xd050, {  8,   8,   6,   6,   6}},
	{m68k_op_add_16_er_pi        , 0xf1f8, 0xd058, {  8,   8,   6,   6,   6}},
	{m68k_op_add_16_er_pd        , 0xf1f8, 0xd060, { 10,  10,   7,   7,   7}},
	{m68k_op_add_16_er_di        , 0xf1f8, 0xd068, { 12,  12,   7,   7,   7}},
	{m68k_op_add_16_er_ix        , 0xf1f8, 0xd070, { 14,  14,   9,   9,   9}},
	{m68k_op_add_32_er_d         , 0xf1f8, 0xd080, {  6,   6,   2,   2,   2}},
	{m68k_op_add_32_er_a         , 0xf1f8, 0xd088, {  6,   6,   2,   2,   2}},
	{m68k_op_add_32_er_ai        , 0xf1f8, 0xd090, { 14,  14,   6,   6,   6}},
	{m68k_op_add_32_er_pi        , 0xf1f8, 0xd098, { 14,  14,   6,   6,   6}},
	{m68k_op_add_32_er_pd        , 0xf1f8, 0xd0a0, { 16,  16,   7,   7,   7}},
	{m68k_op_add_32_er_di        , 0xf1f8, 0xd0a8, { 18,  18,   7,   7,   7}},
	{m68k_op_add_32_er_ix        , 0xf1f8, 0xd0b0, { 20,  20,   9,   9,   9}},
	{m68k_op_adda_16_d           , 0xf1f8, 0xd0c0, {  8,   8,   2,   2,   2}},
	{m68k_op_adda_16_a           , 0xf1f8, 0xd0c8, {  8,   8,   2,   2,   2}},
	{m68k_op_adda_16_ai          , 0xf1f8, 0xd0d0, { 12,  12,   6,   6,   6}},
	{m68k_op_adda_16_pi          , 0xf1f8, 0xd0d8, { 12,  12,   6,   6,   6}},
	{m68k_op_adda_16_pd          , 0xf1f8, 0xd0e0, { 14,  14,   7,   7,   7}},
	{m68k_op_adda_16_di          , 0xf1f8, 0xd0e8, { 16,  16,   7,   7,   7}},
	{m68k_op_adda_16_ix          , 0xf1f8, 0xd0f0, { 18,  18,   9,   9,   9}},
	{m68k_op_addx_8_rr           , 0xf1f8, 0xd100, {  4,   4,   2,   2,   2}},
	{m68k_op_addx_8_mm           , 0xf1f8, 0xd108, { 18,  18,  12,  12,  12}},
	{m68k_op_add_8_re_ai         , 0xf1f8, 0xd110, { 12,  12,   8,   8,   8}},
	{m68k_op_add_8_re_pi         , 0xf1f8, 0xd118, { 12,  12,   8,   8,   8}},
	{m68k_op_add_8_re_pd         , 0xf1f8, 0xd120, { 14,  14,   9,   9,   9}},
	{m68k_op_add_8_re_di         , 0xf1f8, 0xd128, { 16,  16,   9,   9,   9}},
	{m68k_op_add_8_re_ix         , 0xf1f8, 0xd130, { 18,  18,  11,  11,  11}},
	{m68k_op_addx_16_rr          , 0xf1f8, 0xd140, {  4,   4,   2,   2,   2}},
	{m68k_op_addx_16_mm          , 0xf1f8, 0xd148, { 18,  18,  12,  12,  12}},
	{m68k_op_add_16_re_ai        , 0xf1f8, 0xd150, { 12,  12,   8,   8,   8}},
	{m68k_op_add_16_re_pi        , 0xf1f8, 0xd158, { 12,  12,   8,   8,   8}},
	{m68k_op_add_16_re_pd        , 0xf1f8, 0xd160, { 14,  14,   9,   9,   9}},
	{m68k_op_add_16_re_di        , 0xf1f8, 0xd168, { 16,  16,   9,   9,   9}},
	{m68k_op_add_16_re_ix        , 0xf1f8, 0xd170, { 18,  18,  11,  11,  11}},
	{m68k_op_addx_32_rr          , 0xf1f8, 0xd180, {  8,   6,   2,   2,   2}},
	{m68k_op_addx_32_mm          , 0xf1f8, 0xd188, { 30,  30,  12,  12,  12}},
	{m68k_op_add_32_re_ai        , 0xf1f8, 0xd190, { 20,  20,   8,   8,   8}},
	{m68k_op_add_32_re_pi        , 0xf1f8, 0xd198, { 20,  20,   8,   8,   8}},
	{m68k_op_add_32_re_pd        , 0xf1f8, 0xd1a0, { 22,  22,   9,   9,   9}},
	{m68k_op_add_32_re_di        , 0xf1f8, 0xd1a8, { 24,  24,   9,   9,   9}},
	{m68k_op_add_32_re_ix        , 0xf1f8, 0xd1b0, { 26,  26,  11,  11,  11}},
	{m68k_op_adda_32_d           , 0xf1f8, 0xd1c0, {  6,   6,   2,   2,   2}},
	{m68k_op_adda_32_a           , 0xf1f8, 0xd1c8, {  6,   6,   2,   2,   2}},
	{m68k_op_adda_32_ai          , 0xf1f8, 0xd1d0, { 14,  14,   6,   6,   6}},
	{m68k_op_adda_32_pi          , 0xf1f8, 0xd1d8, { 14,  14,   6,   6,   6}},
	{m68k_op_adda_32_pd          , 0xf1f8, 0xd1e0, { 16,  16,   7,   7,   7}},
	{m68k_op_adda_32_di          , 0xf1f8, 0xd1e8, { 18,  18,   7,   7,   7}},
	{m68k_op_adda_32_ix          , 0xf1f8, 0xd1f0, { 20,  20,   9,   9,   9}},
	{m68k_op_asr_8_s             , 0xf1f8, 0xe000, {  6,   6,   6,   6,   6}},
	{m68k_op_lsr_8_s             , 0xf1f8, 0xe008, {  6,   6,   4,   4,   4}},
	{m68k_op_roxr_8_s            , 0xf1f8, 0xe010, {  6,   6,  12,  12,  12}},
	{m68k_op_ror_8_s             , 0xf1f8, 0xe018, {  6,   6,   8,   8,   8}},
	{m68k_op_asr_8_r             , 0xf1f8, 0xe020, {  6,   6,   6,   6,   6}},
	{m68k_op_lsr_8_r             , 0xf1f8, 0xe028, {  6,   6,   6,   6,   6}},
	{m68k_op_roxr_8_r            , 0xf1f8, 0xe030, {  6,   6,  12,  12,  12}},
	{m68k_op_ror_8_r             , 0xf1f8, 0xe038, {  6,   6,   8,   8,   8}},
	{m68k_op_asr_16_s            , 0xf1f8, 0xe040, {  6,   6,   6,   6,   6}},
	{m68k_op_lsr_16_s            , 0xf1f8, 0xe048, {  6,   6,   4,   4,   4}},
	{m68k_op_roxr_16_s           , 0xf1f8, 0xe050, {  6,   6,  12,  12,  12}},
	{m68k_op_ror_16_s            , 0xf1f8, 0xe058, {  6,   6,   8,   8,   8}},
	{m68k_op_asr_16_r            , 0xf1f8, 0xe060, {  6,   6,   6,   6,   6}},
	{m68k_op_lsr_16_r            , 0xf1f8, 0xe068, {  6,   6,   6,   6,   6}},
	{m68k_op_roxr_16_r           , 0xf1f8, 0xe070, {  6,   6,  12,  12,  12}},
	{m68k_op_ror_16_r            , 0xf1f8, 0xe078, {  6,   6,   8,   8,   8}},
	{m68k_op_asr_32_s            , 0xf1f8, 0xe080, {  8,   8,   6,   6,   6}},
	{m68k_op_lsr_32_s            , 0xf1f8, 0xe088, {  8,   8,   4,   4,   4}},
	{m68k_op_roxr_32_s           , 0xf1f8, 0xe090, {  8,   8,  12,  12,  12}},
	{m68k_op_ror_32_s            , 0xf1f8, 0xe098, {  8,   8,   8,   8,   8}},
	{m68k_op_asr_32_r            , 0xf1f8, 0xe0a0, {  8,   8,   6,   6,   6}},
	{m68k_op_lsr_32_r            , 0xf1f8, 0xe0a8, {  8,   8,   6,   6,   6}},
	{m68k_op_roxr_32_r           , 0xf1f8, 0xe0b0, {  8,   8,  12,  12,  12}},
	{m68k_op_ror_32_r            , 0xf1f8, 0xe0b8, {  8,   8,   8,   8,   8}},
	{m68k_op_asl_8_s             , 0xf1f8, 0xe100, {  6,   6,   8,   8,   8}},
	{m68k_op_lsl_8_s             , 0xf1f8, 0xe108, {  6,   6,   4,   4,   4}},
	{m68k_op_roxl_8_s            , 0xf1f8, 0xe110, {  6,   6,  12,  12,  12}},
	{m68k_op_rol_8_s             , 0xf1f8, 0xe118, {  6,   6,   8,   8,   8}},
	{m68k_op_asl_8_r             , 0xf1f8, 0xe120, {  6,   6,   8,   8,   8}},
	{m68k_op_lsl_8_r             , 0xf1f8, 0xe128, {  6,   6,   6,   6,   6}},
	{m68k_op_roxl_8_r            , 0xf1f8, 0xe130, {  6,   6,  12,  12,  12}},
	{m68k_op_rol_8_r             , 0xf1f8, 0xe138, {  6,   6,   8,   8,   8}},
	{m68k_op_asl_16_s            , 0xf1f8, 0xe140, {  6,   6,   8,   8,   8}},
	{m68k_op_lsl_16_s            , 0xf1f8, 0xe148, {  6,   6,   4,   4,   4}},
	{m68k_op_roxl_16_s           , 0xf1f8, 0xe150, {  6,   6,  12,  12,  12}},
	{m68k_op_rol_16_s            , 0xf1f8, 0xe158, {  6,   6,   8,   8,   8}},
	{m68k_op_asl_16_r            , 0xf1f8, 0xe160, {  6,   6,   8,   8,   8}},
	{m68k_op_lsl_16_r            , 0xf1f8, 0xe168, {  6,   6,   6,   6,   6}},
	{m68k_op_roxl_16_r           , 0xf1f8, 0xe170, {  6,   6,  12,  12,  12}},
	{m68k_op_rol_16_r            , 0xf1f8, 0xe178, {  6,   6,   8,   8,   8}},
	{m68k_op_asl_32_s            , 0xf1f8, 0xe180, {  8,   8,   8,   8,   8}},
	{m68k_op_lsl_32_s            , 0xf1f8, 0xe188, {  8,   8,   4,   4,   4}},
	{m68k_op_roxl_32_s           , 0xf1f8, 0xe190, {  8,   8,  12,  12,  12}},
	{m68k_op_rol_32_s            , 0xf1f8, 0xe198, {  8,   8,   8,   8,   8}},
	{m68k_op_asl_32_r            , 0xf1f8, 0xe1a0, {  8,   8,   8,   8,   8}},
	{m68k_op_lsl_32_r            , 0xf1f8, 0xe1a8, {  8,   8,   6,   6,   6}},
	{m68k_op_roxl_32_r           , 0xf1f8, 0xe1b0, {  8,   8,  12,  12,  12}},
	{m68k_op_rol_32_r            , 0xf1f8, 0xe1b8, {  8,   8,   8,   8,   8}},
	{m68k_op_trap                , 0xfff0, 0x4e40, {  4,   4,   4,   4,   4}},
	{m68k_op_btst_8_r_pi7        , 0xf1ff, 0x011f, {  8,   8,   8,   8,   8}},
	{m68k_op_btst_8_r_pd7        , 0xf1ff, 0x0127, { 10,  10,   9,   9,   9}},
	{m68k_op_btst_8_r_aw         , 0xf1ff, 0x0138, { 12,  12,   8,   8,   8}},
	{m68k_op_btst_8_r_al         , 0xf1ff, 0x0139, { 16,  16,   8,   8,   8}},
	{m68k_op_btst_8_r_pcdi       , 0xf1ff, 0x013a, { 12,  12,   9,   9,   9}},
	{m68k_op_btst_8_r_pcix       , 0xf1ff, 0x013b, { 14,  14,  11,  11,  11}},
	{m68k_op_btst_8_r_i          , 0xf1ff, 0x013c, {  8,   8,   6,   6,   6}},
	{m68k_op_bchg_8_r_pi7        , 0xf1ff, 0x015f, { 12,  12,   8,   8,   8}},
	{m68k_op_bchg_8_r_pd7        , 0xf1ff, 0x0167, { 14,  14,   9,   9,   9}},
	{m68k_op_bchg_8_r_aw         , 0xf1ff, 0x0178, { 16,  16,   8,   8,   8}},
	{m68k_op_bchg_8_r_al         , 0xf1ff, 0x0179, { 20,  20,   8,   8,   8}},
	{m68k_op_bclr_8_r_pi7        , 0xf1ff, 0x019f, { 12,  14,   8,   8,   8}},
	{m68k_op_bclr_8_r_pd7        , 0xf1ff, 0x01a7, { 14,  16,   9,   9,   9}},
	{m68k_op_bclr_8_r_aw         , 0xf1ff, 0x01b8, { 16,  18,   8,   8,   8}},
	{m68k_op_bclr_8_r_al         , 0xf1ff, 0x01b9, { 20,  22,   8,   8,   8}},
	{m68k_op_bset_8_r_pi7        , 0xf1ff, 0x01df, { 12,  12,   8,   8,   8}},
	{m68k_op_bset_8_r_pd7        , 0xf1ff, 0x01e7, { 14,  14,   9,   9,   9}},
	{m68k_op_bset_8_r_aw         , 0xf1ff, 0x01f8, { 16,  16,   8,   8,   8}},
	{m68k_op_bset_8_r_al         , 0xf1ff, 0x01f9, { 20,  20,   8,   8,   8}},
	{m68k_op_move_8_d_pi7        , 0xf1ff, 0x101f, {  8,   8,   6,   6,   6}},
	{m68k_op_move_8_d_pd7        , 0xf1ff, 0x1027, { 10,  10,   7,   7,   7}},
	{m68k_op_move_8_d_aw         , 0xf1ff, 0x1038, { 12,  12,   6,   6,   6}},
	{m68k_op_move_8_d_al         , 0xf1ff, 0x1039, { 16,  16,   6,   6,   6}},
	{m68k_op_move_8_d_pcdi       , 0xf1ff, 0x103a, { 12,  12,   7,   7,   7}},
	{m68k_op_move_8_d_pcix       , 0xf1ff, 0x103b, { 14,  14,   9,   9,   9}},
	{m68k_op_move_8_d_i          , 0xf1ff, 0x103c, {  8,   8,   4,   4,   4}},
	{m68k_op_move_8_ai_pi7       , 0xf1ff, 0x109f, { 12,  12,   8,   8,   8}},
	{m68k_op_move_8_ai_pd7       , 0xf1ff, 0x10a7, { 14,  14,   9,   9,   9}},
	{m68k_op_move_8_ai_aw        , 0xf1ff, 0x10b8, { 16,  16,   8,   8,   8}},
	{m68k_op_move_8_ai_al        , 0xf1ff, 0x10b9, { 20,  20,   8,   8,   8}},
	{m68k_op_move_8_ai_pcdi      , 0xf1ff, 0x10ba, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_ai_pcix      , 0xf1ff, 0x10bb, { 18,  18,  11,  11,  11}},
	{m68k_op_move_8_ai_i         , 0xf1ff, 0x10bc, { 12,  12,   6,   6,   6}},
	{m68k_op_move_8_pi_pi7       , 0xf1ff, 0x10df, { 12,  12,   8,   8,   8}},
	{m68k_op_move_8_pi_pd7       , 0xf1ff, 0x10e7, { 14,  14,   9,   9,   9}},
	{m68k_op_move_8_pi_aw        , 0xf1ff, 0x10f8, { 16,  16,   8,   8,   8}},
	{m68k_op_move_8_pi_al        , 0xf1ff, 0x10f9, { 20,  20,   8,   8,   8}},
	{m68k_op_move_8_pi_pcdi      , 0xf1ff, 0x10fa, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_pi_pcix      , 0xf1ff, 0x10fb, { 18,  18,  11,  11,  11}},
	{m68k_op_move_8_pi_i         , 0xf1ff, 0x10fc, { 12,  12,   6,   6,   6}},
	{m68k_op_move_8_pd_pi7       , 0xf1ff, 0x111f, { 12,  12,   9,   9,   9}},
	{m68k_op_move_8_pd_pd7       , 0xf1ff, 0x1127, { 14,  14,  10,  10,  10}},
	{m68k_op_move_8_pd_aw        , 0xf1ff, 0x1138, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_pd_al        , 0xf1ff, 0x1139, { 20,  20,   9,   9,   9}},
	{m68k_op_move_8_pd_pcdi      , 0xf1ff, 0x113a, { 16,  16,  10,  10,  10}},
	{m68k_op_move_8_pd_pcix      , 0xf1ff, 0x113b, { 18,  18,  12,  12,  12}},
	{m68k_op_move_8_pd_i         , 0xf1ff, 0x113c, { 12,  12,   7,   7,   7}},
	{m68k_op_move_8_di_pi7       , 0xf1ff, 0x115f, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_di_pd7       , 0xf1ff, 0x1167, { 18,  18,  10,  10,  10}},
	{m68k_op_move_8_di_aw        , 0xf1ff, 0x1178, { 20,  20,   9,   9,   9}},
	{m68k_op_move_8_di_al        , 0xf1ff, 0x1179, { 24,  24,   9,   9,   9}},
	{m68k_op_move_8_di_pcdi      , 0xf1ff, 0x117a, { 20,  20,  10,  10,  10}},
	{m68k_op_move_8_di_pcix      , 0xf1ff, 0x117b, { 22,  22,  12,  12,  12}},
	{m68k_op_move_8_di_i         , 0xf1ff, 0x117c, { 16,  16,   7,   7,   7}},
	{m68k_op_move_8_ix_pi7       , 0xf1ff, 0x119f, { 18,  18,  11,  11,  11}},
	{m68k_op_move_8_ix_pd7       , 0xf1ff, 0x11a7, { 20,  20,  12,  12,  12}},
	{m68k_op_move_8_ix_aw        , 0xf1ff, 0x11b8, { 22,  22,  11,  11,  11}},
	{m68k_op_move_8_ix_al        , 0xf1ff, 0x11b9, { 26,  26,  11,  11,  11}},
	{m68k_op_move_8_ix_pcdi      , 0xf1ff, 0x11ba, { 22,  22,  12,  12,  12}},
	{m68k_op_move_8_ix_pcix      , 0xf1ff, 0x11bb, { 24,  24,  14,  14,  14}},
	{m68k_op_move_8_ix_i         , 0xf1ff, 0x11bc, { 18,  18,   9,   9,   9}},
	{m68k_op_move_32_d_aw        , 0xf1ff, 0x2038, { 16,  16,   6,   6,   6}},
	{m68k_op_move_32_d_al        , 0xf1ff, 0x2039, { 20,  20,   6,   6,   6}},
	{m68k_op_move_32_d_pcdi      , 0xf1ff, 0x203a, { 16,  16,   7,   7,   7}},
	{m68k_op_move_32_d_pcix      , 0xf1ff, 0x203b, { 18,  18,   9,   9,   9}},
	{m68k_op_move_32_d_i         , 0xf1ff, 0x203c, { 12,  12,   6,   6,   6}},
	{m68k_op_movea_32_aw         , 0xf1ff, 0x2078, { 16,  16,   6,   6,   6}},
	{m68k_op_movea_32_al         , 0xf1ff, 0x2079, { 20,  20,   6,   6,   6}},
	{m68k_op_movea_32_pcdi       , 0xf1ff, 0x207a, { 16,  16,   7,   7,   7}},
	{m68k_op_movea_32_pcix       , 0xf1ff, 0x207b, { 18,  18,   9,   9,   9}},
	{m68k_op_movea_32_i          , 0xf1ff, 0x207c, { 12,  12,   6,   6,   6}},
	{m68k_op_move_32_ai_aw       , 0xf1ff, 0x20b8, { 24,  24,   8,   8,   8}},
	{m68k_op_move_32_ai_al       , 0xf1ff, 0x20b9, { 28,  28,   8,   8,   8}},
	{m68k_op_move_32_ai_pcdi     , 0xf1ff, 0x20ba, { 24,  24,   9,   9,   9}},
	{m68k_op_move_32_ai_pcix     , 0xf1ff, 0x20bb, { 26,  26,  11,  11,  11}},
	{m68k_op_move_32_ai_i        , 0xf1ff, 0x20bc, { 20,  20,   8,   8,   8}},
	{m68k_op_move_32_pi_aw       , 0xf1ff, 0x20f8, { 24,  24,   8,   8,   8}},
	{m68k_op_move_32_pi_al       , 0xf1ff, 0x20f9, { 28,  28,   8,   8,   8}},
	{m68k_op_move_32_pi_pcdi     , 0xf1ff, 0x20fa, { 24,  24,   9,   9,   9}},
	{m68k_op_move_32_pi_pcix     , 0xf1ff, 0x20fb, { 26,  26,  11,  11,  11}},
	{m68k_op_move_32_pi_i        , 0xf1ff, 0x20fc, { 20,  20,   8,   8,   8}},
	{m68k_op_move_32_pd_aw       , 0xf1ff, 0x2138, { 24,  26,   9,   9,   9}},
	{m68k_op_move_32_pd_al       , 0xf1ff, 0x2139, { 28,  30,   9,   9,   9}},
	{m68k_op_move_32_pd_pcdi     , 0xf1ff, 0x213a, { 24,  26,  10,  10,  10}},
	{m68k_op_move_32_pd_pcix     , 0xf1ff, 0x213b, { 26,  28,  12,  12,  12}},
	{m68k_op_move_32_pd_i        , 0xf1ff, 0x213c, { 20,  22,   9,   9,   9}},
	{m68k_op_move_32_di_aw       , 0xf1ff, 0x2178, { 28,  28,   9,   9,   9}},
	{m68k_op_move_32_di_al       , 0xf1ff, 0x2179, { 32,  32,   9,   9,   9}},
	{m68k_op_move_32_di_pcdi     , 0xf1ff, 0x217a, { 28,  28,  10,  10,  10}},
	{m68k_op_move_32_di_pcix     , 0xf1ff, 0x217b, { 30,  30,  12,  12,  12}},
	{m68k_op_move_32_di_i        , 0xf1ff, 0x217c, { 24,  24,   9,   9,   9}},
	{m68k_op_move_32_ix_aw       , 0xf1ff, 0x21b8, { 30,  30,  11,  11,  11}},
	{m68k_op_move_32_ix_al       , 0xf1ff, 0x21b9, { 34,  34,  11,  11,  11}},
	{m68k_op_move_32_ix_pcdi     , 0xf1ff, 0x21ba, { 30,  30,  12,  12,  12}},
	{m68k_op_move_32_ix_pcix     , 0xf1ff, 0x21bb, { 32,  32,  14,  14,  14}},
	{m68k_op_move_32_ix_i        , 0xf1ff, 0x21bc, { 26,  26,  11,  11,  11}},
	{m68k_op_move_16_d_aw        , 0xf1ff, 0x3038, { 12,  12,   6,   6,   6}},
	{m68k_op_move_16_d_al        , 0xf1ff, 0x3039, { 16,  16,   6,   6,   6}},
	{m68k_op_move_16_d_pcdi      , 0xf1ff, 0x303a, { 12,  12,   7,   7,   7}},
	{m68k_op_move_16_d_pcix      , 0xf1ff, 0x303b, { 14,  14,   9,   9,   9}},
	{m68k_op_move_16_d_i         , 0xf1ff, 0x303c, {  8,   8,   4,   4,   4}},
	{m68k_op_movea_16_aw         , 0xf1ff, 0x3078, { 12,  12,   6,   6,   6}},
	{m68k_op_movea_16_al         , 0xf1ff, 0x3079, { 16,  16,   6,   6,   6}},
	{m68k_op_movea_16_pcdi       , 0xf1ff, 0x307a, { 12,  12,   7,   7,   7}},
	{m68k_op_movea_16_pcix       , 0xf1ff, 0x307b, { 14,  14,   9,   9,   9}},
	{m68k_op_movea_16_i          , 0xf1ff, 0x307c, {  8,   8,   4,   4,   4}},
	{m68k_op_move_16_ai_aw       , 0xf1ff, 0x30b8, { 16,  16,   8,   8,   8}},
	{m68k_op_move_16_ai_al       , 0xf1ff, 0x30b9, { 20,  20,   8,   8,   8}},
	{m68k_op_move_16_ai_pcdi     , 0xf1ff, 0x30ba, { 16,  16,   9,   9,   9}},
	{m68k_op_move_16_ai_pcix     , 0xf1ff, 0x30bb, { 18,  18,  11,  11,  11}},
	{m68k_op_move_16_ai_i        , 0xf1ff, 0x30bc, { 12,  12,   6,   6,   6}},
	{m68k_op_move_16_pi_aw       , 0xf1ff, 0x30f8, { 16,  16,   8,   8,   8}},
	{m68k_op_move_16_pi_al       , 0xf1ff, 0x30f9, { 20,  20,   8,   8,   8}},
	{m68k_op_move_16_pi_pcdi     , 0xf1ff, 0x30fa, { 16,  16,   9,   9,   9}},
	{m68k_op_move_16_pi_pcix     , 0xf1ff, 0x30fb, { 18,  18,  11,  11,  11}},
	{m68k_op_move_16_pi_i        , 0xf1ff, 0x30fc, { 12,  12,   6,   6,   6}},
	{m68k_op_move_16_pd_aw       , 0xf1ff, 0x3138, { 16,  16,   9,   9,   9}},
	{m68k_op_move_16_pd_al       , 0xf1ff, 0x3139, { 20,  20,   9,   9,   9}},
	{m68k_op_move_16_pd_pcdi     , 0xf1ff, 0x313a, { 16,  16,  10,  10,  10}},
	{m68k_op_move_16_pd_pcix     , 0xf1ff, 0x313b, { 18,  18,  12,  12,  12}},
	{m68k_op_move_16_pd_i        , 0xf1ff, 0x313c, { 12,  12,   7,   7,   7}},
	{m68k_op_move_16_di_aw       , 0xf1ff, 0x3178, { 20,  20,   9,   9,   9}},
	{m68k_op_move_16_di_al       , 0xf1ff, 0x3179, { 24,  24,   9,   9,   9}},
	{m68k_op_move_16_di_pcdi     , 0xf1ff, 0x317a, { 20,  20,  10,  10,  10}},
	{m68k_op_move_16_di_pcix     , 0xf1ff, 0x317b, { 22,  22,  12,  12,  12}},
	{m68k_op_move_16_di_i        , 0xf1ff, 0x317c, { 16,  16,   7,   7,   7}},
	{m68k_op_move_16_ix_aw       , 0xf1ff, 0x31b8, { 22,  22,  11,  11,  11}},
	{m68k_op_move_16_ix_al       , 0xf1ff, 0x31b9, { 26,  26,  11,  11,  11}},
	{m68k_op_move_16_ix_pcdi     , 0xf1ff, 0x31ba, { 22,  22,  12,  12,  12}},
	{m68k_op_move_16_ix_pcix     , 0xf1ff, 0x31bb, { 24,  24,  14,  14,  14}},
	{m68k_op_move_16_ix_i        , 0xf1ff, 0x31bc, { 18,  18,   9,   9,   9}},
	{m68k_op_chk_16_aw           , 0xf1ff, 0x41b8, { 18,  16,  12,  12,  12}},
	{m68k_op_chk_16_al           , 0xf1ff, 0x41b9, { 22,  20,  12,  12,  12}},
	{m68k_op_chk_16_pcdi         , 0xf1ff, 0x41ba, { 18,  16,  13,  13,  13}},
	{m68k_op_chk_16_pcix         , 0xf1ff, 0x41bb, { 20,  18,  15,  15,  15}},
	{m68k_op_chk_16_i            , 0xf1ff, 0x41bc, { 14,  12,  10,  10,  10}},
	{m68k_op_lea_32_aw           , 0xf1ff, 0x41f8, {  8,   8,   6,   6,   6}},
	{m68k_op_lea_32_al           , 0xf1ff, 0x41f9, { 12,  12,   6,   6,   6}},
	{m68k_op_lea_32_pcdi         , 0xf1ff, 0x41fa, {  8,   8,   7,   7,   7}},
	{m68k_op_lea_32_pcix         , 0xf1ff, 0x41fb, { 12,  12,   9,   9,   9}},
	{m68k_op_addq_8_pi7          , 0xf1ff, 0x501f, { 12,  12,   8,   8,   8}},
	{m68k_op_addq_8_pd7          , 0xf1ff, 0x5027, { 14,  14,   9,   9,   9}},
	{m68k_op_addq_8_aw           , 0xf1ff, 0x5038, { 16,  16,   8,   8,   8}},
	{m68k_op_addq_8_al           , 0xf1ff, 0x5039, { 20,  20,   8,   8,   8}},
	{m68k_op_addq_16_aw          , 0xf1ff, 0x5078, { 16,  16,   8,   8,   8}},
	{m68k_op_addq_16_al          , 0xf1ff, 0x5079, { 20,  20,   8,   8,   8}},
	{m68k_op_addq_32_aw          , 0xf1ff, 0x50b8, { 24,  24,   8,   8,   8}},
	{m68k_op_addq_32_al          , 0xf1ff, 0x50b9, { 28,  28,   8,   8,   8}},
	{m68k_op_subq_8_pi7          , 0xf1ff, 0x511f, { 12,  12,   8,   8,   8}},
	{m68k_op_subq_8_pd7          , 0xf1ff, 0x5127, { 14,  14,   9,   9,   9}},
	{m68k_op_subq_8_aw           , 0xf1ff, 0x5138, { 16,  16,   8,   8,   8}},
	{m68k_op_subq_8_al           , 0xf1ff, 0x5139, { 20,  20,   8,   8,   8}},
	{m68k_op_subq_16_aw          , 0xf1ff, 0x5178, { 16,  16,   8,   8,   8}},
	{m68k_op_subq_16_al          , 0xf1ff, 0x5179, { 20,  20,   8,   8,   8}},
	{m68k_op_subq_32_aw          , 0xf1ff, 0x51b8, { 24,  24,   8,   8,   8}},
	{m68k_op_subq_32_al          , 0xf1ff, 0x51b9, { 28,  28,   8,   8,   8}},
	{m68k_op_or_8_er_pi7         , 0xf1ff, 0x801f, {  8,   8,   6,   6,   6}},
	{m68k_op_or_8_er_pd7         , 0xf1ff, 0x8027, { 10,  10,   7,   7,   7}},
	{m68k_op_or_8_er_aw          , 0xf1ff, 0x8038, { 12,  12,   6,   6,   6}},
	{m68k_op_or_8_er_al          , 0xf1ff, 0x8039, { 16,  16,   6,   6,   6}},
	{m68k_op_or_8_er_pcdi        , 0xf1ff, 0x803a, { 12,  12,   7,   7,   7}},
	{m68k_op_or_8_er_pcix        , 0xf1ff, 0x803b, { 14,  14,   9,   9,   9}},
	{m68k_op_or_8_er_i           , 0xf1ff, 0x803c, { 10,   8,   4,   4,   4}},
	{m68k_op_or_16_er_aw         , 0xf1ff, 0x8078, { 12,  12,   6,   6,   6}},
	{m68k_op_or_16_er_al         , 0xf1ff, 0x8079, { 16,  16,   6,   6,   6}},
	{m68k_op_or_16_er_pcdi       , 0xf1ff, 0x807a, { 12,  12,   7,   7,   7}},
	{m68k_op_or_16_er_pcix       , 0xf1ff, 0x807b, { 14,  14,   9,   9,   9}},
	{m68k_op_or_16_er_i          , 0xf1ff, 0x807c, { 10,   8,   4,   4,   4}},
	{m68k_op_or_32_er_aw         , 0xf1ff, 0x80b8, { 18,  18,   6,   6,   6}},
	{m68k_op_or_32_er_al         , 0xf1ff, 0x80b9, { 22,  22,   6,   6,   6}},
	{m68k_op_or_32_er_pcdi       , 0xf1ff, 0x80ba, { 18,  18,   7,   7,   7}},
	{m68k_op_or_32_er_pcix       , 0xf1ff, 0x80bb, { 20,  20,   9,   9,   9}},
	{m68k_op_or_32_er_i          , 0xf1ff, 0x80bc, { 16,  14,   6,   6,   6}},
	{m68k_op_divu_16_aw          , 0xf1ff, 0x80f8, {148, 116,  48,  48,  48}},
	{m68k_op_divu_16_al          , 0xf1ff, 0x80f9, {152, 120,  48,  48,  48}},
	{m68k_op_divu_16_pcdi        , 0xf1ff, 0x80fa, {148, 116,  49,  49,  49}},
	{m68k_op_divu_16_pcix        , 0xf1ff, 0x80fb, {150, 118,  51,  51,  51}},
	{m68k_op_divu_16_i           , 0xf1ff, 0x80fc, {144, 112,  46,  46,  46}},
	{m68k_op_sbcd_8_mm_ay7       , 0xf1ff, 0x810f, { 18,  18,  16,  16,  16}},
	{m68k_op_or_8_re_pi7         , 0xf1ff, 0x811f, { 12,  12,   8,   8,   8}},
	{m68k_op_or_8_re_pd7         , 0xf1ff, 0x8127, { 14,  14,   9,   9,   9}},
	{m68k_op_or_8_re_aw          , 0xf1ff, 0x8138, { 16,  16,   8,   8,   8}},
	{m68k_op_or_8_re_al          , 0xf1ff, 0x8139, { 20,  20,   8,   8,   8}},
	{m68k_op_or_16_re_aw         , 0xf1ff, 0x8178, { 16,  16,   8,   8,   8}},
	{m68k_op_or_16_re_al         , 0xf1ff, 0x8179, { 20,  20,   8,   8,   8}},
	{m68k_op_or_32_re_aw         , 0xf1ff, 0x81b8, { 24,  24,   8,   8,   8}},
	{m68k_op_or_32_re_al         , 0xf1ff, 0x81b9, { 28,  28,   8,   8,   8}},
	{m68k_op_divs_16_aw          , 0xf1ff, 0x81f8, {166, 130,  60,  60,  60}},
	{m68k_op_divs_16_al          , 0xf1ff, 0x81f9, {170, 134,  60,  60,  60}},
	{m68k_op_divs_16_pcdi        , 0xf1ff, 0x81fa, {166, 130,  61,  61,  61}},
	{m68k_op_divs_16_pcix        , 0xf1ff, 0x81fb, {168, 132,  63,  63,  63}},
	{m68k_op_divs_16_i           , 0xf1ff, 0x81fc, {162, 126,  58,  58,  58}},
	{m68k_op_sub_8_er_pi7        , 0xf1ff, 0x901f, {  8,   8,   6,   6,   6}},
	{m68k_op_sub_8_er_pd7        , 0xf1ff, 0x9027, { 10,  10,   7,   7,   7}},
	{m68k_op_sub_8_er_aw         , 0xf1ff, 0x9038, { 12,  12,   6,   6,   6}},
	{m68k_op_sub_8_er_al         , 0xf1ff, 0x9039, { 16,  16,   6,   6,   6}},
	{m68k_op_sub_8_er_pcdi       , 0xf1ff, 0x903a, { 12,  12,   7,   7,   7}},
	{m68k_op_sub_8_er_pcix       , 0xf1ff, 0x903b, { 14,  14,   9,   9,   9}},
	{m68k_op_sub_8_er_i          , 0xf1ff, 0x903c, { 10,   8,   4,   4,   4}},
	{m68k_op_sub_16_er_aw        , 0xf1ff, 0x9078, { 12,  12,   6,   6,   6}},
	{m68k_op_sub_16_er_al        , 0xf1ff, 0x9079, { 16,  16,   6,   6,   6}},
	{m68k_op_sub_16_er_pcdi      , 0xf1ff, 0x907a, { 12,  12,   7,   7,   7}},
	{m68k_op_sub_16_er_pcix      , 0xf1ff, 0x907b, { 14,  14,   9,   9,   9}},
	{m68k_op_sub_16_er_i         , 0xf1ff, 0x907c, { 10,   8,   4,   4,   4}},
	{m68k_op_sub_32_er_aw        , 0xf1ff, 0x90b8, { 18,  18,   6,   6,   6}},
	{m68k_op_sub_32_er_al        , 0xf1ff, 0x90b9, { 22,  22,   6,   6,   6}},
	{m68k_op_sub_32_er_pcdi      , 0xf1ff, 0x90ba, { 18,  18,   7,   7,   7}},
	{m68k_op_sub_32_er_pcix      , 0xf1ff, 0x90bb, { 20,  20,   9,   9,   9}},
	{m68k_op_sub_32_er_i         , 0xf1ff, 0x90bc, { 16,  14,   6,   6,   6}},
	{m68k_op_suba_16_aw          , 0xf1ff, 0x90f8, { 16,  16,   6,   6,   6}},
	{m68k_op_suba_16_al          , 0xf1ff, 0x90f9, { 20,  20,   6,   6,   6}},
	{m68k_op_suba_16_pcdi        , 0xf1ff, 0x90fa, { 16,  16,   7,   7,   7}},
	{m68k_op_suba_16_pcix        , 0xf1ff, 0x90fb, { 18,  18,   9,   9,   9}},
	{m68k_op_suba_16_i           , 0xf1ff, 0x90fc, { 14,  12,   4,   4,   4}},
	{m68k_op_subx_8_mm_ay7       , 0xf1ff, 0x910f, { 18,  18,  12,  12,  12}},
	{m68k_op_sub_8_re_pi7        , 0xf1ff, 0x911f, { 12,  12,   8,   8,   8}},
	{m68k_op_sub_8_re_pd7        , 0xf1ff, 0x9127, { 14,  14,   9,   9,   9}},
	{m68k_op_sub_8_re_aw         , 0xf1ff, 0x9138, { 16,  16,   8,   8,   8}},
	{m68k_op_sub_8_re_al         , 0xf1ff, 0x9139, { 20,  20,   8,   8,   8}},
	{m68k_op_sub_16_re_aw        , 0xf1ff, 0x9178, { 16,  16,   8,   8,   8}},
	{m68k_op_sub_16_re_al        , 0xf1ff, 0x9179, { 20,  20,   8,   8,   8}},
	{m68k_op_sub_32_re_aw        , 0xf1ff, 0x91b8, { 24,  24,   8,   8,   8}},
	{m68k_op_sub_32_re_al        , 0xf1ff, 0x91b9, { 28,  28,   8,   8,   8}},
	{m68k_op_suba_32_aw          , 0xf1ff, 0x91f8, { 18,  18,   6,   6,   6}},
	{m68k_op_suba_32_al          , 0xf1ff, 0x91f9, { 22,  22,   6,   6,   6}},
	{m68k_op_suba_32_pcdi        , 0xf1ff, 0x91fa, { 18,  18,   7,   7,   7}},
	{m68k_op_suba_32_pcix        , 0xf1ff, 0x91fb, { 20,  20,   9,   9,   9}},
	{m68k_op_suba_32_i           , 0xf1ff, 0x91fc, { 16,  14,   6,   6,   6}},
	{m68k_op_cmp_8_pi7           , 0xf1ff, 0xb01f, {  8,   8,   6,   6,   6}},
	{m68k_op_cmp_8_pd7           , 0xf1ff, 0xb027, { 10,  10,   7,   7,   7}},
	{m68k_op_cmp_8_aw            , 0xf1ff, 0xb038, { 12,  12,   6,   6,   6}},
	{m68k_op_cmp_8_al            , 0xf1ff, 0xb039, { 16,  16,   6,   6,   6}},
	{m68k_op_cmp_8_pcdi          , 0xf1ff, 0xb03a, { 12,  12,   7,   7,   7}},
	{m68k_op_cmp_8_pcix          , 0xf1ff, 0xb03b, { 14,  14,   9,   9,   9}},
	{m68k_op_cmp_8_i             , 0xf1ff, 0xb03c, {  8,   8,   4,   4,   4}},
	{m68k_op_cmp_16_aw           , 0xf1ff, 0xb078, { 12,  12,   6,   6,   6}},
	{m68k_op_cmp_16_al           , 0xf1ff, 0xb079, { 16,  16,   6,   6,   6}},
	{m68k_op_cmp_16_pcdi         , 0xf1ff, 0xb07a, { 12,  12,   7,   7,   7}},
	{m68k_op_cmp_16_pcix         , 0xf1ff, 0xb07b, { 14,  14,   9,   9,   9}},
	{m68k_op_cmp_16_i            , 0xf1ff, 0xb07c, {  8,   8,   4,   4,   4}},
	{m68k_op_cmp_32_aw           , 0xf1ff, 0xb0b8, { 18,  18,   6,   6,   6}},
	{m68k_op_cmp_32_al           , 0xf1ff, 0xb0b9, { 22,  22,   6,   6,   6}},
	{m68k_op_cmp_32_pcdi         , 0xf1ff, 0xb0ba, { 18,  18,   7,   7,   7}},
	{m68k_op_cmp_32_pcix         , 0xf1ff, 0xb0bb, { 20,  20,   9,   9,   9}},
	{m68k_op_cmp_32_i            , 0xf1ff, 0xb0bc, { 14,  14,   6,   6,   6}},
	{m68k_op_cmpa_16_aw          , 0xf1ff, 0xb0f8, { 14,  14,   8,   8,   8}},
	{m68k_op_cmpa_16_al          , 0xf1ff, 0xb0f9, { 18,  18,   8,   8,   8}},
	{m68k_op_cmpa_16_pcdi        , 0xf1ff, 0xb0fa, { 14,  14,   9,   9,   9}},
	{m68k_op_cmpa_16_pcix        , 0xf1ff, 0xb0fb, { 16,  16,  11,  11,  11}},
	{m68k_op_cmpa_16_i           , 0xf1ff, 0xb0fc, { 10,  10,   6,   6,   6}},
	{m68k_op_cmpm_8_ay7          , 0xf1ff, 0xb10f, { 12,  12,   9,   9,   9}},
	{m68k_op_eor_8_pi7           , 0xf1ff, 0xb11f, { 12,  12,   8,   8,   8}},
	{m68k_op_eor_8_pd7           , 0xf1ff, 0xb127, { 14,  14,   9,   9,   9}},
	{m68k_op_eor_8_aw            , 0xf1ff, 0xb138, { 16,  16,   8,   8,   8}},
	{m68k_op_eor_8_al            , 0xf1ff, 0xb139, { 20,  20,   8,   8,   8}},
	{m68k_op_eor_16_aw           , 0xf1ff, 0xb178, { 16,  16,   8,   8,   8}},
	{m68k_op_eor_16_al           , 0xf1ff, 0xb179, { 20,  20,   8,   8,   8}},
	{m68k_op_eor_32_aw           , 0xf1ff, 0xb1b8, { 24,  24,   8,   8,   8}},
	{m68k_op_eor_32_al           , 0xf1ff, 0xb1b9, { 28,  28,   8,   8,   8}},
	{m68k_op_cmpa_32_aw          , 0xf1ff, 0xb1f8, { 18,  18,   8,   8,   8}},
	{m68k_op_cmpa_32_al          , 0xf1ff, 0xb1f9, { 22,  22,   8,   8,   8}},
	{m68k_op_cmpa_32_pcdi        , 0xf1ff, 0xb1fa, { 18,  18,   9,   9,   9}},
	{m68k_op_cmpa_32_pcix        , 0xf1ff, 0xb1fb, { 20,  20,  11,  11,  11}},
	{m68k_op_cmpa_32_i           , 0xf1ff, 0xb1fc, { 14,  14,   8,   8,   8}},
	{m68k_op_and_8_er_pi7        , 0xf1ff, 0xc01f, {  8,   8,   6,   6,   6}},
	{m68k_op_and_8_er_pd7        , 0xf1ff, 0xc027, { 10,  10,   7,   7,   7}},
	{m68k_op_and_8_er_aw         , 0xf1ff, 0xc038, { 12,  12,   6,   6,   6}},
	{m68k_op_and_8_er_al         , 0xf1ff, 0xc039, { 16,  16,   6,   6,   6}},
	{m68k_op_and_8_er_pcdi       , 0xf1ff, 0xc03a, { 12,  12,   7,   7,   7}},
	{m68k_op_and_8_er_pcix       , 0xf1ff, 0xc03b, { 14,  14,   9,   9,   9}},
	{m68k_op_and_8_er_i          , 0xf1ff, 0xc03c, { 10,   8,   4,   4,   4}},
	{m68k_op_and_16_er_aw        , 0xf1ff, 0xc078, { 12,  12,   6,   6,   6}},
	{m68k_op_and_16_er_al        , 0xf1ff, 0xc079, { 16,  16,   6,   6,   6}},
	{m68k_op_and_16_er_pcdi      , 0xf1ff, 0xc07a, { 12,  12,   7,   7,   7}},
	{m68k_op_and_16_er_pcix      , 0xf1ff, 0xc07b, { 14,  14,   9,   9,   9}},
	{m68k_op_and_16_er_i         , 0xf1ff, 0xc07c, { 10,   8,   4,   4,   4}},
	{m68k_op_and_32_er_aw        , 0xf1ff, 0xc0b8, { 18,  18,   6,   6,   6}},
	{m68k_op_and_32_er_al        , 0xf1ff, 0xc0b9, { 22,  22,   6,   6,   6}},
	{m68k_op_and_32_er_pcdi      , 0xf1ff, 0xc0ba, { 18,  18,   7,   7,   7}},
	{m68k_op_and_32_er_pcix      , 0xf1ff, 0xc0bb, { 20,  20,   9,   9,   9}},
	{m68k_op_and_32_er_i         , 0xf1ff, 0xc0bc, { 16,  14,   6,   6,   6}},
	{m68k_op_mulu_16_aw          , 0xf1ff, 0xc0f8, { 62,  38,  31,  31,  31}},
	{m68k_op_mulu_16_al          , 0xf1ff, 0xc0f9, { 66,  42,  31,  31,  31}},
	{m68k_op_mulu_16_pcdi        , 0xf1ff, 0xc0fa, { 62,  38,  32,  32,  32}},
	{m68k_op_mulu_16_pcix        , 0xf1ff, 0xc0fb, { 64,  40,  34,  34,  34}},
	{m68k_op_mulu_16_i           , 0xf1ff, 0xc0fc, { 58,  34,  29,  29,  29}},
	{m68k_op_abcd_8_mm_ay7       , 0xf1ff, 0xc10f, { 18,  18,  16,  16,  16}},
	{m68k_op_and_8_re_pi7        , 0xf1ff, 0xc11f, { 12,  12,   8,   8,   8}},
	{m68k_op_and_8_re_pd7        , 0xf1ff, 0xc127, { 14,  14,   9,   9,   9}},
	{m68k_op_and_8_re_aw         , 0xf1ff, 0xc138, { 16,  16,   8,   8,   8}},
	{m68k_op_and_8_re_al         , 0xf1ff, 0xc139, { 20,  20,   8,   8,   8}},
	{m68k_op_and_16_re_aw        , 0xf1ff, 0xc178, { 16,  16,   8,   8,   8}},
	{m68k_op_and_16_re_al        , 0xf1ff, 0xc179, { 20,  20,   8,   8,   8}},
	{m68k_op_and_32_re_aw        , 0xf1ff, 0xc1b8, { 24,  24,   8,   8,   8}},
	{m68k_op_and_32_re_al        , 0xf1ff, 0xc1b9, { 28,  28,   8,   8,   8}},
	{m68k_op_muls_16_aw          , 0xf1ff, 0xc1f8, { 62,  40,  31,  31,  31}},
	{m68k_op_muls_16_al          , 0xf1ff, 0xc1f9, { 66,  44,  31,  31,  31}},
	{m68k_op_muls_16_pcdi        , 0xf1ff, 0xc1fa, { 62,  40,  32,  32,  32}},
	{m68k_op_muls_16_pcix        , 0xf1ff, 0xc1fb, { 64,  42,  34,  34,  34}},
	{m68k_op_muls_16_i           , 0xf1ff, 0xc1fc, { 58,  36,  29,  29,  29}},
	{m68k_op_add_8_er_pi7        , 0xf1ff, 0xd01f, {  8,   8,   6,   6,   6}},
	{m68k_op_add_8_er_pd7        , 0xf1ff, 0xd027, { 10,  10,   7,   7,   7}},
	{m68k_op_add_8_er_aw         , 0xf1ff, 0xd038, { 12,  12,   6,   6,   6}},
	{m68k_op_add_8_er_al         , 0xf1ff, 0xd039, { 16,  16,   6,   6,   6}},
	{m68k_op_add_8_er_pcdi       , 0xf1ff, 0xd03a, { 12,  12,   7,   7,   7}},
	{m68k_op_add_8_er_pcix       , 0xf1ff, 0xd03b, { 14,  14,   9,   9,   9}},
	{m68k_op_add_8_er_i          , 0xf1ff, 0xd03c, { 10,   8,   4,   4,   4}},
	{m68k_op_add_16_er_aw        , 0xf1ff, 0xd078, { 12,  12,   6,   6,   6}},
	{m68k_op_add_16_er_al        , 0xf1ff, 0xd079, { 16,  16,   6,   6,   6}},
	{m68k_op_add_16_er_pcdi      , 0xf1ff, 0xd07a, { 12,  12,   7,   7,   7}},
	{m68k_op_add_16_er_pcix      , 0xf1ff, 0xd07b, { 14,  14,   9,   9,   9}},
	{m68k_op_add_16_er_i         , 0xf1ff, 0xd07c, { 10,   8,   4,   4,   4}},
	{m68k_op_add_32_er_aw        , 0xf1ff, 0xd0b8, { 18,  18,   6,   6,   6}},
	{m68k_op_add_32_er_al        , 0xf1ff, 0xd0b9, { 22,  22,   6,   6,   6}},
	{m68k_op_add_32_er_pcdi      , 0xf1ff, 0xd0ba, { 18,  18,   7,   7,   7}},
	{m68k_op_add_32_er_pcix      , 0xf1ff, 0xd0bb, { 20,  20,   9,   9,   9}},
	{m68k_op_add_32_er_i         , 0xf1ff, 0xd0bc, { 16,  14,   6,   6,   6}},
	{m68k_op_adda_16_aw          , 0xf1ff, 0xd0f8, { 16,  16,   6,   6,   6}},
	{m68k_op_adda_16_al          , 0xf1ff, 0xd0f9, { 20,  20,   6,   6,   6}},
	{m68k_op_adda_16_pcdi        , 0xf1ff, 0xd0fa, { 16,  16,   7,   7,   7}},
	{m68k_op_adda_16_pcix        , 0xf1ff, 0xd0fb, { 18,  18,   9,   9,   9}},
	{m68k_op_adda_16_i           , 0xf1ff, 0xd0fc, { 14,  12,   4,   4,   4}},
	{m68k_op_addx_8_mm_ay7       , 0xf1ff, 0xd10f, { 18,  18,  12,  12,  12}},
	{m68k_op_add_8_re_pi7        , 0xf1ff, 0xd11f, { 12,  12,   8,   8,   8}},
	{m68k_op_add_8_re_pd7        , 0xf1ff, 0xd127, { 14,  14,   9,   9,   9}},
	{m68k_op_add_8_re_aw         , 0xf1ff, 0xd138, { 16,  16,   8,   8,   8}},
	{m68k_op_add_8_re_al         , 0xf1ff, 0xd139, { 20,  20,   8,   8,   8}},
	{m68k_op_add_16_re_aw        , 0xf1ff, 0xd178, { 16,  16,   8,   8,   8}},
	{m68k_op_add_16_re_al        , 0xf1ff, 0xd179, { 20,  20,   8,   8,   8}},
	{m68k_op_add_32_re_aw        , 0xf1ff, 0xd1b8, { 24,  24,   8,   8,   8}},
	{m68k_op_add_32_re_al        , 0xf1ff, 0xd1b9, { 28,  28,   8,   8,   8}},
	{m68k_op_adda_32_aw          , 0xf1ff, 0xd1f8, { 18,  18,   6,   6,   6}},
	{m68k_op_adda_32_al          , 0xf1ff, 0xd1f9, { 22,  22,   6,   6,   6}},
	{m68k_op_adda_32_pcdi        , 0xf1ff, 0xd1fa, { 18,  18,   7,   7,   7}},
	{m68k_op_adda_32_pcix        , 0xf1ff, 0xd1fb, { 20,  20,   9,   9,   9}},
	{m68k_op_adda_32_i           , 0xf1ff, 0xd1fc, { 16,  14,   6,   6,   6}},
	{m68k_op_ori_8_d             , 0xfff8, 0x0000, {  8,   8,   2,   2,   2}},
	{m68k_op_ori_8_ai            , 0xfff8, 0x0010, { 16,  16,   8,   8,   8}},
	{m68k_op_ori_8_pi            , 0xfff8, 0x0018, { 16,  16,   8,   8,   8}},
	{m68k_op_ori_8_pd            , 0xfff8, 0x0020, { 18,  18,   9,   9,   9}},
	{m68k_op_ori_8_di            , 0xfff8, 0x0028, { 20,  20,   9,   9,   9}},
	{m68k_op_ori_8_ix            , 0xfff8, 0x0030, { 22,  22,  11,  11,  11}},
	{m68k_op_ori_16_d            , 0xfff8, 0x0040, {  8,   8,   2,   2,   2}},
	{m68k_op_ori_16_ai           , 0xfff8, 0x0050, { 16,  16,   8,   8,   8}},
	{m68k_op_ori_16_pi           , 0xfff8, 0x0058, { 16,  16,   8,   8,   8}},
	{m68k_op_ori_16_pd           , 0xfff8, 0x0060, { 18,  18,   9,   9,   9}},
	{m68k_op_ori_16_di           , 0xfff8, 0x0068, { 20,  20,   9,   9,   9}},
	{m68k_op_ori_16_ix           , 0xfff8, 0x0070, { 22,  22,  11,  11,  11}},
	{m68k_op_ori_32_d            , 0xfff8, 0x0080, { 16,  14,   2,   2,   2}},
	{m68k_op_ori_32_ai           , 0xfff8, 0x0090, { 28,  28,   8,   8,   8}},
	{m68k_op_ori_32_pi           , 0xfff8, 0x0098, { 28,  28,   8,   8,   8}},
	{m68k_op_ori_32_pd           , 0xfff8, 0x00a0, { 30,  30,   9,   9,   9}},
	{m68k_op_ori_32_di           , 0xfff8, 0x00a8, { 32,  32,   9,   9,   9}},
	{m68k_op_ori_32_ix           , 0xfff8, 0x00b0, { 34,  34,  11,  11,  11}},
	{m68k_op_andi_8_d            , 0xfff8, 0x0200, {  8,   8,   2,   2,   2}},
	{m68k_op_andi_8_ai           , 0xfff8, 0x0210, { 16,  16,   8,   8,   8}},
	{m68k_op_andi_8_pi           , 0xfff8, 0x0218, { 16,  16,   8,   8,   8}},
	{m68k_op_andi_8_pd           , 0xfff8, 0x0220, { 18,  18,   9,   9,   9}},
	{m68k_op_andi_8_di           , 0xfff8, 0x0228, { 20,  20,   9,   9,   9}},
	{m68k_op_andi_8_ix           , 0xfff8, 0x0230, { 22,  22,  11,  11,  11}},
	{m68k_op_andi_16_d           , 0xfff8, 0x0240, {  8,   8,   2,   2,   2}},
	{m68k_op_andi_16_ai          , 0xfff8, 0x0250, { 16,  16,   8,   8,   8}},
	{m68k_op_andi_16_pi          , 0xfff8, 0x0258, { 16,  16,   8,   8,   8}},
	{m68k_op_andi_16_pd          , 0xfff8, 0x0260, { 18,  18,   9,   9,   9}},
	{m68k_op_andi_16_di          , 0xfff8, 0x0268, { 20,  20,   9,   9,   9}},
	{m68k_op_andi_16_ix          , 0xfff8, 0x0270, { 22,  22,  11,  11,  11}},
	{m68k_op_andi_32_d           , 0xfff8, 0x0280, { 14,  14,   2,   2,   2}},
	{m68k_op_andi_32_ai          , 0xfff8, 0x0290, { 28,  28,   8,   8,   8}},
	{m68k_op_andi_32_pi          , 0xfff8, 0x0298, { 28,  28,   8,   8,   8}},
	{m68k_op_andi_32_pd          , 0xfff8, 0x02a0, { 30,  30,   9,   9,   9}},
	{m68k_op_andi_32_di          , 0xfff8, 0x02a8, { 32,  32,   9,   9,   9}},
	{m68k_op_andi_32_ix          , 0xfff8, 0x02b0, { 34,  34,  11,  11,  11}},
	{m68k_op_subi_8_d            , 0xfff8, 0x0400, {  8,   8,   2,   2,   2}},
	{m68k_op_subi_8_ai           , 0xfff8, 0x0410, { 16,  16,   8,   8,   8}},
	{m68k_op_subi_8_pi           , 0xfff8, 0x0418, { 16,  16,   8,   8,   8}},
	{m68k_op_subi_8_pd           , 0xfff8, 0x0420, { 18,  18,   9,   9,   9}},
	{m68k_op_subi_8_di           , 0xfff8, 0x0428, { 20,  20,   9,   9,   9}},
	{m68k_op_subi_8_ix           , 0xfff8, 0x0430, { 22,  22,  11,  11,  11}},
	{m68k_op_subi_16_d           , 0xfff8, 0x0440, {  8,   8,   2,   2,   2}},
	{m68k_op_subi_16_ai          , 0xfff8, 0x0450, { 16,  16,   8,   8,   8}},
	{m68k_op_subi_16_pi          , 0xfff8, 0x0458, { 16,  16,   8,   8,   8}},
	{m68k_op_subi_16_pd          , 0xfff8, 0x0460, { 18,  18,   9,   9,   9}},
	{m68k_op_subi_16_di          , 0xfff8, 0x0468, { 20,  20,   9,   9,   9}},
	{m68k_op_subi_16_ix          , 0xfff8, 0x0470, { 22,  22,  11,  11,  11}},
	{m68k_op_subi_32_d           , 0xfff8, 0x0480, { 16,  14,   2,   2,   2}},
	{m68k_op_subi_32_ai          , 0xfff8, 0x0490, { 28,  28,   8,   8,   8}},
	{m68k_op_subi_32_pi          , 0xfff8, 0x0498, { 28,  28,   8,   8,   8}},
	{m68k_op_subi_32_pd          , 0xfff8, 0x04a0, { 30,  30,   9,   9,   9}},
	{m68k_op_subi_32_di          , 0xfff8, 0x04a8, { 32,  32,   9,   9,   9}},
	{m68k_op_subi_32_ix          , 0xfff8, 0x04b0, { 34,  34,  11,  11,  11}},
	{m68k_op_addi_8_d            , 0xfff8, 0x0600, {  8,   8,   2,   2,   2}},
	{m68k_op_addi_8_ai           , 0xfff8, 0x0610, { 16,  16,   8,   8,   8}},
	{m68k_op_addi_8_pi           , 0xfff8, 0x0618, { 16,  16,   8,   8,   8}},
	{m68k_op_addi_8_pd           , 0xfff8, 0x0620, { 18,  18,   9,   9,   9}},
	{m68k_op_addi_8_di           , 0xfff8, 0x0628, { 20,  20,   9,   9,   9}},
	{m68k_op_addi_8_ix           , 0xfff8, 0x0630, { 22,  22,  11,  11,  11}},
	{m68k_op_addi_16_d           , 0xfff8, 0x0640, {  8,   8,   2,   2,   2}},
	{m68k_op_addi_16_ai          , 0xfff8, 0x0650, { 16,  16,   8,   8,   8}},
	{m68k_op_addi_16_pi          , 0xfff8, 0x0658, { 16,  16,   8,   8,   8}},
	{m68k_op_addi_16_pd          , 0xfff8, 0x0660, { 18,  18,   9,   9,   9}},
	{m68k_op_addi_16_di          , 0xfff8, 0x0668, { 20,  20,   9,   9,   9}},
	{m68k_op_addi_16_ix          , 0xfff8, 0x0670, { 22,  22,  11,  11,  11}},
	{m68k_op_addi_32_d           , 0xfff8, 0x0680, { 16,  14,   2,   2,   2}},
	{m68k_op_addi_32_ai          , 0xfff8, 0x0690, { 28,  28,   8,   8,   8}},
	{m68k_op_addi_32_pi          , 0xfff8, 0x0698, { 28,  28,   8,   8,   8}},
	{m68k_op_addi_32_pd          , 0xfff8, 0x06a0, { 30,  30,   9,   9,   9}},
	{m68k_op_addi_32_di          , 0xfff8, 0x06a8, { 32,  32,   9,   9,   9}},
	{m68k_op_addi_32_ix          , 0xfff8, 0x06b0, { 34,  34,  11,  11,  11}},
	{m68k_op_btst_32_s_d         , 0xfff8, 0x0800, { 10,  10,   4,   4,   4}},
	{m68k_op_btst_8_s_ai         , 0xfff8, 0x0810, { 12,  12,   8,   8,   8}},
	{m68k_op_btst_8_s_pi         , 0xfff8, 0x0818, { 12,  12,   8,   8,   8}},
	{m68k_op_btst_8_s_pd         , 0xfff8, 0x0820, { 14,  14,   9,   9,   9}},
	{m68k_op_btst_8_s_di         , 0xfff8, 0x0828, { 16,  16,   9,   9,   9}},
	{m68k_op_btst_8_s_ix         , 0xfff8, 0x0830, { 18,  18,  11,  11,  11}},
	{m68k_op_bchg_32_s_d         , 0xfff8, 0x0840, { 12,  12,   4,   4,   4}},
	{m68k_op_bchg_8_s_ai         , 0xfff8, 0x0850, { 16,  16,   8,   8,   8}},
	{m68k_op_bchg_8_s_pi         , 0xfff8, 0x0858, { 16,  16,   8,   8,   8}},
	{m68k_op_bchg_8_s_pd         , 0xfff8, 0x0860, { 18,  18,   9,   9,   9}},
	{m68k_op_bchg_8_s_di         , 0xfff8, 0x0868, { 20,  20,   9,   9,   9}},
	{m68k_op_bchg_8_s_ix         , 0xfff8, 0x0870, { 22,  22,  11,  11,  11}},
	{m68k_op_bclr_32_s_d         , 0xfff8, 0x0880, { 14,  14,   4,   4,   4}},
	{m68k_op_bclr_8_s_ai         , 0xfff8, 0x0890, { 16,  16,   8,   8,   8}},
	{m68k_op_bclr_8_s_pi         , 0xfff8, 0x0898, { 16,  16,   8,   8,   8}},
	{m68k_op_bclr_8_s_pd         , 0xfff8, 0x08a0, { 18,  18,   9,   9,   9}},
	{m68k_op_bclr_8_s_di         , 0xfff8, 0x08a8, { 20,  20,   9,   9,   9}},
	{m68k_op_bclr_8_s_ix         , 0xfff8, 0x08b0, { 22,  22,  11,  11,  11}},
	{m68k_op_bset_32_s_d         , 0xfff8, 0x08c0, { 12,  12,   4,   4,   4}},
	{m68k_op_bset_8_s_ai         , 0xfff8, 0x08d0, { 16,  16,   8,   8,   8}},
	{m68k_op_bset_8_s_pi         , 0xfff8, 0x08d8, { 16,  16,   8,   8,   8}},
	{m68k_op_bset_8_s_pd         , 0xfff8, 0x08e0, { 18,  18,   9,   9,   9}},
	{m68k_op_bset_8_s_di         , 0xfff8, 0x08e8, { 20,  20,   9,   9,   9}},
	{m68k_op_bset_8_s_ix         , 0xfff8, 0x08f0, { 22,  22,  11,  11,  11}},
	{m68k_op_eori_8_d            , 0xfff8, 0x0a00, {  8,   8,   2,   2,   2}},
	{m68k_op_eori_8_ai           , 0xfff8, 0x0a10, { 16,  16,   8,   8,   8}},
	{m68k_op_eori_8_pi           , 0xfff8, 0x0a18, { 16,  16,   8,   8,   8}},
	{m68k_op_eori_8_pd           , 0xfff8, 0x0a20, { 18,  18,   9,   9,   9}},
	{m68k_op_eori_8_di           , 0xfff8, 0x0a28, { 20,  20,   9,   9,   9}},
	{m68k_op_eori_8_ix           , 0xfff8, 0x0a30, { 22,  22,  11,  11,  11}},
	{m68k_op_eori_16_d           , 0xfff8, 0x0a40, {  8,   8,   2,   2,   2}},
	{m68k_op_eori_16_ai          , 0xfff8, 0x0a50, { 16,  16,   8,   8,   8}},
	{m68k_op_eori_16_pi          , 0xfff8, 0x0a58, { 16,  16,   8,   8,   8}},
	{m68k_op_eori_16_pd          , 0xfff8, 0x0a60, { 18,  18,   9,   9,   9}},
	{m68k_op_eori_16_di          , 0xfff8, 0x0a68, { 20,  20,   9,   9,   9}},
	{m68k_op_eori_16_ix          , 0xfff8, 0x0a70, { 22,  22,  11,  11,  11}},
	{m68k_op_eori_32_d           , 0xfff8, 0x0a80, { 16,  14,   2,   2,   2}},
	{m68k_op_eori_32_ai          , 0xfff8, 0x0a90, { 28,  28,   8,   8,   8}},
	{m68k_op_eori_32_pi          , 0xfff8, 0x0a98, { 28,  28,   8,   8,   8}},
	{m68k_op_eori_32_pd          , 0xfff8, 0x0aa0, { 30,  30,   9,   9,   9}},
	{m68k_op_eori_32_di          , 0xfff8, 0x0aa8, { 32,  32,   9,   9,   9}},
	{m68k_op_eori_32_ix          , 0xfff8, 0x0ab0, { 34,  34,  11,  11,  11}},
	{m68k_op_cmpi_8_d            , 0xfff8, 0x0c00, {  8,   8,   2,   2,   2}},
	{m68k_op_cmpi_8_ai           , 0xfff8, 0x0c10, { 12,  12,   6,   6,   6}},
	{m68k_op_cmpi_8_pi           , 0xfff8, 0x0c18, { 12,  12,   6,   6,   6}},
	{m68k_op_cmpi_8_pd           , 0xfff8, 0x0c20, { 14,  14,   7,   7,   7}},
	{m68k_op_cmpi_8_di           , 0xfff8, 0x0c28, { 16,  16,   7,   7,   7}},
	{m68k_op_cmpi_8_ix           , 0xfff8, 0x0c30, { 18,  18,   9,   9,   9}},
	{m68k_op_cmpi_16_d           , 0xfff8, 0x0c40, {  8,   8,   2,   2,   2}},
	{m68k_op_cmpi_16_ai          , 0xfff8, 0x0c50, { 12,  12,   6,   6,   6}},
	{m68k_op_cmpi_16_pi          , 0xfff8, 0x0c58, { 12,  12,   6,   6,   6}},
	{m68k_op_cmpi_16_pd          , 0xfff8, 0x0c60, { 14,  14,   7,   7,   7}},
	{m68k_op_cmpi_16_di          , 0xfff8, 0x0c68, { 16,  16,   7,   7,   7}},
	{m68k_op_cmpi_16_ix          , 0xfff8, 0x0c70, { 18,  18,   9,   9,   9}},
	{m68k_op_cmpi_32_d           , 0xfff8, 0x0c80, { 14,  12,   2,   2,   2}},
	{m68k_op_cmpi_32_ai          , 0xfff8, 0x0c90, { 20,  20,   6,   6,   6}},
	{m68k_op_cmpi_32_pi          , 0xfff8, 0x0c98, { 20,  20,   6,   6,   6}},
	{m68k_op_cmpi_32_pd          , 0xfff8, 0x0ca0, { 22,  22,   7,   7,   7}},
	{m68k_op_cmpi_32_di          , 0xfff8, 0x0ca8, { 24,  24,   7,   7,   7}},
	{m68k_op_cmpi_32_ix          , 0xfff8, 0x0cb0, { 26,  26,   9,   9,   9}},
	{m68k_op_move_8_aw_d         , 0xfff8, 0x11c0, { 12,  12,   4,   4,   4}},
	{m68k_op_move_8_aw_ai        , 0xfff8, 0x11d0, { 16,  16,   8,   8,   8}},
	{m68k_op_move_8_aw_pi        , 0xfff8, 0x11d8, { 16,  16,   8,   8,   8}},
	{m68k_op_move_8_aw_pd        , 0xfff8, 0x11e0, { 18,  18,   9,   9,   9}},
	{m68k_op_move_8_aw_di        , 0xfff8, 0x11e8, { 20,  20,   9,   9,   9}},
	{m68k_op_move_8_aw_ix        , 0xfff8, 0x11f0, { 22,  22,  11,  11,  11}},
	{m68k_op_move_8_al_d         , 0xfff8, 0x13c0, { 16,  16,   6,   6,   6}},
	{m68k_op_move_8_al_ai        , 0xfff8, 0x13d0, { 20,  20,  10,  10,  10}},
	{m68k_op_move_8_al_pi        , 0xfff8, 0x13d8, { 20,  20,  10,  10,  10}},
	{m68k_op_move_8_al_pd        , 0xfff8, 0x13e0, { 22,  22,  11,  11,  11}},
	{m68k_op_move_8_al_di        , 0xfff8, 0x13e8, { 24,  24,  11,  11,  11}},
	{m68k_op_move_8_al_ix        , 0xfff8, 0x13f0, { 26,  26,  13,  13,  13}},
	{m68k_op_move_8_pi7_d        , 0xfff8, 0x1ec0, {  8,   8,   4,   4,   4}},
	{m68k_op_move_8_pi7_ai       , 0xfff8, 0x1ed0, { 12,  12,   8,   8,   8}},
	{m68k_op_move_8_pi7_pi       , 0xfff8, 0x1ed8, { 12,  12,   8,   8,   8}},
	{m68k_op_move_8_pi7_pd       , 0xfff8, 0x1ee0, { 14,  14,   9,   9,   9}},
	{m68k_op_move_8_pi7_di       , 0xfff8, 0x1ee8, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_pi7_ix       , 0xfff8, 0x1ef0, { 18,  18,  11,  11,  11}},
	{m68k_op_move_8_pd7_d        , 0xfff8, 0x1f00, {  8,   8,   5,   5,   5}},
	{m68k_op_move_8_pd7_ai       , 0xfff8, 0x1f10, { 12,  12,   9,   9,   9}},
	{m68k_op_move_8_pd7_pi       , 0xfff8, 0x1f18, { 12,  12,   9,   9,   9}},
	{m68k_op_move_8_pd7_pd       , 0xfff8, 0x1f20, { 14,  14,  10,  10,  10}},
	{m68k_op_move_8_pd7_di       , 0xfff8, 0x1f28, { 16,  16,  10,  10,  10}},
	{m68k_op_move_8_pd7_ix       , 0xfff8, 0x1f30, { 18,  18,  12,  12,  12}},
	{m68k_op_move_32_aw_d        , 0xfff8, 0x21c0, { 16,  16,   4,   4,   4}},
	{m68k_op_move_32_aw_a        , 0xfff8, 0x21c8, { 16,  16,   4,   4,   4}},
	{m68k_op_move_32_aw_ai       , 0xfff8, 0x21d0, { 24,  24,   8,   8,   8}},
	{m68k_op_move_32_aw_pi       , 0xfff8, 0x21d8, { 24,  24,   8,   8,   8}},
	{m68k_op_move_32_aw_pd       , 0xfff8, 0x21e0, { 26,  26,   9,   9,   9}},
	{m68k_op_move_32_aw_di       , 0xfff8, 0x21e8, { 28,  28,   9,   9,   9}},
	{m68k_op_move_32_aw_ix       , 0xfff8, 0x21f0, { 30,  30,  11,  11,  11}},
	{m68k_op_move_32_al_d        , 0xfff8, 0x23c0, { 20,  20,   6,   6,   6}},
	{m68k_op_move_32_al_a        , 0xfff8, 0x23c8, { 20,  20,   6,   6,   6}},
	{m68k_op_move_32_al_ai       , 0xfff8, 0x23d0, { 28,  28,  10,  10,  10}},
	{m68k_op_move_32_al_pi       , 0xfff8, 0x23d8, { 28,  28,  10,  10,  10}},
	{m68k_op_move_32_al_pd       , 0xfff8, 0x23e0, { 30,  30,  11,  11,  11}},
	{m68k_op_move_32_al_di       , 0xfff8, 0x23e8, { 32,  32,  11,  11,  11}},
	{m68k_op_move_32_al_ix       , 0xfff8, 0x23f0, { 34,  34,  13,  13,  13}},
	{m68k_op_move_16_aw_d        , 0xfff8, 0x31c0, { 12,  12,   4,   4,   4}},
	{m68k_op_move_16_aw_a        , 0xfff8, 0x31c8, { 12,  12,   4,   4,   4}},
	{m68k_op_move_16_aw_ai       , 0xfff8, 0x31d0, { 16,  16,   8,   8,   8}},
	{m68k_op_move_16_aw_pi       , 0xfff8, 0x31d8, { 16,  16,   8,   8,   8}},
	{m68k_op_move_16_aw_pd       , 0xfff8, 0x31e0, { 18,  18,   9,   9,   9}},
	{m68k_op_move_16_aw_di       , 0xfff8, 0x31e8, { 20,  20,   9,   9,   9}},
	{m68k_op_move_16_aw_ix       , 0xfff8, 0x31f0, { 22,  22,  11,  11,  11}},
	{m68k_op_move_16_al_d        , 0xfff8, 0x33c0, { 16,  16,   6,   6,   6}},
	{m68k_op_move_16_al_a        , 0xfff8, 0x33c8, { 16,  16,   6,   6,   6}},
	{m68k_op_move_16_al_ai       , 0xfff8, 0x33d0, { 20,  20,  10,  10,  10}},
	{m68k_op_move_16_al_pi       , 0xfff8, 0x33d8, { 20,  20,  10,  10,  10}},
	{m68k_op_move_16_al_pd       , 0xfff8, 0x33e0, { 22,  22,  11,  11,  11}},
	{m68k_op_move_16_al_di       , 0xfff8, 0x33e8, { 24,  24,  11,  11,  11}},
	{m68k_op_move_16_al_ix       , 0xfff8, 0x33f0, { 26,  26,  13,  13,  13}},
	{m68k_op_negx_8_d            , 0xfff8, 0x4000, {  4,   4,   2,   2,   2}},
	{m68k_op_negx_8_ai           , 0xfff8, 0x4010, { 12,  12,   8,   8,   8}},
	{m68k_op_negx_8_pi           , 0xfff8, 0x4018, { 12,  12,   8,   8,   8}},
	{m68k_op_negx_8_pd           , 0xfff8, 0x4020, { 14,  14,   9,   9,   9}},
	{m68k_op_negx_8_di           , 0xfff8, 0x4028, { 16,  16,   9,   9,   9}},
	{m68k_op_negx_8_ix           , 0xfff8, 0x4030, { 18,  18,  11,  11,  11}},
	{m68k_op_negx_16_d           , 0xfff8, 0x4040, {  4,   4,   2,   2,   2}},
	{m68k_op_negx_16_ai          , 0xfff8, 0x4050, { 12,  12,   8,   8,   8}},
	{m68k_op_negx_16_pi          , 0xfff8, 0x4058, { 12,  12,   8,   8,   8}},
	{m68k_op_negx_16_pd          , 0xfff8, 0x4060, { 14,  14,   9,   9,   9}},
	{m68k_op_negx_16_di          , 0xfff8, 0x4068, { 16,  16,   9,   9,   9}},
	{m68k_op_negx_16_ix          , 0xfff8, 0x4070, { 18,  18,  11,  11,  11}},
	{m68k_op_negx_32_d           , 0xfff8, 0x4080, {  6,   6,   2,   2,   2}},
	{m68k_op_negx_32_ai          , 0xfff8, 0x4090, { 20,  20,   8,   8,   8}},
	{m68k_op_negx_32_pi          , 0xfff8, 0x4098, { 20,  20,   8,   8,   8}},
	{m68k_op_negx_32_pd          , 0xfff8, 0x40a0, { 22,  22,   9,   9,   9}},
	{m68k_op_negx_32_di          , 0xfff8, 0x40a8, { 24,  24,   9,   9,   9}},
	{m68k_op_negx_32_ix          , 0xfff8, 0x40b0, { 26,  26,  11,  11,  11}},
	{m68k_op_move_16_frs_d       , 0xfff8, 0x40c0, {  6,   4,   8,   8,   8}},
	{m68k_op_move_16_frs_ai      , 0xfff8, 0x40d0, { 12,  12,  12,  12,  12}},
	{m68k_op_move_16_frs_pi      , 0xfff8, 0x40d8, { 12,  12,  12,  12,  12}},
	{m68k_op_move_16_frs_pd      , 0xfff8, 0x40e0, { 14,  14,  13,  13,  13}},
	{m68k_op_move_16_frs_di      , 0xfff8, 0x40e8, { 16,  16,  13,  13,  13}},
	{m68k_op_move_16_frs_ix      , 0xfff8, 0x40f0, { 18,  18,  15,  15,  15}},
	{m68k_op_clr_8_d             , 0xfff8, 0x4200, {  4,   4,   2,   2,   2}},
	{m68k_op_clr_8_ai            , 0xfff8, 0x4210, { 12,   8,   8,   8,   8}},
	{m68k_op_clr_8_pi            , 0xfff8, 0x4218, { 12,   8,   8,   8,   8}},
	{m68k_op_clr_8_pd            , 0xfff8, 0x4220, { 14,  10,   9,   9,   9}},
	{m68k_op_clr_8_di            , 0xfff8, 0x4228, { 16,  12,   9,   9,   9}},
	{m68k_op_clr_8_ix            , 0xfff8, 0x4230, { 18,  14,  11,  11,  11}},
	{m68k_op_clr_16_d            , 0xfff8, 0x4240, {  4,   4,   2,   2,   2}},
	{m68k_op_clr_16_ai           , 0xfff8, 0x4250, { 12,   8,   8,   8,   8}},
	{m68k_op_clr_16_pi           , 0xfff8, 0x4258, { 12,   8,   8,   8,   8}},
	{m68k_op_clr_16_pd           , 0xfff8, 0x4260, { 14,  10,   9,   9,   9}},
	{m68k_op_clr_16_di           , 0xfff8, 0x4268, { 16,  12,   9,   9,   9}},
	{m68k_op_clr_16_ix           , 0xfff8, 0x4270, { 18,  14,  11,  11,  11}},
	{m68k_op_clr_32_d            , 0xfff8, 0x4280, {  6,   6,   2,   2,   2}},
	{m68k_op_clr_32_ai           , 0xfff8, 0x4290, { 20,  12,   8,   8,   8}},
	{m68k_op_clr_32_pi           , 0xfff8, 0x4298, { 20,  12,   8,   8,   8}},
	{m68k_op_clr_32_pd           , 0xfff8, 0x42a0, { 22,  14,   9,   9,   9}},
	{m68k_op_clr_32_di           , 0xfff8, 0x42a8, { 24,  16,   9,   9,   9}},
	{m68k_op_clr_32_ix           , 0xfff8, 0x42b0, { 26,  20,  11,  11,  11}},
	{m68k_op_neg_8_d             , 0xfff8, 0x4400, {  4,   4,   2,   2,   2}},
	{m68k_op_neg_8_ai            , 0xfff8, 0x4410, { 12,  12,   8,   8,   8}},
	{m68k_op_neg_8_pi            , 0xfff8, 0x4418, { 12,  12,   8,   8,   8}},
	{m68k_op_neg_8_pd            , 0xfff8, 0x4420, { 14,  14,   9,   9,   9}},
	{m68k_op_neg_8_di            , 0xfff8, 0x4428, { 16,  16,   9,   9,   9}},
	{m68k_op_neg_8_ix            , 0xfff8, 0x4430, { 18,  18,  11,  11,  11}},
	{m68k_op_neg_16_d            , 0xfff8, 0x4440, {  4,   4,   2,   2,   2}},
	{m68k_op_neg_16_ai           , 0xfff8, 0x4450, { 12,  12,   8,   8,   8}},
	{m68k_op_neg_16_pi           , 0xfff8, 0x4458, { 12,  12,   8,   8,   8}},
	{m68k_op_neg_16_pd           , 0xfff8, 0x4460, { 14,  14,   9,   9,   9}},
	{m68k_op_neg_16_di           , 0xfff8, 0x4468, { 16,  16,   9,   9,   9}},
	{m68k_op_neg_16_ix           , 0xfff8, 0x4470, { 18,  18,  11,  11,  11}},
	{m68k_op_neg_32_d            , 0xfff8, 0x4480, {  6,   6,   2,   2,   2}},
	{m68k_op_neg_32_ai           , 0xfff8, 0x4490, { 20,  20,   8,   8,   8}},
	{m68k_op_neg_32_pi           , 0xfff8, 0x4498, { 20,  20,   8,   8,   8}},
	{m68k_op_neg_32_pd           , 0xfff8, 0x44a0, { 22,  22,   9,   9,   9}},
	{m68k_op_neg_32_di           , 0xfff8, 0x44a8, { 24,  24,   9,   9,   9}},
	{m68k_op_neg_32_ix           , 0xfff8, 0x44b0, { 26,  26,  11,  11,  11}},
	{m68k_op_move_16_toc_d       , 0xfff8, 0x44c0, { 12,  12,   4,   4,   4}},
	{m68k_op_move_16_toc_ai      , 0xfff8, 0x44d0, { 16,  16,   8,   8,   8}},
	{m68k_op_move_16_toc_pi      , 0xfff8, 0x44d8, { 16,  16,   8,   8,   8}},
	{m68k_op_move_16_toc_pd      , 0xfff8, 0x44e0, { 18,  18,   9,   9,   9}},
	{m68k_op_move_16_toc_di      , 0xfff8, 0x44e8, { 20,  20,   9,   9,   9}},
	{m68k_op_move_16_toc_ix      , 0xfff8, 0x44f0, { 22,  22,  11,  11,  11}},
	{m68k_op_not_8_d             , 0xfff8, 0x4600, {  4,   4,   2,   2,   2}},
	{m68k_op_not_8_ai            , 0xfff8, 0x4610, { 12,  12,   8,   8,   8}},
	{m68k_op_not_8_pi            , 0xfff8, 0x4618, { 12,  12,   8,   8,   8}},
	{m68k_op_not_8_pd            , 0xfff8, 0x4620, { 14,  14,   9,   9,   9}},
	{m68k_op_not_8_di            , 0xfff8, 0x4628, { 16,  16,   9,   9,   9}},
	{m68k_op_not_8_ix            , 0xfff8, 0x4630, { 18,  18,  11,  11,  11}},
	{m68k_op_not_16_d            , 0xfff8, 0x4640, {  4,   4,   2,   2,   2}},
	{m68k_op_not_16_ai           , 0xfff8, 0x4650, { 12,  12,   8,   8,   8}},
	{m68k_op_not_16_pi           , 0xfff8, 0x4658, { 12,  12,   8,   8,   8}},
	{m68k_op_not_16_pd           , 0xfff8, 0x4660, { 14,  14,   9,   9,   9}},
	{m68k_op_not_16_di           , 0xfff8, 0x4668, { 16,  16,   9,   9,   9}},
	{m68k_op_not_16_ix           , 0xfff8, 0x4670, { 18,  18,  11,  11,  11}},
	{m68k_op_not_32_d            , 0xfff8, 0x4680, {  6,   6,   2,   2,   2}},
	{m68k_op_not_32_ai           , 0xfff8, 0x4690, { 20,  20,   8,   8,   8}},
	{m68k_op_not_32_pi           , 0xfff8, 0x4698, { 20,  20,   8,   8,   8}},
	{m68k_op_not_32_pd           , 0xfff8, 0x46a0, { 22,  22,   9,   9,   9}},
	{m68k_op_not_32_di           , 0xfff8, 0x46a8, { 24,  24,   9,   9,   9}},
	{m68k_op_not_32_ix           , 0xfff8, 0x46b0, { 26,  26,  11,  11,  11}},
	{m68k_op_move_16_tos_d       , 0xfff8, 0x46c0, { 12,  12,   8,   8,   8}},
	{m68k_op_move_16_tos_ai      , 0xfff8, 0x46d0, { 16,  16,  12,  12,  12}},
	{m68k_op_move_16_tos_pi      , 0xfff8, 0x46d8, { 16,  16,  12,  12,  12}},
	{m68k_op_move_16_tos_pd      , 0xfff8, 0x46e0, { 18,  18,  13,  13,  13}},
	{m68k_op_move_16_tos_di      , 0xfff8, 0x46e8, { 20,  20,  13,  13,  13}},
	{m68k_op_move_16_tos_ix      , 0xfff8, 0x46f0, { 22,  22,  15,  15,  15}},
	{m68k_op_nbcd_8_d            , 0xfff8, 0x4800, {  6,   6,   6,   6,   6}},
	{m68k_op_nbcd_8_ai           , 0xfff8, 0x4810, { 12,  12,  10,  10,  10}},
	{m68k_op_nbcd_8_pi           , 0xfff8, 0x4818, { 12,  12,  10,  10,  10}},
	{m68k_op_nbcd_8_pd           , 0xfff8, 0x4820, { 14,  14,  11,  11,  11}},
	{m68k_op_nbcd_8_di           , 0xfff8, 0x4828, { 16,  16,  11,  11,  11}},
	{m68k_op_nbcd_8_ix           , 0xfff8, 0x4830, { 18,  18,  13,  13,  13}},
	{m68k_op_swap_32             , 0xfff8, 0x4840, {  4,   4,   4,   4,   4}},
	{m68k_op_pea_32_ai           , 0xfff8, 0x4850, { 12,  12,   9,   9,   9}},
	{m68k_op_pea_32_di           , 0xfff8, 0x4868, { 16,  16,  10,  10,  10}},
	{m68k_op_pea_32_ix           , 0xfff8, 0x4870, { 20,  20,  12,  12,  12}},
	{m68k_op_ext_16              , 0xfff8, 0x4880, {  4,   4,   4,   4,   4}},
	{m68k_op_movem_16_re_ai      , 0xfff8, 0x4890, {  8,   8,   8,   8,   8}},
	{m68k_op_movem_16_re_pd      , 0xfff8, 0x48a0, {  8,   8,   4,   4,   4}},
	{m68k_op_movem_16_re_di      , 0xfff8, 0x48a8, { 12,  12,   9,   9,   9}},
	{m68k_op_movem_16_re_ix      , 0xfff8, 0x48b0, { 14,  14,  11,  11,  11}},
	{m68k_op_ext_32              , 0xfff8, 0x48c0, {  4,   4,   4,   4,   4}},
	{m68k_op_movem_32_re_ai      , 0xfff8, 0x48d0, {  8,   8,   8,   8,   8}},
	{m68k_op_movem_32_re_pd      , 0xfff8, 0x48e0, {  8,   8,   4,   4,   4}},
	{m68k_op_movem_32_re_di      , 0xfff8, 0x48e8, { 12,  12,   9,   9,   9}},
	{m68k_op_movem_32_re_ix      , 0xfff8, 0x48f0, { 14,  14,  11,  11,  11}},
	{m68k_op_tst_8_d             , 0xfff8, 0x4a00, {  4,   4,   2,   2,   2}},
	{m68k_op_tst_8_ai            , 0xfff8, 0x4a10, {  8,   8,   6,   6,   6}},
	{m68k_op_tst_8_pi            , 0xfff8, 0x4a18, {  8,   8,   6,   6,   6}},
	{m68k_op_tst_8_pd            , 0xfff8, 0x4a20, { 10,  10,   7,   7,   7}},
	{m68k_op_tst_8_di            , 0xfff8, 0x4a28, { 12,  12,   7,   7,   7}},
	{m68k_op_tst_8_ix            , 0xfff8, 0x4a30, { 14,  14,   9,   9,   9}},
	{m68k_op_tst_16_d            , 0xfff8, 0x4a40, {  4,   4,   2,   2,   2}},
	{m68k_op_tst_16_ai           , 0xfff8, 0x4a50, {  8,   8,   6,   6,   6}},
	{m68k_op_tst_16_pi           , 0xfff8, 0x4a58, {  8,   8,   6,   6,   6}},
	{m68k_op_tst_16_pd           , 0xfff8, 0x4a60, { 10,  10,   7,   7,   7}},
	{m68k_op_tst_16_di           , 0xfff8, 0x4a68, { 12,  12,   7,   7,   7}},
	{m68k_op_tst_16_ix           , 0xfff8, 0x4a70, { 14,  14,   9,   9,   9}},
	{m68k_op_tst_32_d            , 0xfff8, 0x4a80, {  4,   4,   2,   2,   2}},
	{m68k_op_tst_32_ai           , 0xfff8, 0x4a90, { 12,  12,   6,   6,   6}},
	{m68k_op_tst_32_pi           , 0xfff8, 0x4a98, { 12,  12,   6,   6,   6}},
	{m68k_op_tst_32_pd           , 0xfff8, 0x4aa0, { 14,  14,   7,   7,   7}},
	{m68k_op_tst_32_di           , 0xfff8, 0x4aa8, { 16,  16,   7,   7,   7}},
	{m68k_op_tst_32_ix           , 0xfff8, 0x4ab0, { 18,  18,   9,   9,   9}},
	{m68k_op_tas_8_d             , 0xfff8, 0x4ac0, {  4,   4,   4,   4,   4}},
	{m68k_op_tas_8_ai            , 0xfff8, 0x4ad0, { 18,  18,  16,  16,  16}},
	{m68k_op_tas_8_pi            , 0xfff8, 0x4ad8, { 18,  18,  16,  16,  16}},
	{m68k_op_tas_8_pd            , 0xfff8, 0x4ae0, { 20,  20,  17,  17,  17}},
	{m68k_op_tas_8_di            , 0xfff8, 0x4ae8, { 22,  22,  17,  17,  17}},
	{m68k_op_tas_8_ix            , 0xfff8, 0x4af0, { 24,  24,  19,  19,  19}},
	{m68k_op_movem_16_er_ai      , 0xfff8, 0x4c90, { 12,  12,  12,  12,  12}},
	{m68k_op_movem_16_er_pi      , 0xfff8, 0x4c98, { 12,  12,   8,   8,   8}},
	{m68k_op_movem_16_er_di      , 0xfff8, 0x4ca8, { 16,  16,  13,  13,  13}},
	{m68k_op_movem_16_er_ix      , 0xfff8, 0x4cb0, { 18,  18,  15,  15,  15}},
	{m68k_op_movem_32_er_ai      , 0xfff8, 0x4cd0, { 12,  12,  12,  12,  12}},
	{m68k_op_movem_32_er_pi      , 0xfff8, 0x4cd8, { 12,  12,   8,   8,   8}},
	{m68k_op_movem_32_er_di      , 0xfff8, 0x4ce8, { 16,  16,  13,  13,  13}},
	{m68k_op_movem_32_er_ix      , 0xfff8, 0x4cf0, { 18,  18,  15,  15,  15}},
	{m68k_op_link_16             , 0xfff8, 0x4e50, { 16,  16,   5,   5,   5}},
	{m68k_op_unlk_32             , 0xfff8, 0x4e58, { 12,  12,   6,   6,   6}},
	{m68k_op_move_32_tou         , 0xfff8, 0x4e60, {  4,   6,   2,   2,   2}},
	{m68k_op_move_32_fru         , 0xfff8, 0x4e68, {  4,   6,   2,   2,   2}},
	{m68k_op_jsr_32_ai           , 0xfff8, 0x4e90, { 16,  16,   4,   4,   4}},
	{m68k_op_jsr_32_di           , 0xfff8, 0x4ea8, { 18,  18,   5,   5,   5}},
	{m68k_op_jsr_32_ix           , 0xfff8, 0x4eb0, { 22,  22,   7,   7,   7}},
	{m68k_op_jmp_32_ai           , 0xfff8, 0x4ed0, {  8,   8,   4,   4,   4}},
	{m68k_op_jmp_32_di           , 0xfff8, 0x4ee8, { 10,  10,   5,   5,   5}},
	{m68k_op_jmp_32_ix           , 0xfff8, 0x4ef0, { 14,  14,   7,   7,   7}},
	{m68k_op_st_8_d              , 0xfff8, 0x50c0, {  6,   4,   4,   4,   4}},
	{m68k_op_dbt_16              , 0xfff8, 0x50c8, { 12,  12,   6,   6,   6}},
	{m68k_op_st_8_ai             , 0xfff8, 0x50d0, { 12,  12,  10,  10,  10}},
	{m68k_op_st_8_pi             , 0xfff8, 0x50d8, { 12,  12,  10,  10,  10}},
	{m68k_op_st_8_pd             , 0xfff8, 0x50e0, { 14,  14,  11,  11,  11}},
	{m68k_op_st_8_di             , 0xfff8, 0x50e8, { 16,  16,  11,  11,  11}},
	{m68k_op_st_8_ix             , 0xfff8, 0x50f0, { 18,  18,  13,  13,  13}},
	{m68k_op_sf_8_d              , 0xfff8, 0x51c0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbf_16              , 0xfff8, 0x51c8, { 12,  12,   6,   6,   6}},
	{m68k_op_sf_8_ai             , 0xfff8, 0x51d0, { 12,  12,  10,  10,  10}},
	{m68k_op_sf_8_pi             , 0xfff8, 0x51d8, { 12,  12,  10,  10,  10}},
	{m68k_op_sf_8_pd             , 0xfff8, 0x51e0, { 14,  14,  11,  11,  11}},
	{m68k_op_sf_8_di             , 0xfff8, 0x51e8, { 16,  16,  11,  11,  11}},
	{m68k_op_sf_8_ix             , 0xfff8, 0x51f0, { 18,  18,  13,  13,  13}},
	{m68k_op_shi_8_d             , 0xfff8, 0x52c0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbhi_16             , 0xfff8, 0x52c8, { 12,  12,   6,   6,   6}},
	{m68k_op_shi_8_ai            , 0xfff8, 0x52d0, { 12,  12,  10,  10,  10}},
	{m68k_op_shi_8_pi            , 0xfff8, 0x52d8, { 12,  12,  10,  10,  10}},
	{m68k_op_shi_8_pd            , 0xfff8, 0x52e0, { 14,  14,  11,  11,  11}},
	{m68k_op_shi_8_di            , 0xfff8, 0x52e8, { 16,  16,  11,  11,  11}},
	{m68k_op_shi_8_ix            , 0xfff8, 0x52f0, { 18,  18,  13,  13,  13}},
	{m68k_op_sls_8_d             , 0xfff8, 0x53c0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbls_16             , 0xfff8, 0x53c8, { 12,  12,   6,   6,   6}},
	{m68k_op_sls_8_ai            , 0xfff8, 0x53d0, { 12,  12,  10,  10,  10}},
	{m68k_op_sls_8_pi            , 0xfff8, 0x53d8, { 12,  12,  10,  10,  10}},
	{m68k_op_sls_8_pd            , 0xfff8, 0x53e0, { 14,  14,  11,  11,  11}},
	{m68k_op_sls_8_di            , 0xfff8, 0x53e8, { 16,  16,  11,  11,  11}},
	{m68k_op_sls_8_ix            , 0xfff8, 0x53f0, { 18,  18,  13,  13,  13}},
	{m68k_op_scc_8_d             , 0xfff8, 0x54c0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbcc_16             , 0xfff8, 0x54c8, { 12,  12,   6,   6,   6}},
	{m68k_op_scc_8_ai            , 0xfff8, 0x54d0, { 12,  12,  10,  10,  10}},
	{m68k_op_scc_8_pi            , 0xfff8, 0x54d8, { 12,  12,  10,  10,  10}},
	{m68k_op_scc_8_pd            , 0xfff8, 0x54e0, { 14,  14,  11,  11,  11}},
	{m68k_op_scc_8_di            , 0xfff8, 0x54e8, { 16,  16,  11,  11,  11}},
	{m68k_op_scc_8_ix            , 0xfff8, 0x54f0, { 18,  18,  13,  13,  13}},
	{m68k_op_scs_8_d             , 0xfff8, 0x55c0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbcs_16             , 0xfff8, 0x55c8, { 12,  12,   6,   6,   6}},
	{m68k_op_scs_8_ai            , 0xfff8, 0x55d0, { 12,  12,  10,  10,  10}},
	{m68k_op_scs_8_pi            , 0xfff8, 0x55d8, { 12,  12,  10,  10,  10}},
	{m68k_op_scs_8_pd            , 0xfff8, 0x55e0, { 14,  14,  11,  11,  11}},
	{m68k_op_scs_8_di            , 0xfff8, 0x55e8, { 16,  16,  11,  11,  11}},
	{m68k_op_scs_8_ix            , 0xfff8, 0x55f0, { 18,  18,  13,  13,  13}},
	{m68k_op_sne_8_d             , 0xfff8, 0x56c0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbne_16             , 0xfff8, 0x56c8, { 12,  12,   6,   6,   6}},
	{m68k_op_sne_8_ai            , 0xfff8, 0x56d0, { 12,  12,  10,  10,  10}},
	{m68k_op_sne_8_pi            , 0xfff8, 0x56d8, { 12,  12,  10,  10,  10}},
	{m68k_op_sne_8_pd            , 0xfff8, 0x56e0, { 14,  14,  11,  11,  11}},
	{m68k_op_sne_8_di            , 0xfff8, 0x56e8, { 16,  16,  11,  11,  11}},
	{m68k_op_sne_8_ix            , 0xfff8, 0x56f0, { 18,  18,  13,  13,  13}},
	{m68k_op_seq_8_d             , 0xfff8, 0x57c0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbeq_16             , 0xfff8, 0x57c8, { 12,  12,   6,   6,   6}},
	{m68k_op_seq_8_ai            , 0xfff8, 0x57d0, { 12,  12,  10,  10,  10}},
	{m68k_op_seq_8_pi            , 0xfff8, 0x57d8, { 12,  12,  10,  10,  10}},
	{m68k_op_seq_8_pd            , 0xfff8, 0x57e0, { 14,  14,  11,  11,  11}},
	{m68k_op_seq_8_di            , 0xfff8, 0x57e8, { 16,  16,  11,  11,  11}},
	{m68k_op_seq_8_ix            , 0xfff8, 0x57f0, { 18,  18,  13,  13,  13}},
	{m68k_op_svc_8_d             , 0xfff8, 0x58c0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbvc_16             , 0xfff8, 0x58c8, { 12,  12,   6,   6,   6}},
	{m68k_op_svc_8_ai            , 0xfff8, 0x58d0, { 12,  12,  10,  10,  10}},
	{m68k_op_svc_8_pi            , 0xfff8, 0x58d8, { 12,  12,  10,  10,  10}},
	{m68k_op_svc_8_pd            , 0xfff8, 0x58e0, { 14,  14,  11,  11,  11}},
	{m68k_op_svc_8_di            , 0xfff8, 0x58e8, { 16,  16,  11,  11,  11}},
	{m68k_op_svc_8_ix            , 0xfff8, 0x58f0, { 18,  18,  13,  13,  13}},
	{m68k_op_svs_8_d             , 0xfff8, 0x59c0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbvs_16             , 0xfff8, 0x59c8, { 12,  12,   6,   6,   6}},
	{m68k_op_svs_8_ai            , 0xfff8, 0x59d0, { 12,  12,  10,  10,  10}},
	{m68k_op_svs_8_pi            , 0xfff8, 0x59d8, { 12,  12,  10,  10,  10}},
	{m68k_op_svs_8_pd            , 0xfff8, 0x59e0, { 14,  14,  11,  11,  11}},
	{m68k_op_svs_8_di            , 0xfff8, 0x59e8, { 16,  16,  11,  11,  11}},
	{m68k_op_svs_8_ix            , 0xfff8, 0x59f0, { 18,  18,  13,  13,  13}},
	{m68k_op_spl_8_d             , 0xfff8, 0x5ac0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbpl_16             , 0xfff8, 0x5ac8, { 12,  12,   6,   6,   6}},
	{m68k_op_spl_8_ai            , 0xfff8, 0x5ad0, { 12,  12,  10,  10,  10}},
	{m68k_op_spl_8_pi            , 0xfff8, 0x5ad8, { 12,  12,  10,  10,  10}},
	{m68k_op_spl_8_pd            , 0xfff8, 0x5ae0, { 14,  14,  11,  11,  11}},
	{m68k_op_spl_8_di            , 0xfff8, 0x5ae8, { 16,  16,  11,  11,  11}},
	{m68k_op_spl_8_ix            , 0xfff8, 0x5af0, { 18,  18,  13,  13,  13}},
	{m68k_op_smi_8_d             , 0xfff8, 0x5bc0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbmi_16             , 0xfff8, 0x5bc8, { 12,  12,   6,   6,   6}},
	{m68k_op_smi_8_ai            , 0xfff8, 0x5bd0, { 12,  12,  10,  10,  10}},
	{m68k_op_smi_8_pi            , 0xfff8, 0x5bd8, { 12,  12,  10,  10,  10}},
	{m68k_op_smi_8_pd            , 0xfff8, 0x5be0, { 14,  14,  11,  11,  11}},
	{m68k_op_smi_8_di            , 0xfff8, 0x5be8, { 16,  16,  11,  11,  11}},
	{m68k_op_smi_8_ix            , 0xfff8, 0x5bf0, { 18,  18,  13,  13,  13}},
	{m68k_op_sge_8_d             , 0xfff8, 0x5cc0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbge_16             , 0xfff8, 0x5cc8, { 12,  12,   6,   6,   6}},
	{m68k_op_sge_8_ai            , 0xfff8, 0x5cd0, { 12,  12,  10,  10,  10}},
	{m68k_op_sge_8_pi            , 0xfff8, 0x5cd8, { 12,  12,  10,  10,  10}},
	{m68k_op_sge_8_pd            , 0xfff8, 0x5ce0, { 14,  14,  11,  11,  11}},
	{m68k_op_sge_8_di            , 0xfff8, 0x5ce8, { 16,  16,  11,  11,  11}},
	{m68k_op_sge_8_ix            , 0xfff8, 0x5cf0, { 18,  18,  13,  13,  13}},
	{m68k_op_slt_8_d             , 0xfff8, 0x5dc0, {  4,   4,   4,   4,   4}},
	{m68k_op_dblt_16             , 0xfff8, 0x5dc8, { 12,  12,   6,   6,   6}},
	{m68k_op_slt_8_ai            , 0xfff8, 0x5dd0, { 12,  12,  10,  10,  10}},
	{m68k_op_slt_8_pi            , 0xfff8, 0x5dd8, { 12,  12,  10,  10,  10}},
	{m68k_op_slt_8_pd            , 0xfff8, 0x5de0, { 14,  14,  11,  11,  11}},
	{m68k_op_slt_8_di            , 0xfff8, 0x5de8, { 16,  16,  11,  11,  11}},
	{m68k_op_slt_8_ix            , 0xfff8, 0x5df0, { 18,  18,  13,  13,  13}},
	{m68k_op_sgt_8_d             , 0xfff8, 0x5ec0, {  4,   4,   4,   4,   4}},
	{m68k_op_dbgt_16             , 0xfff8, 0x5ec8, { 12,  12,   6,   6,   6}},
	{m68k_op_sgt_8_ai            , 0xfff8, 0x5ed0, { 12,  12,  10,  10,  10}},
	{m68k_op_sgt_8_pi            , 0xfff8, 0x5ed8, { 12,  12,  10,  10,  10}},
	{m68k_op_sgt_8_pd            , 0xfff8, 0x5ee0, { 14,  14,  11,  11,  11}},
	{m68k_op_sgt_8_di            , 0xfff8, 0x5ee8, { 16,  16,  11,  11,  11}},
	{m68k_op_sgt_8_ix            , 0xfff8, 0x5ef0, { 18,  18,  13,  13,  13}},
	{m68k_op_sle_8_d             , 0xfff8, 0x5fc0, {  4,   4,   4,   4,   4}},
	{m68k_op_dble_16             , 0xfff8, 0x5fc8, { 12,  12,   6,   6,   6}},
	{m68k_op_sle_8_ai            , 0xfff8, 0x5fd0, { 12,  12,  10,  10,  10}},
	{m68k_op_sle_8_pi            , 0xfff8, 0x5fd8, { 12,  12,  10,  10,  10}},
	{m68k_op_sle_8_pd            , 0xfff8, 0x5fe0, { 14,  14,  11,  11,  11}},
	{m68k_op_sle_8_di            , 0xfff8, 0x5fe8, { 16,  16,  11,  11,  11}},
	{m68k_op_sle_8_ix            , 0xfff8, 0x5ff0, { 18,  18,  13,  13,  13}},
	{m68k_op_sbcd_8_mm_ax7       , 0xfff8, 0x8f08, { 18,  18,  16,  16,  16}},
	{m68k_op_subx_8_mm_ax7       , 0xfff8, 0x9f08, { 18,  18,  12,  12,  12}},
	{m68k_op_cmpm_8_ax7          , 0xfff8, 0xbf08, { 12,  12,   9,   9,   9}},
	{m68k_op_abcd_8_mm_ax7       , 0xfff8, 0xcf08, { 18,  18,  16,  16,  16}},
	{m68k_op_addx_8_mm_ax7       , 0xfff8, 0xdf08, { 18,  18,  12,  12,  12}},
	{m68k_op_asr_16_ai           , 0xfff8, 0xe0d0, { 12,  12,   9,   9,   9}},
	{m68k_op_asr_16_pi           , 0xfff8, 0xe0d8, { 12,  12,   9,   9,   9}},
	{m68k_op_asr_16_pd           , 0xfff8, 0xe0e0, { 14,  14,  10,  10,  10}},
	{m68k_op_asr_16_di           , 0xfff8, 0xe0e8, { 16,  16,  10,  10,  10}},
	{m68k_op_asr_16_ix           , 0xfff8, 0xe0f0, { 18,  18,  12,  12,  12}},
	{m68k_op_asl_16_ai           , 0xfff8, 0xe1d0, { 12,  12,  10,  10,  10}},
	{m68k_op_asl_16_pi           , 0xfff8, 0xe1d8, { 12,  12,  10,  10,  10}},
	{m68k_op_asl_16_pd           , 0xfff8, 0xe1e0, { 14,  14,  11,  11,  11}},
	{m68k_op_asl_16_di           , 0xfff8, 0xe1e8, { 16,  16,  11,  11,  11}},
	{m68k_op_asl_16_ix           , 0xfff8, 0xe1f0, { 18,  18,  13,  13,  13}},
	{m68k_op_lsr_16_ai           , 0xfff8, 0xe2d0, { 12,  12,   9,   9,   9}},
	{m68k_op_lsr_16_pi           , 0xfff8, 0xe2d8, { 12,  12,   9,   9,   9}},
	{m68k_op_lsr_16_pd           , 0xfff8, 0xe2e0, { 14,  14,  10,  10,  10}},
	{m68k_op_lsr_16_di           , 0xfff8, 0xe2e8, { 16,  16,  10,  10,  10}},
	{m68k_op_lsr_16_ix           , 0xfff8, 0xe2f0, { 18,  18,  12,  12,  12}},
	{m68k_op_lsl_16_ai           , 0xfff8, 0xe3d0, { 12,  12,   9,   9,   9}},
	{m68k_op_lsl_16_pi           , 0xfff8, 0xe3d8, { 12,  12,   9,   9,   9}},
	{m68k_op_lsl_16_pd           , 0xfff8, 0xe3e0, { 14,  14,  10,  10,  10}},
	{m68k_op_lsl_16_di           , 0xfff8, 0xe3e8, { 16,  16,  10,  10,  10}},
	{m68k_op_lsl_16_ix           , 0xfff8, 0xe3f0, { 18,  18,  12,  12,  12}},
	{m68k_op_roxr_16_ai          , 0xfff8, 0xe4d0, { 12,  12,   9,   9,   9}},
	{m68k_op_roxr_16_pi          , 0xfff8, 0xe4d8, { 12,  12,   9,   9,   9}},
	{m68k_op_roxr_16_pd          , 0xfff8, 0xe4e0, { 14,  14,  10,  10,  10}},
	{m68k_op_roxr_16_di          , 0xfff8, 0xe4e8, { 16,  16,  10,  10,  10}},
	{m68k_op_roxr_16_ix          , 0xfff8, 0xe4f0, { 18,  18,  12,  12,  12}},
	{m68k_op_roxl_16_ai          , 0xfff8, 0xe5d0, { 12,  12,   9,   9,   9}},
	{m68k_op_roxl_16_pi          , 0xfff8, 0xe5d8, { 12,  12,   9,   9,   9}},
	{m68k_op_roxl_16_pd          , 0xfff8, 0xe5e0, { 14,  14,  10,  10,  10}},
	{m68k_op_roxl_16_di          , 0xfff8, 0xe5e8, { 16,  16,  10,  10,  10}},
	{m68k_op_roxl_16_ix          , 0xfff8, 0xe5f0, { 18,  18,  12,  12,  12}},
	{m68k_op_ror_16_ai           , 0xfff8, 0xe6d0, { 12,  12,  11,  11,  11}},
	{m68k_op_ror_16_pi           , 0xfff8, 0xe6d8, { 12,  12,  11,  11,  11}},
	{m68k_op_ror_16_pd           , 0xfff8, 0xe6e0, { 14,  14,  12,  12,  12}},
	{m68k_op_ror_16_di           , 0xfff8, 0xe6e8, { 16,  16,  12,  12,  12}},
	{m68k_op_ror_16_ix           , 0xfff8, 0xe6f0, { 18,  18,  14,  14,  14}},
	{m68k_op_rol_16_ai           , 0xfff8, 0xe7d0, { 12,  12,  11,  11,  11}},
	{m68k_op_rol_16_pi           , 0xfff8, 0xe7d8, { 12,  12,  11,  11,  11}},
	{m68k_op_rol_16_pd           , 0xfff8, 0xe7e0, { 14,  14,  12,  12,  12}},
	{m68k_op_rol_16_di           , 0xfff8, 0xe7e8, { 16,  16,  12,  12,  12}},
	{m68k_op_rol_16_ix           , 0xfff8, 0xe7f0, { 18,  18,  14,  14,  14}},
	{m68k_op_ori_8_pi7           , 0xffff, 0x001f, { 16,  16,   8,   8,   8}},
	{m68k_op_ori_8_pd7           , 0xffff, 0x0027, { 18,  18,   9,   9,   9}},
	{m68k_op_ori_8_aw            , 0xffff, 0x0038, { 20,  20,   8,   8,   8}},
	{m68k_op_ori_8_al            , 0xffff, 0x0039, { 24,  24,   8,   8,   8}},
	{m68k_op_ori_16_toc          , 0xffff, 0x003c, { 20,  16,  12,  12,  12}},
	{m68k_op_ori_16_aw           , 0xffff, 0x0078, { 20,  20,   8,   8,   8}},
	{m68k_op_ori_16_al           , 0xffff, 0x0079, { 24,  24,   8,   8,   8}},
	{m68k_op_ori_16_tos          , 0xffff, 0x007c, { 20,  16,  12,  12,  12}},
	{m68k_op_ori_32_aw           , 0xffff, 0x00b8, { 32,  32,   8,   8,   8}},
	{m68k_op_ori_32_al           , 0xffff, 0x00b9, { 36,  36,   8,   8,   8}},
	{m68k_op_andi_8_pi7          , 0xffff, 0x021f, { 16,  16,   8,   8,   8}},
	{m68k_op_andi_8_pd7          , 0xffff, 0x0227, { 18,  18,   9,   9,   9}},
	{m68k_op_andi_8_aw           , 0xffff, 0x0238, { 20,  20,   8,   8,   8}},
	{m68k_op_andi_8_al           , 0xffff, 0x0239, { 24,  24,   8,   8,   8}},
	{m68k_op_andi_16_toc         , 0xffff, 0x023c, { 20,  16,  12,  12,  12}},
	{m68k_op_andi_16_aw          , 0xffff, 0x0278, { 20,  20,   8,   8,   8}},
	{m68k_op_andi_16_al          , 0xffff, 0x0279, { 24,  24,   8,   8,   8}},
	{m68k_op_andi_16_tos         , 0xffff, 0x027c, { 20,  16,  12,  12,  12}},
	{m68k_op_andi_32_aw          , 0xffff, 0x02b8, { 32,  32,   8,   8,   8}},
	{m68k_op_andi_32_al          , 0xffff, 0x02b9, { 36,  36,   8,   8,   8}},
	{m68k_op_subi_8_pi7          , 0xffff, 0x041f, { 16,  16,   8,   8,   8}},
	{m68k_op_subi_8_pd7          , 0xffff, 0x0427, { 18,  18,   9,   9,   9}},
	{m68k_op_subi_8_aw           , 0xffff, 0x0438, { 20,  20,   8,   8,   8}},
	{m68k_op_subi_8_al           , 0xffff, 0x0439, { 24,  24,   8,   8,   8}},
	{m68k_op_subi_16_aw          , 0xffff, 0x0478, { 20,  20,   8,   8,   8}},
	{m68k_op_subi_16_al          , 0xffff, 0x0479, { 24,  24,   8,   8,   8}},
	{m68k_op_subi_32_aw          , 0xffff, 0x04b8, { 32,  32,   8,   8,   8}},
	{m68k_op_subi_32_al          , 0xffff, 0x04b9, { 36,  36,   8,   8,   8}},
	{m68k_op_addi_8_pi7          , 0xffff, 0x061f, { 16,  16,   8,   8,   8}},
	{m68k_op_addi_8_pd7          , 0xffff, 0x0627, { 18,  18,   9,   9,   9}},
	{m68k_op_addi_8_aw           , 0xffff, 0x0638, { 20,  20,   8,   8,   8}},
	{m68k_op_addi_8_al           , 0xffff, 0x0639, { 24,  24,   8,   8,   8}},
	{m68k_op_addi_16_aw          , 0xffff, 0x0678, { 20,  20,   8,   8,   8}},
	{m68k_op_addi_16_al          , 0xffff, 0x0679, { 24,  24,   8,   8,   8}},
	{m68k_op_addi_32_aw          , 0xffff, 0x06b8, { 32,  32,   8,   8,   8}},
	{m68k_op_addi_32_al          , 0xffff, 0x06b9, { 36,  36,   8,   8,   8}},
	{m68k_op_btst_8_s_pi7        , 0xffff, 0x081f, { 12,  12,   8,   8,   8}},
	{m68k_op_btst_8_s_pd7        , 0xffff, 0x0827, { 14,  14,   9,   9,   9}},
	{m68k_op_btst_8_s_aw         , 0xffff, 0x0838, { 16,  16,   8,   8,   8}},
	{m68k_op_btst_8_s_al         , 0xffff, 0x0839, { 20,  20,   8,   8,   8}},
	{m68k_op_btst_8_s_pcdi       , 0xffff, 0x083a, { 16,  16,   9,   9,   9}},
	{m68k_op_btst_8_s_pcix       , 0xffff, 0x083b, { 18,  18,  11,  11,  11}},
	{m68k_op_bchg_8_s_pi7        , 0xffff, 0x085f, { 16,  16,   8,   8,   8}},
	{m68k_op_bchg_8_s_pd7        , 0xffff, 0x0867, { 18,  18,   9,   9,   9}},
	{m68k_op_bchg_8_s_aw         , 0xffff, 0x0878, { 20,  20,   8,   8,   8}},
	{m68k_op_bchg_8_s_al         , 0xffff, 0x0879, { 24,  24,   8,   8,   8}},
	{m68k_op_bclr_8_s_pi7        , 0xffff, 0x089f, { 16,  16,   8,   8,   8}},
	{m68k_op_bclr_8_s_pd7        , 0xffff, 0x08a7, { 18,  18,   9,   9,   9}},
	{m68k_op_bclr_8_s_aw         , 0xffff, 0x08b8, { 20,  20,   8,   8,   8}},
	{m68k_op_bclr_8_s_al         , 0xffff, 0x08b9, { 24,  24,   8,   8,   8}},
	{m68k_op_bset_8_s_pi7        , 0xffff, 0x08df, { 16,  16,   8,   8,   8}},
	{m68k_op_bset_8_s_pd7        , 0xffff, 0x08e7, { 18,  18,   9,   9,   9}},
	{m68k_op_bset_8_s_aw         , 0xffff, 0x08f8, { 20,  20,   8,   8,   8}},
	{m68k_op_bset_8_s_al         , 0xffff, 0x08f9, { 24,  24,   8,   8,   8}},
	{m68k_op_eori_8_pi7          , 0xffff, 0x0a1f, { 16,  16,   8,   8,   8}},
	{m68k_op_eori_8_pd7          , 0xffff, 0x0a27, { 18,  18,   9,   9,   9}},
	{m68k_op_eori_8_aw           , 0xffff, 0x0a38, { 20,  20,   8,   8,   8}},
	{m68k_op_eori_8_al           , 0xffff, 0x0a39, { 24,  24,   8,   8,   8}},
	{m68k_op_eori_16_toc         , 0xffff, 0x0a3c, { 20,  16,  12,  12,  12}},
	{m68k_op_eori_16_aw          , 0xffff, 0x0a78, { 20,  20,   8,   8,   8}},
	{m68k_op_eori_16_al          , 0xffff, 0x0a79, { 24,  24,   8,   8,   8}},
	{m68k_op_eori_16_tos         , 0xffff, 0x0a7c, { 20,  16,  12,  12,  12}},
	{m68k_op_eori_32_aw          , 0xffff, 0x0ab8, { 32,  32,   8,   8,   8}},
	{m68k_op_eori_32_al          , 0xffff, 0x0ab9, { 36,  36,   8,   8,   8}},
	{m68k_op_cmpi_8_pi7          , 0xffff, 0x0c1f, { 12,  12,   6,   6,   6}},
	{m68k_op_cmpi_8_pd7          , 0xffff, 0x0c27, { 14,  14,   7,   7,   7}},
	{m68k_op_cmpi_8_aw           , 0xffff, 0x0c38, { 16,  16,   6,   6,   6}},
	{m68k_op_cmpi_8_al           , 0xffff, 0x0c39, { 20,  20,   6,   6,   6}},
	{m68k_op_cmpi_16_aw          , 0xffff, 0x0c78, { 16,  16,   6,   6,   6}},
	{m68k_op_cmpi_16_al          , 0xffff, 0x0c79, { 20,  20,   6,   6,   6}},
	{m68k_op_cmpi_32_aw          , 0xffff, 0x0cb8, { 24,  24,   6,   6,   6}},
	{m68k_op_cmpi_32_al          , 0xffff, 0x0cb9, { 28,  28,   6,   6,   6}},
	{m68k_op_move_8_aw_pi7       , 0xffff, 0x11df, { 16,  16,   8,   8,   8}},
	{m68k_op_move_8_aw_pd7       , 0xffff, 0x11e7, { 18,  18,   9,   9,   9}},
	{m68k_op_move_8_aw_aw        , 0xffff, 0x11f8, { 20,  20,   8,   8,   8}},
	{m68k_op_move_8_aw_al        , 0xffff, 0x11f9, { 24,  24,   8,   8,   8}},
	{m68k_op_move_8_aw_pcdi      , 0xffff, 0x11fa, { 20,  20,   9,   9,   9}},
	{m68k_op_move_8_aw_pcix      , 0xffff, 0x11fb, { 22,  22,  11,  11,  11}},
	{m68k_op_move_8_aw_i         , 0xffff, 0x11fc, { 16,  16,   6,   6,   6}},
	{m68k_op_move_8_al_pi7       , 0xffff, 0x13df, { 20,  20,  10,  10,  10}},
	{m68k_op_move_8_al_pd7       , 0xffff, 0x13e7, { 22,  22,  11,  11,  11}},
	{m68k_op_move_8_al_aw        , 0xffff, 0x13f8, { 24,  24,  10,  10,  10}},
	{m68k_op_move_8_al_al        , 0xffff, 0x13f9, { 28,  28,  10,  10,  10}},
	{m68k_op_move_8_al_pcdi      , 0xffff, 0x13fa, { 24,  24,  11,  11,  11}},
	{m68k_op_move_8_al_pcix      , 0xffff, 0x13fb, { 26,  26,  13,  13,  13}},
	{m68k_op_move_8_al_i         , 0xffff, 0x13fc, { 20,  20,   8,   8,   8}},
	{m68k_op_move_8_pi7_pi7      , 0xffff, 0x1edf, { 12,  12,   8,   8,   8}},
	{m68k_op_move_8_pi7_pd7      , 0xffff, 0x1ee7, { 14,  14,   9,   9,   9}},
	{m68k_op_move_8_pi7_aw       , 0xffff, 0x1ef8, { 16,  16,   8,   8,   8}},
	{m68k_op_move_8_pi7_al       , 0xffff, 0x1ef9, { 20,  20,   8,   8,   8}},
	{m68k_op_move_8_pi7_pcdi     , 0xffff, 0x1efa, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_pi7_pcix     , 0xffff, 0x1efb, { 18,  18,  11,  11,  11}},
	{m68k_op_move_8_pi7_i        , 0xffff, 0x1efc, { 12,  12,   6,   6,   6}},
	{m68k_op_move_8_pd7_pi7      , 0xffff, 0x1f1f, { 12,  12,   9,   9,   9}},
	{m68k_op_move_8_pd7_pd7      , 0xffff, 0x1f27, { 14,  14,  10,  10,  10}},
	{m68k_op_move_8_pd7_aw       , 0xffff, 0x1f38, { 16,  16,   9,   9,   9}},
	{m68k_op_move_8_pd7_al       , 0xffff, 0x1f39, { 20,  20,   9,   9,   9}},
	{m68k_op_move_8_pd7_pcdi     , 0xffff, 0x1f3a, { 16,  16,  10,  10,  10}},
	{m68k_op_move_8_pd7_pcix     , 0xffff, 0x1f3b, { 18,  18,  12,  12,  12}},
	{m68k_op_move_8_pd7_i        , 0xffff, 0x1f3c, { 12,  12,   7,   7,   7}},
	{m68k_op_move_32_aw_aw       , 0xffff, 0x21f8, { 28,  28,   8,   8,   8}},
	{m68k_op_move_32_aw_al       , 0xffff, 0x21f9, { 32,  32,   8,   8,   8}},
	{m68k_op_move_32_aw_pcdi     , 0xffff, 0x21fa, { 28,  28,   9,   9,   9}},
	{m68k_op_move_32_aw_pcix     , 0xffff, 0x21fb, { 30,  30,  11,  11,  11}},
	{m68k_op_move_32_aw_i        , 0xffff, 0x21fc, { 24,  24,   8,   8,   8}},
	{m68k_op_move_32_al_aw       , 0xffff, 0x23f8, { 32,  32,  10,  10,  10}},
	{m68k_op_move_32_al_al       , 0xffff, 0x23f9, { 36,  36,  10,  10,  10}},
	{m68k_op_move_32_al_pcdi     , 0xffff, 0x23fa, { 32,  32,  11,  11,  11}},
	{m68k_op_move_32_al_pcix     , 0xffff, 0x23fb, { 34,  34,  13,  13,  13}},
	{m68k_op_move_32_al_i        , 0xffff, 0x23fc, { 28,  28,  10,  10,  10}},
	{m68k_op_move_16_aw_aw       , 0xffff, 0x31f8, { 20,  20,   8,   8,   8}},
	{m68k_op_move_16_aw_al       , 0xffff, 0x31f9, { 24,  24,   8,   8,   8}},
	{m68k_op_move_16_aw_pcdi     , 0xffff, 0x31fa, { 20,  20,   9,   9,   9}},
	{m68k_op_move_16_aw_pcix     , 0xffff, 0x31fb, { 22,  22,  11,  11,  11}},
	{m68k_op_move_16_aw_i        , 0xffff, 0x31fc, { 16,  16,   6,   6,   6}},
	{m68k_op_move_16_al_aw       , 0xffff, 0x33f8, { 24,  24,  10,  10,  10}},
	{m68k_op_move_16_al_al       , 0xffff, 0x33f9, { 28,  28,  10,  10,  10}},
	{m68k_op_move_16_al_pcdi     , 0xffff, 0x33fa, { 24,  24,  11,  11,  11}},
	{m68k_op_move_16_al_pcix     , 0xffff, 0x33fb, { 26,  26,  13,  13,  13}},
	{m68k_op_move_16_al_i        , 0xffff, 0x33fc, { 20,  20,   8,   8,   8}},
	{m68k_op_negx_8_pi7          , 0xffff, 0x401f, { 12,  12,   8,   8,   8}},
	{m68k_op_negx_8_pd7          , 0xffff, 0x4027, { 14,  14,   9,   9,   9}},
	{m68k_op_negx_8_aw           , 0xffff, 0x4038, { 16,  16,   8,   8,   8}},
	{m68k_op_negx_8_al           , 0xffff, 0x4039, { 20,  20,   8,   8,   8}},
	{m68k_op_negx_16_aw          , 0xffff, 0x4078, { 16,  16,   8,   8,   8}},
	{m68k_op_negx_16_al          , 0xffff, 0x4079, { 20,  20,   8,   8,   8}},
	{m68k_op_negx_32_aw          , 0xffff, 0x40b8, { 24,  24,   8,   8,   8}},
	{m68k_op_negx_32_al          , 0xffff, 0x40b9, { 28,  28,   8,   8,   8}},
	{m68k_op_move_16_frs_aw      , 0xffff, 0x40f8, { 16,  16,  12,  12,  12}},
	{m68k_op_move_16_frs_al      , 0xffff, 0x40f9, { 20,  20,  12,  12,  12}},
	{m68k_op_clr_8_pi7           , 0xffff, 0x421f, { 12,   8,   8,   8,   8}},
	{m68k_op_clr_8_pd7           , 0xffff, 0x4227, { 14,  10,   9,   9,   9}},
	{m68k_op_clr_8_aw            , 0xffff, 0x4238, { 16,  12,   8,   8,   8}},
	{m68k_op_clr_8_al            , 0xffff, 0x4239, { 20,  14,   8,   8,   8}},
	{m68k_op_clr_16_aw           , 0xffff, 0x4278, { 16,  12,   8,   8,   8}},
	{m68k_op_clr_16_al           , 0xffff, 0x4279, { 20,  14,   8,   8,   8}},
	{m68k_op_clr_32_aw           , 0xffff, 0x42b8, { 24,  16,   8,   8,   8}},
	{m68k_op_clr_32_al           , 0xffff, 0x42b9, { 28,  20,   8,   8,   8}},
	{m68k_op_neg_8_pi7           , 0xffff, 0x441f, { 12,  12,   8,   8,   8}},
	{m68k_op_neg_8_pd7           , 0xffff, 0x4427, { 14,  14,   9,   9,   9}},
	{m68k_op_neg_8_aw            , 0xffff, 0x4438, { 16,  16,   8,   8,   8}},
	{m68k_op_neg_8_al            , 0xffff, 0x4439, { 20,  20,   8,   8,   8}},
	{m68k_op_neg_16_aw           , 0xffff, 0x4478, { 16,  16,   8,   8,   8}},
	{m68k_op_neg_16_al           , 0xffff, 0x4479, { 20,  20,   8,   8,   8}},
	{m68k_op_neg_32_aw           , 0xffff, 0x44b8, { 24,  24,   8,   8,   8}},
	{m68k_op_neg_32_al           , 0xffff, 0x44b9, { 28,  28,   8,   8,   8}},
	{m68k_op_move_16_toc_aw      , 0xffff, 0x44f8, { 20,  20,   8,   8,   8}},
	{m68k_op_move_16_toc_al      , 0xffff, 0x44f9, { 24,  24,   8,   8,   8}},
	{m68k_op_move_16_toc_pcdi    , 0xffff, 0x44fa, { 20,  20,   9,   9,   9}},
	{m68k_op_move_16_toc_pcix    , 0xffff, 0x44fb, { 22,  22,  11,  11,  11}},
	{m68k_op_move_16_toc_i       , 0xffff, 0x44fc, { 16,  16,   6,   6,   6}},
	{m68k_op_not_8_pi7           , 0xffff, 0x461f, { 12,  12,   8,   8,   8}},
	{m68k_op_not_8_pd7           , 0xffff, 0x4627, { 14,  14,   9,   9,   9}},
	{m68k_op_not_8_aw            , 0xffff, 0x4638, { 16,  16,   8,   8,   8}},
	{m68k_op_not_8_al            , 0xffff, 0x4639, { 20,  20,   8,   8,   8}},
	{m68k_op_not_16_aw           , 0xffff, 0x4678, { 16,  16,   8,   8,   8}},
	{m68k_op_not_16_al           , 0xffff, 0x4679, { 20,  20,   8,   8,   8}},
	{m68k_op_not_32_aw           , 0xffff, 0x46b8, { 24,  24,   8,   8,   8}},
	{m68k_op_not_32_al           , 0xffff, 0x46b9, { 28,  28,   8,   8,   8}},
	{m68k_op_move_16_tos_aw      , 0xffff, 0x46f8, { 20,  20,  12,  12,  12}},
	{m68k_op_move_16_tos_al      , 0xffff, 0x46f9, { 24,  24,  12,  12,  12}},
	{m68k_op_move_16_tos_pcdi    , 0xffff, 0x46fa, { 20,  20,  13,  13,  13}},
	{m68k_op_move_16_tos_pcix    , 0xffff, 0x46fb, { 22,  22,  15,  15,  15}},
	{m68k_op_move_16_tos_i       , 0xffff, 0x46fc, { 16,  16,  10,  10,  10}},
	{m68k_op_nbcd_8_pi7          , 0xffff, 0x481f, { 12,  12,  10,  10,  10}},
	{m68k_op_nbcd_8_pd7          , 0xffff, 0x4827, { 14,  14,  11,  11,  11}},
	{m68k_op_nbcd_8_aw           , 0xffff, 0x4838, { 16,  16,  10,  10,  10}},
	{m68k_op_nbcd_8_al           , 0xffff, 0x4839, { 20,  20,  10,  10,  10}},
	{m68k_op_pea_32_aw           , 0xffff, 0x4878, { 16,  16,   9,   9,   9}},
	{m68k_op_pea_32_al           , 0xffff, 0x4879, { 20,  20,   9,   9,   9}},
	{m68k_op_pea_32_pcdi         , 0xffff, 0x487a, { 16,  16,  10,  10,  10}},
	{m68k_op_pea_32_pcix         , 0xffff, 0x487b, { 20,  20,  12,  12,  12}},
	{m68k_op_movem_16_re_aw      , 0xffff, 0x48b8, { 12,  12,   8,   8,   8}},
	{m68k_op_movem_16_re_al      , 0xffff, 0x48b9, { 16,  16,   8,   8,   8}},
	{m68k_op_movem_32_re_aw      , 0xffff, 0x48f8, { 12,  12,   8,   8,   8}},
	{m68k_op_movem_32_re_al      , 0xffff, 0x48f9, { 16,  16,   8,   8,   8}},
	{m68k_op_tst_8_pi7           , 0xffff, 0x4a1f, {  8,   8,   6,   6,   6}},
	{m68k_op_tst_8_pd7           , 0xffff, 0x4a27, { 10,  10,   7,   7,   7}},
	{m68k_op_tst_8_aw            , 0xffff, 0x4a38, { 12,  12,   6,   6,   6}},
	{m68k_op_tst_8_al            , 0xffff, 0x4a39, { 16,  16,   6,   6,   6}},
	{m68k_op_tst_16_aw           , 0xffff, 0x4a78, { 12,  12,   6,   6,   6}},
	{m68k_op_tst_16_al           , 0xffff, 0x4a79, { 16,  16,   6,   6,   6}},
	{m68k_op_tst_32_aw           , 0xffff, 0x4ab8, { 16,  16,   6,   6,   6}},
	{m68k_op_tst_32_al           , 0xffff, 0x4ab9, { 20,  20,   6,   6,   6}},
	{m68k_op_tas_8_pi7           , 0xffff, 0x4adf, { 18,  18,  16,  16,  16}},
	{m68k_op_tas_8_pd7           , 0xffff, 0x4ae7, { 20,  20,  17,  17,  17}},
	{m68k_op_tas_8_aw            , 0xffff, 0x4af8, { 22,  22,  16,  16,  16}},
	{m68k_op_tas_8_al            , 0xffff, 0x4af9, { 26,  26,  16,  16,  16}},
	{m68k_op_illegal             , 0xffff, 0x4afc, {  4,   4,   4,   4,   4}},
	{m68k_op_movem_16_er_aw      , 0xffff, 0x4cb8, { 16,  16,  12,  12,  12}},
	{m68k_op_movem_16_er_al      , 0xffff, 0x4cb9, { 20,  20,  12,  12,  12}},
	{m68k_op_movem_16_er_pcdi    , 0xffff, 0x4cba, { 16,  16,   9,   9,   9}},
	{m68k_op_movem_16_er_pcix    , 0xffff, 0x4cbb, { 18,  18,  11,  11,  11}},
	{m68k_op_movem_32_er_aw      , 0xffff, 0x4cf8, { 16,  16,  12,  12,  12}},
	{m68k_op_movem_32_er_al      , 0xffff, 0x4cf9, { 20,  20,  12,  12,  12}},
	{m68k_op_movem_32_er_pcdi    , 0xffff, 0x4cfa, { 16,  16,   9,   9,   9}},
	{m68k_op_movem_32_er_pcix    , 0xffff, 0x4cfb, { 18,  18,  11,  11,  11}},
	{m68k_op_link_16_a7          , 0xffff, 0x4e57, { 16,  16,   5,   5,   5}},
	{m68k_op_unlk_32_a7          , 0xffff, 0x4e5f, { 12,  12,   6,   6,   6}},
	{m68k_op_reset               , 0xffff, 0x4e70, {  0,   0,   0,   0,   0}},
	{m68k_op_nop                 , 0xffff, 0x4e71, {  4,   4,   2,   2,   2}},
	{m68k_op_stop                , 0xffff, 0x4e72, {  4,   4,   8,   8,   8}},
	{m68k_op_rte_32              , 0xffff, 0x4e73, { 20,  24,  20,  20,  20}},
	{m68k_op_rts_32              , 0xffff, 0x4e75, { 16,  16,  10,  10,  10}},
	{m68k_op_trapv               , 0xffff, 0x4e76, {  4,   4,   4,   4,   4}},
	{m68k_op_rtr_32              , 0xffff, 0x4e77, { 20,  20,  14,  14,  14}},
	{m68k_op_jsr_32_aw           , 0xffff, 0x4eb8, { 18,  18,   4,   4,   4}},
	{m68k_op_jsr_32_al           , 0xffff, 0x4eb9, { 20,  20,   4,   4,   4}},
	{m68k_op_jsr_32_pcdi         , 0xffff, 0x4eba, { 18,  18,   5,   5,   5}},
	{m68k_op_jsr_32_pcix         , 0xffff, 0x4ebb, { 22,  22,   7,   7,   7}},
	{m68k_op_jmp_32_aw           , 0xffff, 0x4ef8, { 10,  10,   4,   4,   4}},
	{m68k_op_jmp_32_al           , 0xffff, 0x4ef9, { 12,  12,   4,   4,   4}},
	{m68k_op_jmp_32_pcdi         , 0xffff, 0x4efa, { 10,  10,   5,   5,   5}},
	{m68k_op_jmp_32_pcix         , 0xffff, 0x4efb, { 14,  14,   7,   7,   7}},
	{m68k_op_st_8_pi7            , 0xffff, 0x50df, { 12,  12,  10,  10,  10}},
	{m68k_op_st_8_pd7            , 0xffff, 0x50e7, { 14,  14,  11,  11,  11}},
	{m68k_op_st_8_aw             , 0xffff, 0x50f8, { 16,  16,  10,  10,  10}},
	{m68k_op_st_8_al             , 0xffff, 0x50f9, { 20,  20,  10,  10,  10}},
	{m68k_op_sf_8_pi7            , 0xffff, 0x51df, { 12,  12,  10,  10,  10}},
	{m68k_op_sf_8_pd7            , 0xffff, 0x51e7, { 14,  14,  11,  11,  11}},
	{m68k_op_sf_8_aw             , 0xffff, 0x51f8, { 16,  16,  10,  10,  10}},
	{m68k_op_sf_8_al             , 0xffff, 0x51f9, { 20,  20,  10,  10,  10}},
	{m68k_op_shi_8_pi7           , 0xffff, 0x52df, { 12,  12,  10,  10,  10}},
	{m68k_op_shi_8_pd7           , 0xffff, 0x52e7, { 14,  14,  11,  11,  11}},
	{m68k_op_shi_8_aw            , 0xffff, 0x52f8, { 16,  16,  10,  10,  10}},
	{m68k_op_shi_8_al            , 0xffff, 0x52f9, { 20,  20,  10,  10,  10}},
	{m68k_op_sls_8_pi7           , 0xffff, 0x53df, { 12,  12,  10,  10,  10}},
	{m68k_op_sls_8_pd7           , 0xffff, 0x53e7, { 14,  14,  11,  11,  11}},
	{m68k_op_sls_8_aw            , 0xffff, 0x53f8, { 16,  16,  10,  10,  10}},
	{m68k_op_sls_8_al            , 0xffff, 0x53f9, { 20,  20,  10,  10,  10}},
	{m68k_op_scc_8_pi7           , 0xffff, 0x54df, { 12,  12,  10,  10,  10}},
	{m68k_op_scc_8_pd7           , 0xffff, 0x54e7, { 14,  14,  11,  11,  11}},
	{m68k_op_scc_8_aw            , 0xffff, 0x54f8, { 16,  16,  10,  10,  10}},
	{m68k_op_scc_8_al            , 0xffff, 0x54f9, { 20,  20,  10,  10,  10}},
	{m68k_op_scs_8_pi7           , 0xffff, 0x55df, { 12,  12,  10,  10,  10}},
	{m68k_op_scs_8_pd7           , 0xffff, 0x55e7, { 14,  14,  11,  11,  11}},
	{m68k_op_scs_8_aw            , 0xffff, 0x55f8, { 16,  16,  10,  10,  10}},
	{m68k_op_scs_8_al            , 0xffff, 0x55f9, { 20,  20,  10,  10,  10}},
	{m68k_op_sne_8_pi7           , 0xffff, 0x56df, { 12,  12,  10,  10,  10}},
	{m68k_op_sne_8_pd7           , 0xffff, 0x56e7, { 14,  14,  11,  11,  11}},
	{m68k_op_sne_8_aw            , 0xffff, 0x56f8, { 16,  16,  10,  10,  10}},
	{m68k_op_sne_8_al            , 0xffff, 0x56f9, { 20,  20,  10,  10,  10}},
	{m68k_op_seq_8_pi7           , 0xffff, 0x57df, { 12,  12,  10,  10,  10}},
	{m68k_op_seq_8_pd7           , 0xffff, 0x57e7, { 14,  14,  11,  11,  11}},
	{m68k_op_seq_8_aw            , 0xffff, 0x57f8, { 16,  16,  10,  10,  10}},
	{m68k_op_seq_8_al            , 0xffff, 0x57f9, { 20,  20,  10,  10,  10}},
	{m68k_op_svc_8_pi7           , 0xffff, 0x58df, { 12,  12,  10,  10,  10}},
	{m68k_op_svc_8_pd7           , 0xffff, 0x58e7, { 14,  14,  11,  11,  11}},
	{m68k_op_svc_8_aw            , 0xffff, 0x58f8, { 16,  16,  10,  10,  10}},
	{m68k_op_svc_8_al            , 0xffff, 0x58f9, { 20,  20,  10,  10,  10}},
	{m68k_op_svs_8_pi7           , 0xffff, 0x59df, { 12,  12,  10,  10,  10}},
	{m68k_op_svs_8_pd7           , 0xffff, 0x59e7, { 14,  14,  11,  11,  11}},
	{m68k_op_svs_8_aw            , 0xffff, 0x59f8, { 16,  16,  10,  10,  10}},
	{m68k_op_svs_8_al            , 0xffff, 0x59f9, { 20,  20,  10,  10,  10}},
	{m68k_op_spl_8_pi7           , 0xffff, 0x5adf, { 12,  12,  10,  10,  10}},
	{m68k_op_spl_8_pd7           , 0xffff, 0x5ae7, { 14,  14,  11,  11,  11}},
	{m68k_op_spl_8_aw            , 0xffff, 0x5af8, { 16,  16,  10,  10,  10}},
	{m68k_op_spl_8_al            , 0xffff, 0x5af9, { 20,  20,  10,  10,  10}},
	{m68k_op_smi_8_pi7           , 0xffff, 0x5bdf, { 12,  12,  10,  10,  10}},
	{m68k_op_smi_8_pd7           , 0xffff, 0x5be7, { 14,  14,  11,  11,  11}},
	{m68k_op_smi_8_aw            , 0xffff, 0x5bf8, { 16,  16,  10,  10,  10}},
	{m68k_op_smi_8_al            , 0xffff, 0x5bf9, { 20,  20,  10,  10,  10}},
	{m68k_op_sge_8_pi7           , 0xffff, 0x5cdf, { 12,  12,  10,  10,  10}},
	{m68k_op_sge_8_pd7           , 0xffff, 0x5ce7, { 14,  14,  11,  11,  11}},
	{m68k_op_sge_8_aw            , 0xffff, 0x5cf8, { 16,  16,  10,  10,  10}},
	{m68k_op_sge_8_al            , 0xffff, 0x5cf9, { 20,  20,  10,  10,  10}},
	{m68k_op_slt_8_pi7           , 0xffff, 0x5ddf, { 12,  12,  10,  10,  10}},
	{m68k_op_slt_8_pd7           , 0xffff, 0x5de7, { 14,  14,  11,  11,  11}},
	{m68k_op_slt_8_aw            , 0xffff, 0x5df8, { 16,  16,  10,  10,  10}},
	{m68k_op_slt_8_al            , 0xffff, 0x5df9, { 20,  20,  10,  10,  10}},
	{m68k_op_sgt_8_pi7           , 0xffff, 0x5edf, { 12,  12,  10,  10,  10}},
	{m68k_op_sgt_8_pd7           , 0xffff, 0x5ee7, { 14,  14,  11,  11,  11}},
	{m68k_op_sgt_8_aw            , 0xffff, 0x5ef8, { 16,  16,  10,  10,  10}},
	{m68k_op_sgt_8_al            , 0xffff, 0x5ef9, { 20,  20,  10,  10,  10}},
	{m68k_op_sle_8_pi7           , 0xffff, 0x5fdf, { 12,  12,  10,  10,  10}},
	{m68k_op_sle_8_pd7           , 0xffff, 0x5fe7, { 14,  14,  11,  11,  11}},
	{m68k_op_sle_8_aw            , 0xffff, 0x5ff8, { 16,  16,  10,  10,  10}},
	{m68k_op_sle_8_al            , 0xffff, 0x5ff9, { 20,  20,  10,  10,  10}},
	{m68k_op_bra_16              , 0xffff, 0x6000, { 10,  10,  10,  10,  10}},
	{m68k_op_bra_32              , 0xffff, 0x60ff, { 10,  10,  10,  10,  10}},
	{m68k_op_bsr_16              , 0xffff, 0x6100, { 18,  18,   7,   7,   7}},
	{m68k_op_bsr_32              , 0xffff, 0x61ff, { 18,  18,   7,   7,   7}},
	{m68k_op_bhi_16              , 0xffff, 0x6200, { 10,  10,   6,   6,   6}},
	{m68k_op_bhi_32              , 0xffff, 0x62ff, { 10,  10,   6,   6,   6}},
	{m68k_op_bls_16              , 0xffff, 0x6300, { 10,  10,   6,   6,   6}},
	{m68k_op_bls_32              , 0xffff, 0x63ff, { 10,  10,   6,   6,   6}},
	{m68k_op_bcc_16              , 0xffff, 0x6400, { 10,  10,   6,   6,   6}},
	{m68k_op_bcc_32              , 0xffff, 0x64ff, { 10,  10,   6,   6,   6}},
	{m68k_op_bcs_16              , 0xffff, 0x6500, { 10,  10,   6,   6,   6}},
	{m68k_op_bcs_32              , 0xffff, 0x65ff, { 10,  10,   6,   6,   6}},
	{m68k_op_bne_16              , 0xffff, 0x6600, { 10,  10,   6,   6,   6}},
	{m68k_op_bne_32              , 0xffff, 0x66ff, { 10,  10,   6,   6,   6}},
	{m68k_op_beq_16              , 0xffff, 0x6700, { 10,  10,   6,   6,   6}},
	{m68k_op_beq_32              , 0xffff, 0x67ff, { 10,  10,   6,   6,   6}},
	{m68k_op_bvc_16              , 0xffff, 0x6800, { 10,  10,   6,   6,   6}},
	{m68k_op_bvc_32              , 0xffff, 0x68ff, { 10,  10,   6,   6,   6}},
	{m68k_op_bvs_16              , 0xffff, 0x6900, { 10,  10,   6,   6,   6}},
	{m68k_op_bvs_32              , 0xffff, 0x69ff, { 10,  10,   6,   6,   6}},
	{m68k_op_bpl_16              , 0xffff, 0x6a00, { 10,  10,   6,   6,   6}},
	{m68k_op_bpl_32              , 0xffff, 0x6aff, { 10,  10,   6,   6,   6}},
	{m68k_op_bmi_16              , 0xffff, 0x6b00, { 10,  10,   6,   6,   6}},
	{m68k_op_bmi_32              , 0xffff, 0x6bff, { 10,  10,   6,   6,   6}},
	{m68k_op_bge_16              , 0xffff, 0x6c00, { 10,  10,   6,   6,   6}},
	{m68k_op_bge_32              , 0xffff, 0x6cff, { 10,  10,   6,   6,   6}},
	{m68k_op_blt_16              , 0xffff, 0x6d00, { 10,  10,   6,   6,   6}},
	{m68k_op_blt_32              , 0xffff, 0x6dff, { 10,  10,   6,   6,   6}},
	{m68k_op_bgt_16              , 0xffff, 0x6e00, { 10,  10,   6,   6,   6}},
	{m68k_op_bgt_32              , 0xffff, 0x6eff, { 10,  10,   6,   6,   6}},
	{m68k_op_ble_16              , 0xffff, 0x6f00, { 10,  10,   6,   6,   6}},
	{m68k_op_ble_32              , 0xffff, 0x6fff, { 10,  10,   6,   6,   6}},
	{m68k_op_sbcd_8_mm_axy7      , 0xffff, 0x8f0f, { 18,  18,  16,  16,  16}},
	{m68k_op_subx_8_mm_axy7      , 0xffff, 0x9f0f, { 18,  18,  12,  12,  12}},
	{m68k_op_cmpm_8_axy7         , 0xffff, 0xbf0f, { 12,  12,   9,   9,   9}},
	{m68k_op_abcd_8_mm_axy7      , 0xffff, 0xcf0f, { 18,  18,  16,  16,  16}},
	{m68k_op_addx_8_mm_axy7      , 0xffff, 0xdf0f, { 18,  18,  12,  12,  12}},
	{m68k_op_asr_16_aw           , 0xffff, 0xe0f8, { 16,  16,   9,   9,   9}},
	{m68k_op_asr_16_al           , 0xffff, 0xe0f9, { 20,  20,   9,   9,   9}},
	{m68k_op_asl_16_aw           , 0xffff, 0xe1f8, { 16,  16,  10,  10,  10}},
	{m68k_op_asl_16_al           , 0xffff, 0xe1f9, { 20,  20,  10,  10,  10}},
	{m68k_op_lsr_16_aw           , 0xffff, 0xe2f8, { 16,  16,   9,   9,   9}},
	{m68k_op_lsr_16_al           , 0xffff, 0xe2f9, { 20,  20,   9,   9,   9}},
	{m68k_op_lsl_16_aw           , 0xffff, 0xe3f8, { 16,  16,   9,   9,   9}},
	{m68k_op_lsl_16_al           , 0xffff, 0xe3f9, { 20,  20,   9,   9,   9}},
	{m68k_op_roxr_16_aw          , 0xffff, 0xe4f8, { 16,  16,   9,   9,   9}},
	{m68k_op_roxr_16_al          , 0xffff, 0xe4f9, { 20,  20,   9,   9,   9}},
	{m68k_op_roxl_16_aw          , 0xffff, 0xe5f8, { 16,  16,   9,   9,   9}},
	{m68k_op_roxl_16_al          , 0xffff, 0xe5f9, { 20,  20,   9,   9,   9}},
	{m68k_op_ror_16_aw           , 0xffff, 0xe6f8, { 16,  16,  11,  11,  11}},
	{m68k_op_ror_16_al           , 0xffff, 0xe6f9, { 20,  20,  11,  11,  11}},
	{m68k_op_rol_16_aw           , 0xffff, 0xe7f8, { 16,  16,  11,  11,  11}},
	{m68k_op_rol_16_al           , 0xffff, 0xe7f9, { 20,  20,  11,  11,  11}},
	{0, 0, 0, {0, 0, 0, 0, 0}}
};


/* Build the opcode handler jump table */
void m68ki_build_opcode_table(struct m68k_module *module)
{
	const opcode_handler_struct *ostruct;
	int cycle_cost;
	int instr;
	int i;
	int j;
	int k;

	for(i = 0; i < 0x10000; i++)
	{
		/* default to illegal */
		module->m68ki_instruction_jump_table[i] = m68k_op_illegal;
		for(k=0;k<NUM_CPU_TYPES;k++)
			module->m68ki_cycles[k][i] = 0;
	}

	ostruct = m68k_opcode_handler_table;
	while(ostruct->mask != 0xff00)
	{
		for(i = 0;i < 0x10000;i++)
		{
			if((i & ostruct->mask) == ostruct->match)
			{
				module->m68ki_instruction_jump_table[i] = ostruct->opcode_handler;
				for(k=0;k<NUM_CPU_TYPES;k++)
					module->m68ki_cycles[k][i] = ostruct->cycles[k];
			}
		}
		ostruct++;
	}
	while(ostruct->mask == 0xff00)
	{
		for(i = 0;i <= 0xff;i++)
		{
			module->m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler;
			for(k=0;k<NUM_CPU_TYPES;k++)
				module->m68ki_cycles[k][ostruct->match | i] = ostruct->cycles[k];
		}
		ostruct++;
	}
	while(ostruct->mask == 0xf1f8)
	{
		for(i = 0;i < 8;i++)
		{
			for(j = 0;j < 8;j++)
			{
				instr = ostruct->match | (i << 9) | j;
				module->m68ki_instruction_jump_table[instr] = ostruct->opcode_handler;
				for(k=0;k<NUM_CPU_TYPES;k++)
					module->m68ki_cycles[k][instr] = ostruct->cycles[k];
				// For all shift operations with known shift distance (encoded in instruction word)
				if((instr & 0xf000) == 0xe000 && (!(instr & 0x20)))
				{
					// On the 68000 and 68010 shift distance affect execution time.
					// Add the cycle cost of shifting; 2 times the shift distance
					cycle_cost = ((((i-1)&7)+1)<<1);
					module->m68ki_cycles[0][instr] += cycle_cost;
					module->m68ki_cycles[1][instr] += cycle_cost;
					// On the 68020 shift distance does not affect execution time
					module->m68ki_cycles[2][instr] += 0;
				}
			}
		}
		ostruct++;
	}
	while(ostruct->mask == 0xfff0)
	{
		for(i = 0;i <= 0x0f;i++)
		{
			module->m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler;
			for(k=0;k<NUM_CPU_TYPES;k++)
				module->m68ki_cycles[k][ostruct->match | i] = ostruct->cycles[k];
		}
		ostruct++;
	}
	while(ostruct->mask == 0xf1ff)
	{
		for(i = 0;i <= 0x07;i++)
		{
			module->m68ki_instruction_jump_table[ostruct->match | (i << 9)] = ostruct->opcode_handler;
			for(k=0;k<NUM_CPU_TYPES;k++)
				module->m68ki_cycles[k][ostruct->match | (i << 9)] = ostruct->cycles[k];
		}
		ostruct++;
	}
	while(ostruct->mask == 0xfff8)
	{
		for(i = 0;i <= 0x07;i++)
		{
			module->m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler;
			for(k=0;k<NUM_CPU_TYPES;k++)
				module->m68ki_cycles[k][ostruct->match | i] = ostruct->cycles[k];
		}
		ostruct++;
	}
	while(ostruct->mask == 0xffff)
	{
		module->m68ki_instruction_jump_table[ostruct->match] = ostruct->opcode_handler;
		for(k=0;k<NUM_CPU_TYPES;k++)
			module->m68ki_cycles[k][ostruct->match] = ostruct->cycles[k];
		ostruct++;
	}
}


/* ======================================================================== */
/* ============================== END OF FILE ============================= */
/* ======================================================================== */


