From: Dimitris Panokostas Date: Mon, 8 Jun 2026 20:05:42 +0000 (-0700) Subject: jit: split x86 compiler files into platform directory X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=62c2c8f57401a99812f43e5f8a71371698604936;p=francis%2Fwinuae.git jit: split x86 compiler files into platform directory Keep the root JIT files as dispatchers and move the x86 compiler implementation under jit/x86. This mirrors the Amiberry split and keeps platform-specific JIT code out of the shared wrapper files. Update the x86 generator paths so regenerated x86 tables do not overwrite the root dispatchers. --- diff --git a/jit/compemu.cpp b/jit/compemu.cpp index c7a9da64..6bc29f23 100644 --- a/jit/compemu.cpp +++ b/jit/compemu.cpp @@ -1,103786 +1,7 @@ -#if defined(CPU_AARCH64) || defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#if defined(CPU_arm) || defined(CPU_AARCH64) || defined(__aarch64__) || \ + defined(_M_ARM64) || defined(_M_ARM64EC) #include "arm/compemu_arm.cpp" -#else -#include "sysconfig.h" -#if defined(JIT) -#include "sysdeps.h" -#include "options.h" -#include "uae/memory.h" -#include "readcpu.h" -#include "newcpu.h" -#include "comptbl.h" -#include "debug.h" -#include "jit/compemu.h" -#include "jit/flags_x86.h" - -#if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) -#define PART_1 1 -#define PART_2 1 -#define PART_3 1 -#define PART_4 1 -#define PART_5 1 -#define PART_6 1 -#define PART_7 1 -#define PART_8 1 -#endif -#endif /* CPU_AARCH64 */ - -#ifdef USE_JIT_FPU -extern void comp_fpp_opp(); -extern void comp_fscc_opp(); -extern void comp_fbcc_opp(); -#endif - -#ifdef PART_1 -/* OR.B #.B,Dn */ -uae_u32 REGPARAM2 op_0_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(An) */ -uae_u32 REGPARAM2 op_10_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_18_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,-(An) */ -uae_u32 REGPARAM2 op_20_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_28_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_30_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_38_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_39_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,Dn */ -uae_u32 REGPARAM2 op_40_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(An) */ -uae_u32 REGPARAM2 op_50_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_58_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,-(An) */ -uae_u32 REGPARAM2 op_60_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_68_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_70_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_78_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_79_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,Dn */ -uae_u32 REGPARAM2 op_80_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(An) */ -uae_u32 REGPARAM2 op_90_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_98_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,-(An) */ -uae_u32 REGPARAM2 op_a0_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_a8_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_b0_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_b8_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_b9_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.L Dn,Dn */ -uae_u32 REGPARAM2 op_100_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(An) */ -uae_u32 REGPARAM2 op_110_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_118_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,-(An) */ -uae_u32 REGPARAM2 op_120_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_128_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_130_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_138_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_139_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(d16,PC) */ -uae_u32 REGPARAM2 op_13a_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_13b_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,#.B */ -uae_u32 REGPARAM2 op_13c_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = scratchie++; - mov_l_ri(dst, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.L Dn,Dn */ -uae_u32 REGPARAM2 op_140_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(An) */ -uae_u32 REGPARAM2 op_150_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_158_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,-(An) */ -uae_u32 REGPARAM2 op_160_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_168_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_170_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_178_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_179_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.L Dn,Dn */ -uae_u32 REGPARAM2 op_180_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(An) */ -uae_u32 REGPARAM2 op_190_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_198_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,-(An) */ -uae_u32 REGPARAM2 op_1a0_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_1a8_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_1b0_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_1b8_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_1b9_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.L Dn,Dn */ -uae_u32 REGPARAM2 op_1c0_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(An) */ -uae_u32 REGPARAM2 op_1d0_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_1d8_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,-(An) */ -uae_u32 REGPARAM2 op_1e0_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_1e8_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_1f0_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_1f8_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_1f9_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,Dn */ -uae_u32 REGPARAM2 op_200_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(An) */ -uae_u32 REGPARAM2 op_210_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_218_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,-(An) */ -uae_u32 REGPARAM2 op_220_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_228_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_230_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_238_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_239_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,Dn */ -uae_u32 REGPARAM2 op_240_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(An) */ -uae_u32 REGPARAM2 op_250_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_258_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,-(An) */ -uae_u32 REGPARAM2 op_260_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_268_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_270_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_278_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_279_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,Dn */ -uae_u32 REGPARAM2 op_280_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(An) */ -uae_u32 REGPARAM2 op_290_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_298_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,-(An) */ -uae_u32 REGPARAM2 op_2a0_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_2a8_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_2b0_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_2b8_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_2b9_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,Dn */ -uae_u32 REGPARAM2 op_400_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(An) */ -uae_u32 REGPARAM2 op_410_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_418_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,-(An) */ -uae_u32 REGPARAM2 op_420_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_428_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_430_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_438_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_439_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,Dn */ -uae_u32 REGPARAM2 op_440_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(An) */ -uae_u32 REGPARAM2 op_450_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_458_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,-(An) */ -uae_u32 REGPARAM2 op_460_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_468_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_470_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_478_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_479_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,Dn */ -uae_u32 REGPARAM2 op_480_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(An) */ -uae_u32 REGPARAM2 op_490_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_498_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,-(An) */ -uae_u32 REGPARAM2 op_4a0_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_4a8_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_4b0_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_4b8_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_4b9_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,Dn */ -uae_u32 REGPARAM2 op_600_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(An) */ -uae_u32 REGPARAM2 op_610_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_618_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,-(An) */ -uae_u32 REGPARAM2 op_620_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_628_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_630_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_638_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_639_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,Dn */ -uae_u32 REGPARAM2 op_640_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(An) */ -uae_u32 REGPARAM2 op_650_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_658_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,-(An) */ -uae_u32 REGPARAM2 op_660_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_668_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_670_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_678_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_679_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,Dn */ -uae_u32 REGPARAM2 op_680_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(An) */ -uae_u32 REGPARAM2 op_690_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_698_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,-(An) */ -uae_u32 REGPARAM2 op_6a0_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_6a8_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_6b0_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_6b8_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_6b9_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.L #.W,Dn */ -uae_u32 REGPARAM2 op_800_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(An) */ -uae_u32 REGPARAM2 op_810_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(An)+ */ -uae_u32 REGPARAM2 op_818_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,-(An) */ -uae_u32 REGPARAM2 op_820_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(d16,An) */ -uae_u32 REGPARAM2 op_828_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_830_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(xxx).W */ -uae_u32 REGPARAM2 op_838_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(xxx).L */ -uae_u32 REGPARAM2 op_839_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_83a_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_83b_0_comp_ff(uae_u32 opcode) /* BTST */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.L #.W,Dn */ -uae_u32 REGPARAM2 op_840_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(An) */ -uae_u32 REGPARAM2 op_850_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(An)+ */ -uae_u32 REGPARAM2 op_858_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,-(An) */ -uae_u32 REGPARAM2 op_860_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(d16,An) */ -uae_u32 REGPARAM2 op_868_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_870_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(xxx).W */ -uae_u32 REGPARAM2 op_878_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(xxx).L */ -uae_u32 REGPARAM2 op_879_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.L #.W,Dn */ -uae_u32 REGPARAM2 op_880_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(An) */ -uae_u32 REGPARAM2 op_890_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(An)+ */ -uae_u32 REGPARAM2 op_898_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,-(An) */ -uae_u32 REGPARAM2 op_8a0_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(d16,An) */ -uae_u32 REGPARAM2 op_8a8_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_8b0_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(xxx).W */ -uae_u32 REGPARAM2 op_8b8_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(xxx).L */ -uae_u32 REGPARAM2 op_8b9_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.L #.W,Dn */ -uae_u32 REGPARAM2 op_8c0_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(An) */ -uae_u32 REGPARAM2 op_8d0_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(An)+ */ -uae_u32 REGPARAM2 op_8d8_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,-(An) */ -uae_u32 REGPARAM2 op_8e0_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(d16,An) */ -uae_u32 REGPARAM2 op_8e8_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_8f0_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(xxx).W */ -uae_u32 REGPARAM2 op_8f8_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(xxx).L */ -uae_u32 REGPARAM2 op_8f9_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - start_needflags(); - set_zero(s,tmp); - live_flags(); - end_needflags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,Dn */ -uae_u32 REGPARAM2 op_a00_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(An) */ -uae_u32 REGPARAM2 op_a10_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_a18_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,-(An) */ -uae_u32 REGPARAM2 op_a20_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_a28_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_a30_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_a38_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_a39_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,Dn */ -uae_u32 REGPARAM2 op_a40_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(An) */ -uae_u32 REGPARAM2 op_a50_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_a58_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,-(An) */ -uae_u32 REGPARAM2 op_a60_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_a68_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_a70_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_a78_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_a79_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,Dn */ -uae_u32 REGPARAM2 op_a80_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(An) */ -uae_u32 REGPARAM2 op_a90_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_a98_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,-(An) */ -uae_u32 REGPARAM2 op_aa0_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_aa8_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_ab0_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_ab8_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_ab9_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_2 -/* CMP.B #.B,Dn */ -uae_u32 REGPARAM2 op_c00_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(An) */ -uae_u32 REGPARAM2 op_c10_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_c18_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,-(An) */ -uae_u32 REGPARAM2 op_c20_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_c28_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_c30_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_c38_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_c39_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(d16,PC) */ -uae_u32 REGPARAM2 op_c3a_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_c3b_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,Dn */ -uae_u32 REGPARAM2 op_c40_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(An) */ -uae_u32 REGPARAM2 op_c50_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_c58_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,-(An) */ -uae_u32 REGPARAM2 op_c60_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_c68_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_c70_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_c78_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_c79_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_c7a_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_c7b_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,Dn */ -uae_u32 REGPARAM2 op_c80_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(An) */ -uae_u32 REGPARAM2 op_c90_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_c98_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,-(An) */ -uae_u32 REGPARAM2 op_ca0_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_ca8_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_cb0_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_cb8_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_cb9_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(d16,PC) */ -uae_u32 REGPARAM2 op_cba_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_cbb_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,Dn */ -uae_u32 REGPARAM2 op_1000_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),Dn */ -uae_u32 REGPARAM2 op_1010_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,Dn */ -uae_u32 REGPARAM2 op_1018_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),Dn */ -uae_u32 REGPARAM2 op_1020_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_1028_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_1030_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_1038_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_1039_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_103a_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_103b_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,Dn */ -uae_u32 REGPARAM2 op_103c_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_b_ri(dst,0); - start_needflags(); - or_b(dst,src); - } else { - mov_b_rr(dst,src); - test_b_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(An) */ -uae_u32 REGPARAM2 op_1080_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(An) */ -uae_u32 REGPARAM2 op_1090_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(An) */ -uae_u32 REGPARAM2 op_1098_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(An) */ -uae_u32 REGPARAM2 op_10a0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(An) */ -uae_u32 REGPARAM2 op_10a8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(An) */ -uae_u32 REGPARAM2 op_10b0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(An) */ -uae_u32 REGPARAM2 op_10b8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(An) */ -uae_u32 REGPARAM2 op_10b9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(An) */ -uae_u32 REGPARAM2 op_10ba_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(An) */ -uae_u32 REGPARAM2 op_10bb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(An) */ -uae_u32 REGPARAM2 op_10bc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_10c0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(An)+ */ -uae_u32 REGPARAM2 op_10d0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(An)+ */ -uae_u32 REGPARAM2 op_10d8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(An)+ */ -uae_u32 REGPARAM2 op_10e0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(An)+ */ -uae_u32 REGPARAM2 op_10e8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(An)+ */ -uae_u32 REGPARAM2 op_10f0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(An)+ */ -uae_u32 REGPARAM2 op_10f8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(An)+ */ -uae_u32 REGPARAM2 op_10f9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(An)+ */ -uae_u32 REGPARAM2 op_10fa_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(An)+ */ -uae_u32 REGPARAM2 op_10fb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_10fc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,-(An) */ -uae_u32 REGPARAM2 op_1100_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),-(An) */ -uae_u32 REGPARAM2 op_1110_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,-(An) */ -uae_u32 REGPARAM2 op_1118_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),-(An) */ -uae_u32 REGPARAM2 op_1120_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),-(An) */ -uae_u32 REGPARAM2 op_1128_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),-(An) */ -uae_u32 REGPARAM2 op_1130_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,-(An) */ -uae_u32 REGPARAM2 op_1138_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,-(An) */ -uae_u32 REGPARAM2 op_1139_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),-(An) */ -uae_u32 REGPARAM2 op_113a_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),-(An) */ -uae_u32 REGPARAM2 op_113b_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,-(An) */ -uae_u32 REGPARAM2 op_113c_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_1140_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(d16,An) */ -uae_u32 REGPARAM2 op_1150_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(d16,An) */ -uae_u32 REGPARAM2 op_1158_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(d16,An) */ -uae_u32 REGPARAM2 op_1160_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(d16,An) */ -uae_u32 REGPARAM2 op_1168_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_1170_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(d16,An) */ -uae_u32 REGPARAM2 op_1178_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(d16,An) */ -uae_u32 REGPARAM2 op_1179_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(d16,An) */ -uae_u32 REGPARAM2 op_117a_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_117b_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_117c_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_1180_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_1190_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_1198_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11a0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11a8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11b0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11b8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11b9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11ba_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11bb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11bc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_11c0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(xxx).W */ -uae_u32 REGPARAM2 op_11d0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(xxx).W */ -uae_u32 REGPARAM2 op_11d8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(xxx).W */ -uae_u32 REGPARAM2 op_11e0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(xxx).W */ -uae_u32 REGPARAM2 op_11e8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_11f0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(xxx).W */ -uae_u32 REGPARAM2 op_11f8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(xxx).W */ -uae_u32 REGPARAM2 op_11f9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(xxx).W */ -uae_u32 REGPARAM2 op_11fa_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_11fb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_11fc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_13c0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(xxx).L */ -uae_u32 REGPARAM2 op_13d0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(xxx).L */ -uae_u32 REGPARAM2 op_13d8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(xxx).L */ -uae_u32 REGPARAM2 op_13e0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(xxx).L */ -uae_u32 REGPARAM2 op_13e8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_13f0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(xxx).L */ -uae_u32 REGPARAM2 op_13f8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(xxx).L */ -uae_u32 REGPARAM2 op_13f9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(xxx).L */ -uae_u32 REGPARAM2 op_13fa_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_13fb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_13fc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,Dn */ -uae_u32 REGPARAM2 op_2000_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,Dn */ -uae_u32 REGPARAM2 op_2008_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),Dn */ -uae_u32 REGPARAM2 op_2010_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,Dn */ -uae_u32 REGPARAM2 op_2018_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),Dn */ -uae_u32 REGPARAM2 op_2020_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_2028_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_2030_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_2038_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_2039_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_203a_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_203b_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,Dn */ -uae_u32 REGPARAM2 op_203c_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L Dn,An */ -uae_u32 REGPARAM2 op_2040_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L An,An */ -uae_u32 REGPARAM2 op_2048_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (An),An */ -uae_u32 REGPARAM2 op_2050_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (An)+,An */ -uae_u32 REGPARAM2 op_2058_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L -(An),An */ -uae_u32 REGPARAM2 op_2060_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (d16,An),An */ -uae_u32 REGPARAM2 op_2068_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_2070_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (xxx).W,An */ -uae_u32 REGPARAM2 op_2078_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (xxx).L,An */ -uae_u32 REGPARAM2 op_2079_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (d16,PC),An */ -uae_u32 REGPARAM2 op_207a_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_207b_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L #.L,An */ -uae_u32 REGPARAM2 op_207c_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(An) */ -uae_u32 REGPARAM2 op_2080_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(An) */ -uae_u32 REGPARAM2 op_2088_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(An) */ -uae_u32 REGPARAM2 op_2090_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(An) */ -uae_u32 REGPARAM2 op_2098_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(An) */ -uae_u32 REGPARAM2 op_20a0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),(An) */ -uae_u32 REGPARAM2 op_20a8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(An) */ -uae_u32 REGPARAM2 op_20b0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(An) */ -uae_u32 REGPARAM2 op_20b8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(An) */ -uae_u32 REGPARAM2 op_20b9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(An) */ -uae_u32 REGPARAM2 op_20ba_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(An) */ -uae_u32 REGPARAM2 op_20bb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(An) */ -uae_u32 REGPARAM2 op_20bc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_20c0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(An)+ */ -uae_u32 REGPARAM2 op_20c8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(An)+ */ -uae_u32 REGPARAM2 op_20d0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(An)+ */ -uae_u32 REGPARAM2 op_20d8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(An)+ */ -uae_u32 REGPARAM2 op_20e0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),(An)+ */ -uae_u32 REGPARAM2 op_20e8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(An)+ */ -uae_u32 REGPARAM2 op_20f0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(An)+ */ -uae_u32 REGPARAM2 op_20f8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(An)+ */ -uae_u32 REGPARAM2 op_20f9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(An)+ */ -uae_u32 REGPARAM2 op_20fa_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(An)+ */ -uae_u32 REGPARAM2 op_20fb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_20fc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,-(An) */ -uae_u32 REGPARAM2 op_2100_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,-(An) */ -uae_u32 REGPARAM2 op_2108_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),-(An) */ -uae_u32 REGPARAM2 op_2110_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,-(An) */ -uae_u32 REGPARAM2 op_2118_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),-(An) */ -uae_u32 REGPARAM2 op_2120_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),-(An) */ -uae_u32 REGPARAM2 op_2128_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),-(An) */ -uae_u32 REGPARAM2 op_2130_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,-(An) */ -uae_u32 REGPARAM2 op_2138_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,-(An) */ -uae_u32 REGPARAM2 op_2139_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),-(An) */ -uae_u32 REGPARAM2 op_213a_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),-(An) */ -uae_u32 REGPARAM2 op_213b_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,-(An) */ -uae_u32 REGPARAM2 op_213c_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_2140_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(d16,An) */ -uae_u32 REGPARAM2 op_2148_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(d16,An) */ -uae_u32 REGPARAM2 op_2150_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(d16,An) */ -uae_u32 REGPARAM2 op_2158_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(d16,An) */ -uae_u32 REGPARAM2 op_2160_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),(d16,An) */ -uae_u32 REGPARAM2 op_2168_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_2170_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(d16,An) */ -uae_u32 REGPARAM2 op_2178_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(d16,An) */ -uae_u32 REGPARAM2 op_2179_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(d16,An) */ -uae_u32 REGPARAM2 op_217a_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_217b_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_217c_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_2180_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_2188_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_2190_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_2198_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21a0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_3 -/* MOVE.L (d16,An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21a8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21b0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21b8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21b9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21ba_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21bb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21bc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_21c0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(xxx).W */ -uae_u32 REGPARAM2 op_21c8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(xxx).W */ -uae_u32 REGPARAM2 op_21d0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(xxx).W */ -uae_u32 REGPARAM2 op_21d8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(xxx).W */ -uae_u32 REGPARAM2 op_21e0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),(xxx).W */ -uae_u32 REGPARAM2 op_21e8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_21f0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(xxx).W */ -uae_u32 REGPARAM2 op_21f8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(xxx).W */ -uae_u32 REGPARAM2 op_21f9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(xxx).W */ -uae_u32 REGPARAM2 op_21fa_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_21fb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_21fc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_23c0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(xxx).L */ -uae_u32 REGPARAM2 op_23c8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(xxx).L */ -uae_u32 REGPARAM2 op_23d0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(xxx).L */ -uae_u32 REGPARAM2 op_23d8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(xxx).L */ -uae_u32 REGPARAM2 op_23e0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),(xxx).L */ -uae_u32 REGPARAM2 op_23e8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_23f0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(xxx).L */ -uae_u32 REGPARAM2 op_23f8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(xxx).L */ -uae_u32 REGPARAM2 op_23f9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(xxx).L */ -uae_u32 REGPARAM2 op_23fa_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_23fb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_23fc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,Dn */ -uae_u32 REGPARAM2 op_3000_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,Dn */ -uae_u32 REGPARAM2 op_3008_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),Dn */ -uae_u32 REGPARAM2 op_3010_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,Dn */ -uae_u32 REGPARAM2 op_3018_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),Dn */ -uae_u32 REGPARAM2 op_3020_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_3028_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_3030_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_3038_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_3039_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_303a_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_303b_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,Dn */ -uae_u32 REGPARAM2 op_303c_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_w_ri(dst,0); - start_needflags(); - or_w(dst,src); - } else { - mov_w_rr(dst,src); - test_w_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W Dn,An */ -uae_u32 REGPARAM2 op_3040_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W An,An */ -uae_u32 REGPARAM2 op_3048_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (An),An */ -uae_u32 REGPARAM2 op_3050_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (An)+,An */ -uae_u32 REGPARAM2 op_3058_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W -(An),An */ -uae_u32 REGPARAM2 op_3060_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (d16,An),An */ -uae_u32 REGPARAM2 op_3068_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_3070_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (xxx).W,An */ -uae_u32 REGPARAM2 op_3078_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (xxx).L,An */ -uae_u32 REGPARAM2 op_3079_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (d16,PC),An */ -uae_u32 REGPARAM2 op_307a_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_307b_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W #.W,An */ -uae_u32 REGPARAM2 op_307c_0_comp_ff(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(An) */ -uae_u32 REGPARAM2 op_3080_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(An) */ -uae_u32 REGPARAM2 op_3088_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(An) */ -uae_u32 REGPARAM2 op_3090_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(An) */ -uae_u32 REGPARAM2 op_3098_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(An) */ -uae_u32 REGPARAM2 op_30a0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(An) */ -uae_u32 REGPARAM2 op_30a8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(An) */ -uae_u32 REGPARAM2 op_30b0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(An) */ -uae_u32 REGPARAM2 op_30b8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(An) */ -uae_u32 REGPARAM2 op_30b9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(An) */ -uae_u32 REGPARAM2 op_30ba_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(An) */ -uae_u32 REGPARAM2 op_30bb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(An) */ -uae_u32 REGPARAM2 op_30bc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_30c0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(An)+ */ -uae_u32 REGPARAM2 op_30c8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(An)+ */ -uae_u32 REGPARAM2 op_30d0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(An)+ */ -uae_u32 REGPARAM2 op_30d8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(An)+ */ -uae_u32 REGPARAM2 op_30e0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(An)+ */ -uae_u32 REGPARAM2 op_30e8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(An)+ */ -uae_u32 REGPARAM2 op_30f0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(An)+ */ -uae_u32 REGPARAM2 op_30f8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(An)+ */ -uae_u32 REGPARAM2 op_30f9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(An)+ */ -uae_u32 REGPARAM2 op_30fa_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(An)+ */ -uae_u32 REGPARAM2 op_30fb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_30fc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,-(An) */ -uae_u32 REGPARAM2 op_3100_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,-(An) */ -uae_u32 REGPARAM2 op_3108_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),-(An) */ -uae_u32 REGPARAM2 op_3110_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,-(An) */ -uae_u32 REGPARAM2 op_3118_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),-(An) */ -uae_u32 REGPARAM2 op_3120_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),-(An) */ -uae_u32 REGPARAM2 op_3128_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),-(An) */ -uae_u32 REGPARAM2 op_3130_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,-(An) */ -uae_u32 REGPARAM2 op_3138_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,-(An) */ -uae_u32 REGPARAM2 op_3139_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),-(An) */ -uae_u32 REGPARAM2 op_313a_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),-(An) */ -uae_u32 REGPARAM2 op_313b_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,-(An) */ -uae_u32 REGPARAM2 op_313c_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_3140_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(d16,An) */ -uae_u32 REGPARAM2 op_3148_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(d16,An) */ -uae_u32 REGPARAM2 op_3150_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(d16,An) */ -uae_u32 REGPARAM2 op_3158_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(d16,An) */ -uae_u32 REGPARAM2 op_3160_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(d16,An) */ -uae_u32 REGPARAM2 op_3168_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_3170_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(d16,An) */ -uae_u32 REGPARAM2 op_3178_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(d16,An) */ -uae_u32 REGPARAM2 op_3179_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(d16,An) */ -uae_u32 REGPARAM2 op_317a_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_317b_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_317c_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_3180_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_3188_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_3190_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_3198_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31a0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31a8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31b0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31b8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31b9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31ba_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31bb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31bc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_31c0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(xxx).W */ -uae_u32 REGPARAM2 op_31c8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(xxx).W */ -uae_u32 REGPARAM2 op_31d0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(xxx).W */ -uae_u32 REGPARAM2 op_31d8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(xxx).W */ -uae_u32 REGPARAM2 op_31e0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(xxx).W */ -uae_u32 REGPARAM2 op_31e8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_31f0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(xxx).W */ -uae_u32 REGPARAM2 op_31f8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(xxx).W */ -uae_u32 REGPARAM2 op_31f9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(xxx).W */ -uae_u32 REGPARAM2 op_31fa_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_31fb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_31fc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_33c0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(xxx).L */ -uae_u32 REGPARAM2 op_33c8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(xxx).L */ -uae_u32 REGPARAM2 op_33d0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(xxx).L */ -uae_u32 REGPARAM2 op_33d8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(xxx).L */ -uae_u32 REGPARAM2 op_33e0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(xxx).L */ -uae_u32 REGPARAM2 op_33e8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_33f0_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(xxx).L */ -uae_u32 REGPARAM2 op_33f8_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(xxx).L */ -uae_u32 REGPARAM2 op_33f9_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(xxx).L */ -uae_u32 REGPARAM2 op_33fa_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_33fb_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_33fc_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B Dn */ -uae_u32 REGPARAM2 op_4000_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(srcreg != dst) { - mov_b_rr(srcreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (An) */ -uae_u32 REGPARAM2 op_4010_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (An)+ */ -uae_u32 REGPARAM2 op_4018_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B -(An) */ -uae_u32 REGPARAM2 op_4020_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (d16,An) */ -uae_u32 REGPARAM2 op_4028_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4030_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (xxx).W */ -uae_u32 REGPARAM2 op_4038_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (xxx).L */ -uae_u32 REGPARAM2 op_4039_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W Dn */ -uae_u32 REGPARAM2 op_4040_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(srcreg != dst) { - mov_w_rr(srcreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (An) */ -uae_u32 REGPARAM2 op_4050_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (An)+ */ -uae_u32 REGPARAM2 op_4058_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W -(An) */ -uae_u32 REGPARAM2 op_4060_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (d16,An) */ -uae_u32 REGPARAM2 op_4068_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4070_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (xxx).W */ -uae_u32 REGPARAM2 op_4078_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (xxx).L */ -uae_u32 REGPARAM2 op_4079_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L Dn */ -uae_u32 REGPARAM2 op_4080_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (An) */ -uae_u32 REGPARAM2 op_4090_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (An)+ */ -uae_u32 REGPARAM2 op_4098_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L -(An) */ -uae_u32 REGPARAM2 op_40a0_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (d16,An) */ -uae_u32 REGPARAM2 op_40a8_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_40b0_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (xxx).W */ -uae_u32 REGPARAM2 op_40b8_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (xxx).L */ -uae_u32 REGPARAM2 op_40b9_0_comp_ff(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (An),An */ -uae_u32 REGPARAM2 op_41d0_0_comp_ff(uae_u32 opcode) /* LEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (d16,An),An */ -uae_u32 REGPARAM2 op_41e8_0_comp_ff(uae_u32 opcode) /* LEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_41f0_0_comp_ff(uae_u32 opcode) /* LEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (xxx).W,An */ -uae_u32 REGPARAM2 op_41f8_0_comp_ff(uae_u32 opcode) /* LEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (xxx).L,An */ -uae_u32 REGPARAM2 op_41f9_0_comp_ff(uae_u32 opcode) /* LEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (d16,PC),An */ -uae_u32 REGPARAM2 op_41fa_0_comp_ff(uae_u32 opcode) /* LEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_41fb_0_comp_ff(uae_u32 opcode) /* LEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B Dn */ -uae_u32 REGPARAM2 op_4200_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_b_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(srcreg != dst) { - mov_b_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (An) */ -uae_u32 REGPARAM2 op_4210_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_b_rr(dst,dst); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (An)+ */ -uae_u32 REGPARAM2 op_4218_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_b_rr(dst,dst); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B -(An) */ -uae_u32 REGPARAM2 op_4220_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_b_rr(dst,dst); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (d16,An) */ -uae_u32 REGPARAM2 op_4228_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_b_rr(dst,dst); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4230_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_b_rr(dst,dst); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (xxx).W */ -uae_u32 REGPARAM2 op_4238_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_b_rr(dst,dst); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (xxx).L */ -uae_u32 REGPARAM2 op_4239_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_b_rr(dst,dst); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W Dn */ -uae_u32 REGPARAM2 op_4240_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_w_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(srcreg != dst) { - mov_w_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (An) */ -uae_u32 REGPARAM2 op_4250_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_w_rr(dst,dst); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (An)+ */ -uae_u32 REGPARAM2 op_4258_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_w_rr(dst,dst); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W -(An) */ -uae_u32 REGPARAM2 op_4260_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_w_rr(dst,dst); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (d16,An) */ -uae_u32 REGPARAM2 op_4268_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_w_rr(dst,dst); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4270_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_w_rr(dst,dst); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (xxx).W */ -uae_u32 REGPARAM2 op_4278_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_w_rr(dst,dst); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (xxx).L */ -uae_u32 REGPARAM2 op_4279_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_w_rr(dst,dst); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L Dn */ -uae_u32 REGPARAM2 op_4280_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (An) */ -uae_u32 REGPARAM2 op_4290_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (An)+ */ -uae_u32 REGPARAM2 op_4298_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L -(An) */ -uae_u32 REGPARAM2 op_42a0_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (d16,An) */ -uae_u32 REGPARAM2 op_42a8_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_42b0_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (xxx).W */ -uae_u32 REGPARAM2 op_42b8_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (xxx).L */ -uae_u32 REGPARAM2 op_42b9_0_comp_ff(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B Dn */ -uae_u32 REGPARAM2 op_4400_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(srcreg != dst) { - mov_b_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B (An) */ -uae_u32 REGPARAM2 op_4410_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_4 -/* NEG.B (An)+ */ -uae_u32 REGPARAM2 op_4418_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B -(An) */ -uae_u32 REGPARAM2 op_4420_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B (d16,An) */ -uae_u32 REGPARAM2 op_4428_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4430_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B (xxx).W */ -uae_u32 REGPARAM2 op_4438_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B (xxx).L */ -uae_u32 REGPARAM2 op_4439_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W Dn */ -uae_u32 REGPARAM2 op_4440_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(srcreg != dst) { - mov_w_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (An) */ -uae_u32 REGPARAM2 op_4450_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (An)+ */ -uae_u32 REGPARAM2 op_4458_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W -(An) */ -uae_u32 REGPARAM2 op_4460_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (d16,An) */ -uae_u32 REGPARAM2 op_4468_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4470_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (xxx).W */ -uae_u32 REGPARAM2 op_4478_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (xxx).L */ -uae_u32 REGPARAM2 op_4479_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L Dn */ -uae_u32 REGPARAM2 op_4480_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (An) */ -uae_u32 REGPARAM2 op_4490_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (An)+ */ -uae_u32 REGPARAM2 op_4498_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L -(An) */ -uae_u32 REGPARAM2 op_44a0_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (d16,An) */ -uae_u32 REGPARAM2 op_44a8_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_44b0_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (xxx).W */ -uae_u32 REGPARAM2 op_44b8_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (xxx).L */ -uae_u32 REGPARAM2 op_44b9_0_comp_ff(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B Dn */ -uae_u32 REGPARAM2 op_4600_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - if(srcreg != dst) { - mov_b_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (An) */ -uae_u32 REGPARAM2 op_4610_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (An)+ */ -uae_u32 REGPARAM2 op_4618_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B -(An) */ -uae_u32 REGPARAM2 op_4620_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (d16,An) */ -uae_u32 REGPARAM2 op_4628_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4630_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (xxx).W */ -uae_u32 REGPARAM2 op_4638_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (xxx).L */ -uae_u32 REGPARAM2 op_4639_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W Dn */ -uae_u32 REGPARAM2 op_4640_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - if(srcreg != dst) { - mov_w_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (An) */ -uae_u32 REGPARAM2 op_4650_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (An)+ */ -uae_u32 REGPARAM2 op_4658_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W -(An) */ -uae_u32 REGPARAM2 op_4660_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (d16,An) */ -uae_u32 REGPARAM2 op_4668_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4670_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (xxx).W */ -uae_u32 REGPARAM2 op_4678_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (xxx).L */ -uae_u32 REGPARAM2 op_4679_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L Dn */ -uae_u32 REGPARAM2 op_4680_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (An) */ -uae_u32 REGPARAM2 op_4690_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (An)+ */ -uae_u32 REGPARAM2 op_4698_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L -(An) */ -uae_u32 REGPARAM2 op_46a0_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (d16,An) */ -uae_u32 REGPARAM2 op_46a8_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_46b0_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (xxx).W */ -uae_u32 REGPARAM2 op_46b8_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (xxx).L */ -uae_u32 REGPARAM2 op_46b9_0_comp_ff(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LINK.L An,#.L */ -uae_u32 REGPARAM2 op_4808_0_comp_ff(uae_u32 opcode) /* LINK */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - if (srcreg == 7) { - m68k_pc_offset = m68k_pc_offset_thisinst; - FAIL(1); - return 0; - } - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int offs = scratchie++; - mov_l_ri(offs, comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,src,scratchie); - mov_l_rr(src,SP_REG); - add_l(SP_REG,offs); - if(srcreg + 8 != src) { - mov_l_rr(srcreg + 8, src); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SWAP.W Dn */ -uae_u32 REGPARAM2 op_4840_0_comp_ff(uae_u32 opcode) /* SWAP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - rol_l_ri(src,16); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - if(srcreg != src) { - mov_l_rr(srcreg, src); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (An) */ -uae_u32 REGPARAM2 op_4850_0_comp_ff(uae_u32 opcode) /* PEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if (srcreg==7) dodgy=1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (d16,An) */ -uae_u32 REGPARAM2 op_4868_0_comp_ff(uae_u32 opcode) /* PEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if (srcreg==7) dodgy=1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4870_0_comp_ff(uae_u32 opcode) /* PEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if (srcreg==7) dodgy=1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (xxx).W */ -uae_u32 REGPARAM2 op_4878_0_comp_ff(uae_u32 opcode) /* PEA */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (xxx).L */ -uae_u32 REGPARAM2 op_4879_0_comp_ff(uae_u32 opcode) /* PEA */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (d16,PC) */ -uae_u32 REGPARAM2 op_487a_0_comp_ff(uae_u32 opcode) /* PEA */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_487b_0_comp_ff(uae_u32 opcode) /* PEA */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXT.W Dn */ -uae_u32 REGPARAM2 op_4880_0_comp_ff(uae_u32 opcode) /* EXT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - { - int dst = scratchie++; - sign_extend_8_rr(dst,src); - dont_care_flags(); - { - start_needflags(); - test_w_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(srcreg != dst) { - mov_w_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,(An) */ -uae_u32 REGPARAM2 op_4890_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(srca, dstreg + 8); - } - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - offset+=2; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writeword(tmp,i,scratchie); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,-(An) */ -uae_u32 REGPARAM2 op_48a0_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca=dodgy?scratchie++:dstreg+8; - if (dodgy) { - mov_l_rr(srca,8+dstreg); - } - if (1 && !special_mem && !jit_n_addr_unsafe && !(mask & (1 << (7 - dstreg)))) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - offset-=2; - mov_l_rr(tmp,15-i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - } - } - lea_l_brr(8+dstreg,srca,(uae_s32)offset); - } else { - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - sub_l_ri(srca,2); - writeword(srca,15-i,scratchie); - } - } - mov_l_rr(8+dstreg,srca); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_48a8_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + dstreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - offset+=2; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writeword(tmp,i,scratchie); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_48b0_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - offset+=2; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writeword(tmp,i,scratchie); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_48b8_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - offset+=2; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writeword(tmp,i,scratchie); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_48b9_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - offset+=2; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writeword(tmp,i,scratchie); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXT.L Dn */ -uae_u32 REGPARAM2 op_48c0_0_comp_ff(uae_u32 opcode) /* EXT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - { - int dst = src; - sign_extend_16_rr(src,src); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,(An) */ -uae_u32 REGPARAM2 op_48d0_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(srca, dstreg + 8); - } - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - offset+=4; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writelong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,-(An) */ -uae_u32 REGPARAM2 op_48e0_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(srca, 8 + dstreg); - } - if (1 && !special_mem && !jit_n_addr_unsafe && !(mask & (1 << (7 - dstreg)))) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - offset-=4; - mov_l_rr(tmp,15-i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - } - } - lea_l_brr(8+dstreg,srca,(uae_s32)offset); - } else { - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - sub_l_ri(srca,4); - writelong(srca,15-i,scratchie); - } - } - mov_l_rr(8+dstreg,srca); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,(d16,An) */ -uae_u32 REGPARAM2 op_48e8_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + dstreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - offset+=4; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writelong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_48f0_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - offset+=4; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writelong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,(xxx).W */ -uae_u32 REGPARAM2 op_48f8_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - offset+=4; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writelong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,(xxx).L */ -uae_u32 REGPARAM2 op_48f9_0_comp_ff(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - offset+=4; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writelong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXT.B Dn */ -uae_u32 REGPARAM2 op_49c0_0_comp_ff(uae_u32 opcode) /* EXT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - { - int dst = src; - sign_extend_8_rr(src,src); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B Dn */ -uae_u32 REGPARAM2 op_4a00_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (An) */ -uae_u32 REGPARAM2 op_4a10_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (An)+ */ -uae_u32 REGPARAM2 op_4a18_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B -(An) */ -uae_u32 REGPARAM2 op_4a20_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (d16,An) */ -uae_u32 REGPARAM2 op_4a28_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4a30_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (xxx).W */ -uae_u32 REGPARAM2 op_4a38_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (xxx).L */ -uae_u32 REGPARAM2 op_4a39_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (d16,PC) */ -uae_u32 REGPARAM2 op_4a3a_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4a3b_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B #.B */ -uae_u32 REGPARAM2 op_4a3c_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_b_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W Dn */ -uae_u32 REGPARAM2 op_4a40_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W An */ -uae_u32 REGPARAM2 op_4a48_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (An) */ -uae_u32 REGPARAM2 op_4a50_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (An)+ */ -uae_u32 REGPARAM2 op_4a58_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W -(An) */ -uae_u32 REGPARAM2 op_4a60_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (d16,An) */ -uae_u32 REGPARAM2 op_4a68_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4a70_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (xxx).W */ -uae_u32 REGPARAM2 op_4a78_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (xxx).L */ -uae_u32 REGPARAM2 op_4a79_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (d16,PC) */ -uae_u32 REGPARAM2 op_4a7a_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4a7b_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W #.W */ -uae_u32 REGPARAM2 op_4a7c_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - dont_care_flags(); - { - start_needflags(); - test_w_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L Dn */ -uae_u32 REGPARAM2 op_4a80_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L An */ -uae_u32 REGPARAM2 op_4a88_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (An) */ -uae_u32 REGPARAM2 op_4a90_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (An)+ */ -uae_u32 REGPARAM2 op_4a98_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L -(An) */ -uae_u32 REGPARAM2 op_4aa0_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (d16,An) */ -uae_u32 REGPARAM2 op_4aa8_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4ab0_0_comp_ff(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (xxx).W */ -uae_u32 REGPARAM2 op_4ab8_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (xxx).L */ -uae_u32 REGPARAM2 op_4ab9_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (d16,PC) */ -uae_u32 REGPARAM2 op_4aba_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4abb_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L #.L */ -uae_u32 REGPARAM2 op_4abc_0_comp_ff(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - dont_care_flags(); - { - start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(An) */ -uae_u32 REGPARAM2 op_4c90_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(srca, dstreg + 8); - } - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_4c98_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, dstreg + 8); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - lea_l_brr(8+dstreg,srca,offset); - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - mov_l_rr(8+dstreg,tmp); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_4ca8_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + dstreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_4cb0_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_4cb8_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_4cb9_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_4cba_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4cbb_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(An) */ -uae_u32 REGPARAM2 op_4cd0_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(srca, dstreg + 8); - } - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(An)+ */ -uae_u32 REGPARAM2 op_4cd8_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, dstreg + 8); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - lea_l_brr(8+dstreg,srca,offset); - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - mov_l_rr(8+dstreg,tmp); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(d16,An) */ -uae_u32 REGPARAM2 op_4ce8_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + dstreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_4cf0_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(xxx).W */ -uae_u32 REGPARAM2 op_4cf8_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(xxx).L */ -uae_u32 REGPARAM2 op_4cf9_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_4cfa_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4cfb_0_comp_ff(uae_u32 opcode) /* MVMEL */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LINK.W An,#.W */ -uae_u32 REGPARAM2 op_4e50_0_comp_ff(uae_u32 opcode) /* LINK */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - if (srcreg == 7) { - m68k_pc_offset = m68k_pc_offset_thisinst; - FAIL(1); - return 0; - } - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,src,scratchie); - mov_l_rr(src,SP_REG); - sign_extend_16_rr(offs,offs); - add_l(SP_REG,offs); - if(srcreg + 8 != src) { - mov_l_rr(srcreg + 8, src); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* UNLK.L An */ -uae_u32 REGPARAM2 op_4e58_0_comp_ff(uae_u32 opcode) /* UNLK */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - mov_l_rr(SP_REG,src); - readlong(SP_REG,src,scratchie); - add_l_ri(SP_REG,4); - if(srcreg + 8 != src) { - mov_l_rr(srcreg + 8, src); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOP.L */ -uae_u32 REGPARAM2 op_4e71_0_comp_ff(uae_u32 opcode) /* NOP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* RTD.L #.W */ -uae_u32 REGPARAM2 op_4e74_0_comp_ff(uae_u32 opcode) /* RTD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - add_l_ri(offs,4); - { - int newad=scratchie++; - readlong(SP_REG,newad,scratchie); - mov_l_mr(JITPTR ®s.pc,newad); - get_n_addr_jmp(newad,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - add_l(SP_REG,offs); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* RTS.L */ -uae_u32 REGPARAM2 op_4e75_0_comp_ff(uae_u32 opcode) /* RTS */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int newad=scratchie++; - readlong(SP_REG,newad,scratchie); - mov_l_mr(JITPTR ®s.pc,newad); - get_n_addr_jmp(newad,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - lea_l_brr(SP_REG,SP_REG,4); - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (An) */ -uae_u32 REGPARAM2 op_4e90_0_comp_ff(uae_u32 opcode) /* JSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (d16,An) */ -uae_u32 REGPARAM2 op_4ea8_0_comp_ff(uae_u32 opcode) /* JSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4eb0_0_comp_ff(uae_u32 opcode) /* JSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (xxx).W */ -uae_u32 REGPARAM2 op_4eb8_0_comp_ff(uae_u32 opcode) /* JSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (xxx).L */ -uae_u32 REGPARAM2 op_4eb9_0_comp_ff(uae_u32 opcode) /* JSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (d16,PC) */ -uae_u32 REGPARAM2 op_4eba_0_comp_ff(uae_u32 opcode) /* JSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4ebb_0_comp_ff(uae_u32 opcode) /* JSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (An) */ -uae_u32 REGPARAM2 op_4ed0_0_comp_ff(uae_u32 opcode) /* JMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (d16,An) */ -uae_u32 REGPARAM2 op_4ee8_0_comp_ff(uae_u32 opcode) /* JMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4ef0_0_comp_ff(uae_u32 opcode) /* JMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (xxx).W */ -uae_u32 REGPARAM2 op_4ef8_0_comp_ff(uae_u32 opcode) /* JMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (xxx).L */ -uae_u32 REGPARAM2 op_4ef9_0_comp_ff(uae_u32 opcode) /* JMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (d16,PC) */ -uae_u32 REGPARAM2 op_4efa_0_comp_ff(uae_u32 opcode) /* JMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4efb_0_comp_ff(uae_u32 opcode) /* JMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,Dn */ -uae_u32 REGPARAM2 op_5000_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(An) */ -uae_u32 REGPARAM2 op_5010_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(An)+ */ -uae_u32 REGPARAM2 op_5018_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,-(An) */ -uae_u32 REGPARAM2 op_5020_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(d16,An) */ -uae_u32 REGPARAM2 op_5028_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_5030_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(xxx).W */ -uae_u32 REGPARAM2 op_5038_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(xxx).L */ -uae_u32 REGPARAM2 op_5039_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,Dn */ -uae_u32 REGPARAM2 op_5040_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDAQ.W #,An */ -uae_u32 REGPARAM2 op_5048_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(An) */ -uae_u32 REGPARAM2 op_5050_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(An)+ */ -uae_u32 REGPARAM2 op_5058_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,-(An) */ -uae_u32 REGPARAM2 op_5060_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(d16,An) */ -uae_u32 REGPARAM2 op_5068_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_5070_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(xxx).W */ -uae_u32 REGPARAM2 op_5078_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(xxx).L */ -uae_u32 REGPARAM2 op_5079_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,Dn */ -uae_u32 REGPARAM2 op_5080_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDAQ.L #,An */ -uae_u32 REGPARAM2 op_5088_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(An) */ -uae_u32 REGPARAM2 op_5090_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(An)+ */ -uae_u32 REGPARAM2 op_5098_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_5 -/* ADDQ.L #,-(An) */ -uae_u32 REGPARAM2 op_50a0_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(d16,An) */ -uae_u32 REGPARAM2 op_50a8_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_50b0_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(xxx).W */ -uae_u32 REGPARAM2 op_50b8_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(xxx).L */ -uae_u32 REGPARAM2 op_50b9_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_50c0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_50c8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_50d0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_50d8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_50e0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_50e8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_50f0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_50f8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_50f9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,Dn */ -uae_u32 REGPARAM2 op_5100_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(An) */ -uae_u32 REGPARAM2 op_5110_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(An)+ */ -uae_u32 REGPARAM2 op_5118_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,-(An) */ -uae_u32 REGPARAM2 op_5120_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(d16,An) */ -uae_u32 REGPARAM2 op_5128_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_5130_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(xxx).W */ -uae_u32 REGPARAM2 op_5138_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(xxx).L */ -uae_u32 REGPARAM2 op_5139_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,Dn */ -uae_u32 REGPARAM2 op_5140_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBAQ.W #,An */ -uae_u32 REGPARAM2 op_5148_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(An) */ -uae_u32 REGPARAM2 op_5150_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(An)+ */ -uae_u32 REGPARAM2 op_5158_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,-(An) */ -uae_u32 REGPARAM2 op_5160_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(d16,An) */ -uae_u32 REGPARAM2 op_5168_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_5170_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(xxx).W */ -uae_u32 REGPARAM2 op_5178_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(xxx).L */ -uae_u32 REGPARAM2 op_5179_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,Dn */ -uae_u32 REGPARAM2 op_5180_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBAQ.L #,An */ -uae_u32 REGPARAM2 op_5188_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(An) */ -uae_u32 REGPARAM2 op_5190_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(An)+ */ -uae_u32 REGPARAM2 op_5198_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,-(An) */ -uae_u32 REGPARAM2 op_51a0_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(d16,An) */ -uae_u32 REGPARAM2 op_51a8_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_51b0_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(xxx).W */ -uae_u32 REGPARAM2 op_51b8_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(xxx).L */ -uae_u32 REGPARAM2 op_51b9_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_51c0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_51c8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - start_needflags(); - sub_w_ri(src,1); - end_needflags(); - { - uintptr v2; - uintptr v1=get_const(PC_P); - v2=get_const(offs); - register_branch(v1,v2,3); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_51d0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_51d8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_51e0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_51e8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_51f0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_51f8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_51f9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_52c0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_52c8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,7); - cmov_l_rr(src,nsrc,7); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_52d0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_52d8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_52e0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_52e8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_52f0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_52f8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_52f9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_53c0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_53c8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,6); - cmov_l_rr(src,nsrc,6); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_53d0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_53d8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_53e0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_53e8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_53f0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_53f8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_53f9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_54c0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_54c8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,3); - cmov_l_rr(src,nsrc,3); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_54d0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_54d8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_54e0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_54e8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_54f0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_54f8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_54f9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_55c0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_55c8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,2); - cmov_l_rr(src,nsrc,2); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_55d0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_55d8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_55e0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_55e8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_55f0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_55f8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_55f9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_56c0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_56c8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,5); - cmov_l_rr(src,nsrc,5); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_56d0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_56d8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_56e0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_56e8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_56f0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_56f8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_56f9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_57c0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_57c8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,4); - cmov_l_rr(src,nsrc,4); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_57d0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_57d8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_57e0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_57e8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_57f0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_57f8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_57f9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5ac0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5ac8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,9); - cmov_l_rr(src,nsrc,9); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5ad0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5ad8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5ae0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5ae8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5af0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5af8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5af9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5bc0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5bc8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,8); - cmov_l_rr(src,nsrc,8); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5bd0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5bd8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5be0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5be8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5bf0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5bf8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5bf9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5cc0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5cc8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,13); - cmov_l_rr(src,nsrc,13); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5cd0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5cd8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5ce0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5ce8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5cf0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5cf8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5cf9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5dc0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5dc8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,12); - cmov_l_rr(src,nsrc,12); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5dd0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5dd8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5de0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5de8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5df0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5df8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5df9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5ec0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5ec8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,15); - cmov_l_rr(src,nsrc,15); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5ed0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5ed8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5ee0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5ee8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5ef0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5ef8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5ef9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5fc0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5fc8_0_comp_ff(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,14); - cmov_l_rr(src,nsrc,14); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5fd0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5fd8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5fe0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5fe8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5ff0_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5ff8_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5ff9_0_comp_ff(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6000_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6001_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_60ff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSR.W #.W */ -uae_u32 REGPARAM2 op_6100_0_comp_ff(uae_u32 opcode) /* BSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - add_l_ri(src,m68k_pc_offset_thisinst+2); - m68k_pc_offset=0; - add_l(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSRQ.B # */ -uae_u32 REGPARAM2 op_6101_0_comp_ff(uae_u32 opcode) /* BSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - add_l_ri(src,m68k_pc_offset_thisinst+2); - m68k_pc_offset=0; - add_l(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSR.L #.L */ -uae_u32 REGPARAM2 op_61ff_0_comp_ff(uae_u32 opcode) /* BSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - add_l_ri(src,m68k_pc_offset_thisinst+2); - m68k_pc_offset=0; - add_l(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6200_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,7); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6201_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,7); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_62ff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,7); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6300_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,6); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6301_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,6); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_6 -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_63ff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,6); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6400_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,3); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6401_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,3); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_64ff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,3); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6500_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,2); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6501_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,2); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_65ff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,2); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6600_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,5); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6601_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,5); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_66ff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,5); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6700_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,4); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6701_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,4); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_67ff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,4); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6a00_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,9); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6a01_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,9); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6aff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,9); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6b00_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,8); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6b01_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,8); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6bff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,8); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6c00_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,13); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6c01_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,13); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6cff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,13); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6d00_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,12); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6d01_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,12); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6dff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,12); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6e00_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,15); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6e01_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,15); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6eff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,15); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6f00_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,14); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6f01_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,14); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6fff_0_comp_ff(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,14); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEQ.L #,Dn */ -uae_u32 REGPARAM2 op_7000_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - { - if (src!=dst) { - mov_l_ri(dst,0); - start_needflags(); - or_l(dst,src); - } else { - mov_l_rr(dst,src); - test_l_rr(dst,dst); - } - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,Dn */ -uae_u32 REGPARAM2 op_8000_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (An),Dn */ -uae_u32 REGPARAM2 op_8010_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (An)+,Dn */ -uae_u32 REGPARAM2 op_8018_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B -(An),Dn */ -uae_u32 REGPARAM2 op_8020_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_8028_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_8030_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_8038_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_8039_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_803a_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_803b_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,Dn */ -uae_u32 REGPARAM2 op_803c_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,Dn */ -uae_u32 REGPARAM2 op_8040_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (An),Dn */ -uae_u32 REGPARAM2 op_8050_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (An)+,Dn */ -uae_u32 REGPARAM2 op_8058_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W -(An),Dn */ -uae_u32 REGPARAM2 op_8060_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_8068_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_8070_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_8078_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_8079_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_807a_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_807b_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,Dn */ -uae_u32 REGPARAM2 op_807c_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,Dn */ -uae_u32 REGPARAM2 op_8080_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (An),Dn */ -uae_u32 REGPARAM2 op_8090_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (An)+,Dn */ -uae_u32 REGPARAM2 op_8098_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L -(An),Dn */ -uae_u32 REGPARAM2 op_80a0_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_80a8_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_80b0_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_80b8_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_80b9_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_80ba_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_80bb_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,Dn */ -uae_u32 REGPARAM2 op_80bc_0_comp_ff(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(An) */ -uae_u32 REGPARAM2 op_8110_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_8118_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,-(An) */ -uae_u32 REGPARAM2 op_8120_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_8128_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_8130_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_8138_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_8139_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(An) */ -uae_u32 REGPARAM2 op_8150_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_8158_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,-(An) */ -uae_u32 REGPARAM2 op_8160_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_8168_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_8170_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_8178_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_8179_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - or_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(An) */ -uae_u32 REGPARAM2 op_8190_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_8198_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,-(An) */ -uae_u32 REGPARAM2 op_81a0_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_81a8_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_81b0_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_81b8_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_81b9_0_comp_ff(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - or_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,Dn */ -uae_u32 REGPARAM2 op_9000_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (An),Dn */ -uae_u32 REGPARAM2 op_9010_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (An)+,Dn */ -uae_u32 REGPARAM2 op_9018_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B -(An),Dn */ -uae_u32 REGPARAM2 op_9020_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_9028_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_9030_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_9038_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_9039_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_903a_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_903b_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,Dn */ -uae_u32 REGPARAM2 op_903c_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,Dn */ -uae_u32 REGPARAM2 op_9040_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W An,Dn */ -uae_u32 REGPARAM2 op_9048_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (An),Dn */ -uae_u32 REGPARAM2 op_9050_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (An)+,Dn */ -uae_u32 REGPARAM2 op_9058_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W -(An),Dn */ -uae_u32 REGPARAM2 op_9060_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_9068_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_9070_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_9078_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_9079_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_907a_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_907b_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,Dn */ -uae_u32 REGPARAM2 op_907c_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,Dn */ -uae_u32 REGPARAM2 op_9080_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L An,Dn */ -uae_u32 REGPARAM2 op_9088_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (An),Dn */ -uae_u32 REGPARAM2 op_9090_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (An)+,Dn */ -uae_u32 REGPARAM2 op_9098_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L -(An),Dn */ -uae_u32 REGPARAM2 op_90a0_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_90a8_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_90b0_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_90b8_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_90b9_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_90ba_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_90bb_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,Dn */ -uae_u32 REGPARAM2 op_90bc_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W Dn,An */ -uae_u32 REGPARAM2 op_90c0_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W An,An */ -uae_u32 REGPARAM2 op_90c8_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (An),An */ -uae_u32 REGPARAM2 op_90d0_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (An)+,An */ -uae_u32 REGPARAM2 op_90d8_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W -(An),An */ -uae_u32 REGPARAM2 op_90e0_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (d16,An),An */ -uae_u32 REGPARAM2 op_90e8_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_90f0_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (xxx).W,An */ -uae_u32 REGPARAM2 op_90f8_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (xxx).L,An */ -uae_u32 REGPARAM2 op_90f9_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (d16,PC),An */ -uae_u32 REGPARAM2 op_90fa_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_90fb_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W #.W,An */ -uae_u32 REGPARAM2 op_90fc_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.B Dn,Dn */ -uae_u32 REGPARAM2 op_9100_0_comp_ff(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.B -(An),-(An) */ -uae_u32 REGPARAM2 op_9108_0_comp_ff(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(An) */ -uae_u32 REGPARAM2 op_9110_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_9118_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,-(An) */ -uae_u32 REGPARAM2 op_9120_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_9128_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_9130_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_9138_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_9139_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.W Dn,Dn */ -uae_u32 REGPARAM2 op_9140_0_comp_ff(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.W -(An),-(An) */ -uae_u32 REGPARAM2 op_9148_0_comp_ff(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(An) */ -uae_u32 REGPARAM2 op_9150_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_9158_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,-(An) */ -uae_u32 REGPARAM2 op_9160_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_9168_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_9170_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_9178_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_9179_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - sub_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.L Dn,Dn */ -uae_u32 REGPARAM2 op_9180_0_comp_ff(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.L -(An),-(An) */ -uae_u32 REGPARAM2 op_9188_0_comp_ff(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(An) */ -uae_u32 REGPARAM2 op_9190_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_9198_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,-(An) */ -uae_u32 REGPARAM2 op_91a0_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_91a8_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_91b0_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_91b8_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_91b9_0_comp_ff(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - sub_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L Dn,An */ -uae_u32 REGPARAM2 op_91c0_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L An,An */ -uae_u32 REGPARAM2 op_91c8_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (An),An */ -uae_u32 REGPARAM2 op_91d0_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (An)+,An */ -uae_u32 REGPARAM2 op_91d8_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L -(An),An */ -uae_u32 REGPARAM2 op_91e0_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (d16,An),An */ -uae_u32 REGPARAM2 op_91e8_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_91f0_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (xxx).W,An */ -uae_u32 REGPARAM2 op_91f8_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (xxx).L,An */ -uae_u32 REGPARAM2 op_91f9_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (d16,PC),An */ -uae_u32 REGPARAM2 op_91fa_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_91fb_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L #.L,An */ -uae_u32 REGPARAM2 op_91fc_0_comp_ff(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B Dn,Dn */ -uae_u32 REGPARAM2 op_b000_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (An),Dn */ -uae_u32 REGPARAM2 op_b010_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (An)+,Dn */ -uae_u32 REGPARAM2 op_b018_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B -(An),Dn */ -uae_u32 REGPARAM2 op_b020_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_b028_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_b030_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_b038_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_b039_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_b03a_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_b03b_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,Dn */ -uae_u32 REGPARAM2 op_b03c_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W Dn,Dn */ -uae_u32 REGPARAM2 op_b040_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W An,Dn */ -uae_u32 REGPARAM2 op_b048_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (An),Dn */ -uae_u32 REGPARAM2 op_b050_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (An)+,Dn */ -uae_u32 REGPARAM2 op_b058_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W -(An),Dn */ -uae_u32 REGPARAM2 op_b060_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_b068_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_b070_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_b078_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_b079_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_b07a_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_b07b_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,Dn */ -uae_u32 REGPARAM2 op_b07c_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L Dn,Dn */ -uae_u32 REGPARAM2 op_b080_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L An,Dn */ -uae_u32 REGPARAM2 op_b088_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (An),Dn */ -uae_u32 REGPARAM2 op_b090_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (An)+,Dn */ -uae_u32 REGPARAM2 op_b098_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L -(An),Dn */ -uae_u32 REGPARAM2 op_b0a0_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_7 -/* CMP.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_b0a8_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_b0b0_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_b0b8_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_b0b9_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_b0ba_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_b0bb_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,Dn */ -uae_u32 REGPARAM2 op_b0bc_0_comp_ff(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W Dn,An */ -uae_u32 REGPARAM2 op_b0c0_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W An,An */ -uae_u32 REGPARAM2 op_b0c8_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (An),An */ -uae_u32 REGPARAM2 op_b0d0_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (An)+,An */ -uae_u32 REGPARAM2 op_b0d8_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W -(An),An */ -uae_u32 REGPARAM2 op_b0e0_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (d16,An),An */ -uae_u32 REGPARAM2 op_b0e8_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_b0f0_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (xxx).W,An */ -uae_u32 REGPARAM2 op_b0f8_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (xxx).L,An */ -uae_u32 REGPARAM2 op_b0f9_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (d16,PC),An */ -uae_u32 REGPARAM2 op_b0fa_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_b0fb_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W #.W,An */ -uae_u32 REGPARAM2 op_b0fc_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,Dn */ -uae_u32 REGPARAM2 op_b100_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPM.B (An)+,(An)+ */ -uae_u32 REGPARAM2 op_b108_0_comp_ff(uae_u32 opcode) /* CMPM */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(An) */ -uae_u32 REGPARAM2 op_b110_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_b118_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,-(An) */ -uae_u32 REGPARAM2 op_b120_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_b128_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_b130_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_b138_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_b139_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,Dn */ -uae_u32 REGPARAM2 op_b140_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPM.W (An)+,(An)+ */ -uae_u32 REGPARAM2 op_b148_0_comp_ff(uae_u32 opcode) /* CMPM */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - { - dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(An) */ -uae_u32 REGPARAM2 op_b150_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_b158_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,-(An) */ -uae_u32 REGPARAM2 op_b160_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_b168_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_b170_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_b178_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_b179_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - xor_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,Dn */ -uae_u32 REGPARAM2 op_b180_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPM.L (An)+,(An)+ */ -uae_u32 REGPARAM2 op_b188_0_comp_ff(uae_u32 opcode) /* CMPM */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - { - dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(An) */ -uae_u32 REGPARAM2 op_b190_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_b198_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,-(An) */ -uae_u32 REGPARAM2 op_b1a0_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_b1a8_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_b1b0_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_b1b8_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_b1b9_0_comp_ff(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - xor_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L Dn,An */ -uae_u32 REGPARAM2 op_b1c0_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L An,An */ -uae_u32 REGPARAM2 op_b1c8_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (An),An */ -uae_u32 REGPARAM2 op_b1d0_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (An)+,An */ -uae_u32 REGPARAM2 op_b1d8_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L -(An),An */ -uae_u32 REGPARAM2 op_b1e0_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (d16,An),An */ -uae_u32 REGPARAM2 op_b1e8_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_b1f0_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (xxx).W,An */ -uae_u32 REGPARAM2 op_b1f8_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (xxx).L,An */ -uae_u32 REGPARAM2 op_b1f9_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (d16,PC),An */ -uae_u32 REGPARAM2 op_b1fa_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_b1fb_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L #.L,An */ -uae_u32 REGPARAM2 op_b1fc_0_comp_ff(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - start_needflags(); - cmp_l(dst,tmps); - live_flags(); - end_needflags(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,Dn */ -uae_u32 REGPARAM2 op_c000_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (An),Dn */ -uae_u32 REGPARAM2 op_c010_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (An)+,Dn */ -uae_u32 REGPARAM2 op_c018_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B -(An),Dn */ -uae_u32 REGPARAM2 op_c020_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_c028_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_c030_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_c038_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_c039_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_c03a_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_c03b_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,Dn */ -uae_u32 REGPARAM2 op_c03c_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,Dn */ -uae_u32 REGPARAM2 op_c040_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (An),Dn */ -uae_u32 REGPARAM2 op_c050_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (An)+,Dn */ -uae_u32 REGPARAM2 op_c058_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W -(An),Dn */ -uae_u32 REGPARAM2 op_c060_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_c068_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_c070_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_c078_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_c079_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_c07a_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_c07b_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,Dn */ -uae_u32 REGPARAM2 op_c07c_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,Dn */ -uae_u32 REGPARAM2 op_c080_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (An),Dn */ -uae_u32 REGPARAM2 op_c090_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (An)+,Dn */ -uae_u32 REGPARAM2 op_c098_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L -(An),Dn */ -uae_u32 REGPARAM2 op_c0a0_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_c0a8_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_c0b0_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_c0b8_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_c0b9_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_c0ba_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_c0bb_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,Dn */ -uae_u32 REGPARAM2 op_c0bc_0_comp_ff(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W Dn,Dn */ -uae_u32 REGPARAM2 op_c0c0_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int src = srcreg; - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (An),Dn */ -uae_u32 REGPARAM2 op_c0d0_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (An)+,Dn */ -uae_u32 REGPARAM2 op_c0d8_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W -(An),Dn */ -uae_u32 REGPARAM2 op_c0e0_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_c0e8_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_c0f0_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_c0f8_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_c0f9_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_c0fa_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_c0fb_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W #.W,Dn */ -uae_u32 REGPARAM2 op_c0fc_0_comp_ff(uae_u32 opcode) /* MULU */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(An) */ -uae_u32 REGPARAM2 op_c110_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_c118_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,-(An) */ -uae_u32 REGPARAM2 op_c120_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_c128_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_c130_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_c138_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_c139_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_b(dst,src); - live_flags(); - end_needflags(); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXG.L Dn,Dn */ -uae_u32 REGPARAM2 op_c140_0_comp_ff(uae_u32 opcode) /* EXG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - int tmp=scratchie++; - mov_l_rr(tmp,src); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - if(dstreg != tmp) { - mov_l_rr(dstreg, tmp); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXG.L An,An */ -uae_u32 REGPARAM2 op_c148_0_comp_ff(uae_u32 opcode) /* EXG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - mov_l_rr(tmp,src); - if(srcreg + 8 != dst) { - mov_l_rr(srcreg + 8, dst); - } - if(dstreg + 8 != tmp) { - mov_l_rr(dstreg + 8, tmp); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(An) */ -uae_u32 REGPARAM2 op_c150_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_c158_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,-(An) */ -uae_u32 REGPARAM2 op_c160_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_c168_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_c170_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_c178_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_c179_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - start_needflags(); - and_w(dst,src); - live_flags(); - end_needflags(); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXG.L Dn,An */ -uae_u32 REGPARAM2 op_c188_0_comp_ff(uae_u32 opcode) /* EXG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - mov_l_rr(tmp,src); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - if(dstreg + 8 != tmp) { - mov_l_rr(dstreg + 8, tmp); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(An) */ -uae_u32 REGPARAM2 op_c190_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_c198_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,-(An) */ -uae_u32 REGPARAM2 op_c1a0_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_c1a8_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_c1b0_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_c1b8_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_c1b9_0_comp_ff(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - start_needflags(); - and_l(dst,src); - live_flags(); - end_needflags(); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W Dn,Dn */ -uae_u32 REGPARAM2 op_c1c0_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int src = srcreg; - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (An),Dn */ -uae_u32 REGPARAM2 op_c1d0_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (An)+,Dn */ -uae_u32 REGPARAM2 op_c1d8_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W -(An),Dn */ -uae_u32 REGPARAM2 op_c1e0_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_c1e8_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_c1f0_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_c1f8_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_c1f9_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_c1fa_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_c1fb_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W #.W,Dn */ -uae_u32 REGPARAM2 op_c1fc_0_comp_ff(uae_u32 opcode) /* MULS */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - dont_care_flags(); - { - start_needflags(); - test_l_rr(dst,dst); - live_flags(); - end_needflags(); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,Dn */ -uae_u32 REGPARAM2 op_d000_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (An),Dn */ -uae_u32 REGPARAM2 op_d010_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (An)+,Dn */ -uae_u32 REGPARAM2 op_d018_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B -(An),Dn */ -uae_u32 REGPARAM2 op_d020_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_d028_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_d030_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_d038_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_d039_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_d03a_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_d03b_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,Dn */ -uae_u32 REGPARAM2 op_d03c_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,Dn */ -uae_u32 REGPARAM2 op_d040_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W An,Dn */ -uae_u32 REGPARAM2 op_d048_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (An),Dn */ -uae_u32 REGPARAM2 op_d050_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (An)+,Dn */ -uae_u32 REGPARAM2 op_d058_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W -(An),Dn */ -uae_u32 REGPARAM2 op_d060_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_d068_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_d070_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_d078_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_d079_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_d07a_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_d07b_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,Dn */ -uae_u32 REGPARAM2 op_d07c_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,Dn */ -uae_u32 REGPARAM2 op_d080_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L An,Dn */ -uae_u32 REGPARAM2 op_d088_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (An),Dn */ -uae_u32 REGPARAM2 op_d090_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (An)+,Dn */ -uae_u32 REGPARAM2 op_d098_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L -(An),Dn */ -uae_u32 REGPARAM2 op_d0a0_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_d0a8_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_d0b0_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_d0b8_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_d0b9_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_d0ba_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_d0bb_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,Dn */ -uae_u32 REGPARAM2 op_d0bc_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W Dn,An */ -uae_u32 REGPARAM2 op_d0c0_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W An,An */ -uae_u32 REGPARAM2 op_d0c8_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (An),An */ -uae_u32 REGPARAM2 op_d0d0_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (An)+,An */ -uae_u32 REGPARAM2 op_d0d8_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W -(An),An */ -uae_u32 REGPARAM2 op_d0e0_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (d16,An),An */ -uae_u32 REGPARAM2 op_d0e8_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_d0f0_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (xxx).W,An */ -uae_u32 REGPARAM2 op_d0f8_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (xxx).L,An */ -uae_u32 REGPARAM2 op_d0f9_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (d16,PC),An */ -uae_u32 REGPARAM2 op_d0fa_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_d0fb_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W #.W,An */ -uae_u32 REGPARAM2 op_d0fc_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.B Dn,Dn */ -uae_u32 REGPARAM2 op_d100_0_comp_ff(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - adc_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.B -(An),-(An) */ -uae_u32 REGPARAM2 op_d108_0_comp_ff(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - adc_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(An) */ -uae_u32 REGPARAM2 op_d110_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_d118_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,-(An) */ -uae_u32 REGPARAM2 op_d120_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_d128_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_d130_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_d138_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_d139_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_b(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.W Dn,Dn */ -uae_u32 REGPARAM2 op_d140_0_comp_ff(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - adc_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.W -(An),-(An) */ -uae_u32 REGPARAM2 op_d148_0_comp_ff(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - adc_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(An) */ -uae_u32 REGPARAM2 op_d150_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_d158_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,-(An) */ -uae_u32 REGPARAM2 op_d160_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_d168_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_d170_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_d178_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_d179_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - start_needflags(); - add_w(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.L Dn,Dn */ -uae_u32 REGPARAM2 op_d180_0_comp_ff(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - adc_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.L -(An),-(An) */ -uae_u32 REGPARAM2 op_d188_0_comp_ff(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - { - int zero=scratchie++; - int one=scratchie++; - if (needed_flags&FLAG_Z) { - mov_l_ri(zero,0); - mov_l_ri(one,-1); - make_flags_live(); - cmov_l_rr(zero,one,5); - } - restore_carry(); - start_needflags(); - adc_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,5); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(An) */ -uae_u32 REGPARAM2 op_d190_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_d198_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,-(An) */ -uae_u32 REGPARAM2 op_d1a0_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_d1a8_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_d1b0_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_d1b8_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_d1b9_0_comp_ff(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - start_needflags(); - add_l(dst,src); - live_flags(); - end_needflags(); - if (needed_flags&FLAG_X) { - duplicate_carry(); - } - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L Dn,An */ -uae_u32 REGPARAM2 op_d1c0_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L An,An */ -uae_u32 REGPARAM2 op_d1c8_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (An),An */ -uae_u32 REGPARAM2 op_d1d0_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (An)+,An */ -uae_u32 REGPARAM2 op_d1d8_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L -(An),An */ -uae_u32 REGPARAM2 op_d1e0_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (d16,An),An */ -uae_u32 REGPARAM2 op_d1e8_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_d1f0_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (xxx).W,An */ -uae_u32 REGPARAM2 op_d1f8_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (xxx).L,An */ -uae_u32 REGPARAM2 op_d1f9_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (d16,PC),An */ -uae_u32 REGPARAM2 op_d1fa_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_d1fb_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L #.L,An */ -uae_u32 REGPARAM2 op_d1fc_0_comp_ff(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ASRQ.B #,Dn */ -uae_u32 REGPARAM2 op_e000_0_comp_ff(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shra_b_ri(data,srcreg); - live_flags(); - end_needflags(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSRQ.B #,Dn */ -uae_u32 REGPARAM2 op_e008_0_comp_ff(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shrl_b_ri(data,srcreg); - live_flags(); - end_needflags(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* RORQ.B #,Dn */ -uae_u32 REGPARAM2 op_e018_0_comp_ff(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - ror_b_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_b_rr(data,data); - } - bt_l_ri(cdata,0x07); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASR.B Dn,Dn */ -uae_u32 REGPARAM2 op_e020_0_comp_ff(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int setval = scratchie++; - int odata = scratchie++; - mov_l_ri(cdata, 0); - mov_l_ri(setval, 0xffffffff); - test_l_ri(data, 0x00000080); - cmov_l_rr(setval, cdata, NATIVE_CC_EQ); - mov_l_rr(cdata, setval); - mov_l_rr(odata, setval); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, tmpcnt, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x08); - cmov_l_rr(cdata, setval, NATIVE_CC_HI); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shra_b_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 0, 0, 0); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_b_rr(data, cdata); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSR.B Dn,Dn */ -uae_u32 REGPARAM2 op_e028_0_comp_ff(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int odata = scratchie++; - mov_l_rr(odata, data); - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, cdata, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x08); - cmov_l_rr(odata, cdata, NATIVE_CC_HI); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shrl_b_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 7, 0, 1); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_b_rr(data, cdata); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROR.B Dn,Dn */ -uae_u32 REGPARAM2 op_e038_0_comp_ff(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - ror_b_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_b_rr(data,data); - } - bt_l_ri(cdata,0x07); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASRQ.W #,Dn */ -uae_u32 REGPARAM2 op_e040_0_comp_ff(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shra_w_ri(data,srcreg); - live_flags(); - end_needflags(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -#endif - -#ifdef PART_8 -/* LSRQ.W #,Dn */ -uae_u32 REGPARAM2 op_e048_0_comp_ff(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shrl_w_ri(data,srcreg); - live_flags(); - end_needflags(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* RORQ.W #,Dn */ -uae_u32 REGPARAM2 op_e058_0_comp_ff(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - ror_w_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_w_rr(data,data); - } - bt_l_ri(cdata,0x0f); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASR.W Dn,Dn */ -uae_u32 REGPARAM2 op_e060_0_comp_ff(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int setval = scratchie++; - int odata = scratchie++; - mov_l_ri(cdata, 0); - mov_l_ri(setval, 0xffffffff); - test_l_ri(data, 0x00008000); - cmov_l_rr(setval, cdata, NATIVE_CC_EQ); - mov_l_rr(cdata, setval); - mov_l_rr(odata, setval); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, tmpcnt, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x10); - cmov_l_rr(cdata, setval, NATIVE_CC_HI); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shra_w_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 0, 1, 0); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_w_rr(data, cdata); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSR.W Dn,Dn */ -uae_u32 REGPARAM2 op_e068_0_comp_ff(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int odata = scratchie++; - mov_l_rr(odata, data); - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, cdata, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x10); - cmov_l_rr(odata, cdata, NATIVE_CC_HI); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shrl_w_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 15, 1, 1); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_w_rr(data, cdata); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROR.W Dn,Dn */ -uae_u32 REGPARAM2 op_e078_0_comp_ff(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - ror_w_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_w_rr(data,data); - } - bt_l_ri(cdata,0x0f); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASRQ.L #,Dn */ -uae_u32 REGPARAM2 op_e080_0_comp_ff(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shra_l_ri(data,srcreg); - live_flags(); - end_needflags(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSRQ.L #,Dn */ -uae_u32 REGPARAM2 op_e088_0_comp_ff(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shrl_l_ri(data,srcreg); - live_flags(); - end_needflags(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* RORQ.L #,Dn */ -uae_u32 REGPARAM2 op_e098_0_comp_ff(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - ror_l_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_l_rr(data,data); - } - bt_l_ri(cdata,0x1f); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASR.L Dn,Dn */ -uae_u32 REGPARAM2 op_e0a0_0_comp_ff(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int setval = scratchie++; - int odata = scratchie++; - mov_l_ri(cdata, 0); - mov_l_ri(setval, 0xffffffff); - test_l_ri(data, 0x80000000); - cmov_l_rr(setval, cdata, NATIVE_CC_EQ); - mov_l_rr(cdata, setval); - mov_l_rr(odata, setval); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, tmpcnt, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x20); - cmov_l_rr(cdata, setval, NATIVE_CC_HI); - cmov_l_rr(data, setval, NATIVE_CC_EQ); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shra_l_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 0, 2, 0); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_l_rr(data, cdata); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSR.L Dn,Dn */ -uae_u32 REGPARAM2 op_e0a8_0_comp_ff(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int odata = scratchie++; - mov_l_rr(odata, data); - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, cdata, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x20); - cmov_l_rr(odata, cdata, NATIVE_CC_HI); - cmov_l_rr(data, cdata, NATIVE_CC_EQ); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shrl_l_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 31, 2, 1); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_l_rr(data, cdata); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROR.L Dn,Dn */ -uae_u32 REGPARAM2 op_e0b8_0_comp_ff(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - ror_l_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_l_rr(data,data); - } - bt_l_ri(cdata,0x1f); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASLQ.B #,Dn */ -uae_u32 REGPARAM2 op_e100_0_comp_ff(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shll_b_ri(data,srcreg); - live_flags(); - end_needflags(); - clear_overflow(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSLQ.B #,Dn */ -uae_u32 REGPARAM2 op_e108_0_comp_ff(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shll_b_ri(data,srcreg); - live_flags(); - end_needflags(); - clear_overflow(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROLQ.B #,Dn */ -uae_u32 REGPARAM2 op_e118_0_comp_ff(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - rol_b_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_b_rr(data,data); - } - bt_l_ri(cdata,0x00); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASL.B Dn,Dn */ -uae_u32 REGPARAM2 op_e120_0_comp_ff(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int odata = scratchie++; - mov_l_rr(odata, data); - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, cdata, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x08); - cmov_l_rr(odata, cdata, NATIVE_CC_HI); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_b_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 0, 0, 1); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_b_rr(data, cdata); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSL.B Dn,Dn */ -uae_u32 REGPARAM2 op_e128_0_comp_ff(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int odata = scratchie++; - mov_l_rr(odata, data); - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, cdata, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x08); - cmov_l_rr(odata, cdata, NATIVE_CC_HI); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_b_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 0, 0, 1); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_b_rr(data, cdata); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROL.B Dn,Dn */ -uae_u32 REGPARAM2 op_e138_0_comp_ff(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - rol_b_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_b_rr(data,data); - } - bt_l_ri(cdata,0x00); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASLQ.W #,Dn */ -uae_u32 REGPARAM2 op_e140_0_comp_ff(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shll_w_ri(data,srcreg); - live_flags(); - end_needflags(); - clear_overflow(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSLQ.W #,Dn */ -uae_u32 REGPARAM2 op_e148_0_comp_ff(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shll_w_ri(data,srcreg); - live_flags(); - end_needflags(); - clear_overflow(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROLQ.W #,Dn */ -uae_u32 REGPARAM2 op_e158_0_comp_ff(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - rol_w_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_w_rr(data,data); - } - bt_l_ri(cdata,0x00); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASL.W Dn,Dn */ -uae_u32 REGPARAM2 op_e160_0_comp_ff(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int odata = scratchie++; - mov_l_rr(odata, data); - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, cdata, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x10); - cmov_l_rr(odata, cdata, NATIVE_CC_HI); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_w_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 0, 1, 1); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_w_rr(data, cdata); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSL.W Dn,Dn */ -uae_u32 REGPARAM2 op_e168_0_comp_ff(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int odata = scratchie++; - mov_l_rr(odata, data); - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, cdata, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x10); - cmov_l_rr(odata, cdata, NATIVE_CC_HI); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_w_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 0, 1, 1); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_w_rr(data, cdata); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROL.W Dn,Dn */ -uae_u32 REGPARAM2 op_e178_0_comp_ff(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - rol_w_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_w_rr(data,data); - } - bt_l_ri(cdata,0x00); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASLQ.L #,Dn */ -uae_u32 REGPARAM2 op_e180_0_comp_ff(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shll_l_ri(data,srcreg); - live_flags(); - end_needflags(); - clear_overflow(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSLQ.L #,Dn */ -uae_u32 REGPARAM2 op_e188_0_comp_ff(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - start_needflags(); - shll_l_ri(data,srcreg); - live_flags(); - end_needflags(); - clear_overflow(); - duplicate_carry(); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROLQ.L #,Dn */ -uae_u32 REGPARAM2 op_e198_0_comp_ff(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - rol_l_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_l_rr(data,data); - } - bt_l_ri(cdata,0x00); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASL.L Dn,Dn */ -uae_u32 REGPARAM2 op_e1a0_0_comp_ff(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int odata = scratchie++; - mov_l_rr(odata, data); - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, cdata, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x20); - cmov_l_rr(odata, cdata, NATIVE_CC_HI); - cmov_l_rr(data, cdata, NATIVE_CC_EQ); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_l_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 0, 2, 1); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_l_rr(data, cdata); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSL.L Dn,Dn */ -uae_u32 REGPARAM2 op_e1a8_0_comp_ff(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - start_needflags(); - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int odata = scratchie++; - mov_l_rr(odata, data); - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmov_l_rr(odata, cdata, NATIVE_CC_EQ); - cmp_b_ri(tmpcnt, 0x20); - cmov_l_rr(odata, cdata, NATIVE_CC_HI); - cmov_l_rr(data, cdata, NATIVE_CC_EQ); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_l_rr(cdata, tmpcnt); - live_flags(); - end_needflags(); - setcc_for_cntzero(tmpcnt, cdata, odata, 0, 2, 1); - if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - mov_l_rr(data, cdata); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROL.L Dn,Dn */ -uae_u32 REGPARAM2 op_e1b8_0_comp_ff(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - rol_l_rr(data,cnt); - start_needflags(); - int cdata = scratchie++; - int zero = scratchie++; - int tmpcnt = scratchie++; - mov_l_rr(cdata,data); - mov_l_rr(tmpcnt,cnt); - mov_l_ri(zero,0); - and_l_ri(tmpcnt,63); - cmov_l_rr(cdata,zero,NATIVE_CC_EQ); - if (needed_flags & FLAG_ZNV) { - test_l_rr(data,data); - } - bt_l_ri(cdata,0x00); - live_flags(); - end_needflags(); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,Dn */ -uae_u32 REGPARAM2 op_f200_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,An */ -uae_u32 REGPARAM2 op_f208_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(An) */ -uae_u32 REGPARAM2 op_f210_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(An)+ */ -uae_u32 REGPARAM2 op_f218_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,-(An) */ -uae_u32 REGPARAM2 op_f220_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(d16,An) */ -uae_u32 REGPARAM2 op_f228_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_f230_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(xxx).W */ -uae_u32 REGPARAM2 op_f238_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(xxx).L */ -uae_u32 REGPARAM2 op_f239_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_f23a_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_f23b_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,#.L */ -uae_u32 REGPARAM2 op_f23c_0_comp_ff(uae_u32 opcode) /* FPP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,Dn */ -uae_u32 REGPARAM2 op_f240_0_comp_ff(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(An) */ -uae_u32 REGPARAM2 op_f250_0_comp_ff(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(An)+ */ -uae_u32 REGPARAM2 op_f258_0_comp_ff(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,-(An) */ -uae_u32 REGPARAM2 op_f260_0_comp_ff(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(d16,An) */ -uae_u32 REGPARAM2 op_f268_0_comp_ff(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_f270_0_comp_ff(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(xxx).W */ -uae_u32 REGPARAM2 op_f278_0_comp_ff(uae_u32 opcode) /* FScc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(xxx).L */ -uae_u32 REGPARAM2 op_f279_0_comp_ff(uae_u32 opcode) /* FScc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FBccQ.L #,#.W */ -uae_u32 REGPARAM2 op_f280_0_comp_ff(uae_u32 opcode) /* FBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 63); - #else - uae_s32 srcreg = (opcode & 63); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - comp_fbcc_opp(opcode); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FBccQ.L #,#.L */ -uae_u32 REGPARAM2 op_f2c0_0_comp_ff(uae_u32 opcode) /* FBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 63); - #else - uae_s32 srcreg = (opcode & 63); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - comp_fbcc_opp(opcode); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* MOVE16.L (An)+,(xxx).L */ -uae_u32 REGPARAM2 op_f600_0_comp_ff(uae_u32 opcode) /* MOVE16 */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int src=scratchie++; - int dst=scratchie++; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - mov_l_rr(src,srca); - mov_l_rr(dst,dsta); - and_l_ri(src,~15); - and_l_ri(dst,~15); - add_l_ri(srcreg+8,16); - if (special_mem || jit_n_addr_unsafe) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - } else - { - int tmp=scratchie; - scratchie+=4; - get_n_addr(src,src,scratchie); - get_n_addr(dst,dst,scratchie); - mov_l_rR(tmp+0,src,0); - mov_l_rR(tmp+1,src,4); - mov_l_rR(tmp+2,src,8); - mov_l_rR(tmp+3,src,12); - mov_l_Rr(dst,tmp+0,0); - forget_about(tmp+0); - mov_l_Rr(dst,tmp+1,4); - forget_about(tmp+1); - mov_l_Rr(dst,tmp+2,8); - forget_about(tmp+2); - mov_l_Rr(dst,tmp+3,12); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE16.L (xxx).L,(An)+ */ -uae_u32 REGPARAM2 op_f608_0_comp_ff(uae_u32 opcode) /* MOVE16 */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int src=scratchie++; - int dst=scratchie++; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - mov_l_rr(src,srca); - mov_l_rr(dst,dsta); - and_l_ri(src,~15); - and_l_ri(dst,~15); - add_l_ri(dstreg+8,16); - if (special_mem || jit_n_addr_unsafe) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - } else - { - int tmp=scratchie; - scratchie+=4; - get_n_addr(src,src,scratchie); - get_n_addr(dst,dst,scratchie); - mov_l_rR(tmp+0,src,0); - mov_l_rR(tmp+1,src,4); - mov_l_rR(tmp+2,src,8); - mov_l_rR(tmp+3,src,12); - mov_l_Rr(dst,tmp+0,0); - forget_about(tmp+0); - mov_l_Rr(dst,tmp+1,4); - forget_about(tmp+1); - mov_l_Rr(dst,tmp+2,8); - forget_about(tmp+2); - mov_l_Rr(dst,tmp+3,12); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE16.L (An),(xxx).L */ -uae_u32 REGPARAM2 op_f610_0_comp_ff(uae_u32 opcode) /* MOVE16 */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int src=scratchie++; - int dst=scratchie++; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - mov_l_rr(src,srca); - mov_l_rr(dst,dsta); - and_l_ri(src,~15); - and_l_ri(dst,~15); - if (special_mem || jit_n_addr_unsafe) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - } else - { - int tmp=scratchie; - scratchie+=4; - get_n_addr(src,src,scratchie); - get_n_addr(dst,dst,scratchie); - mov_l_rR(tmp+0,src,0); - mov_l_rR(tmp+1,src,4); - mov_l_rR(tmp+2,src,8); - mov_l_rR(tmp+3,src,12); - mov_l_Rr(dst,tmp+0,0); - forget_about(tmp+0); - mov_l_Rr(dst,tmp+1,4); - forget_about(tmp+1); - mov_l_Rr(dst,tmp+2,8); - forget_about(tmp+2); - mov_l_Rr(dst,tmp+3,12); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE16.L (xxx).L,(An) */ -uae_u32 REGPARAM2 op_f618_0_comp_ff(uae_u32 opcode) /* MOVE16 */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int src=scratchie++; - int dst=scratchie++; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - mov_l_rr(src,srca); - mov_l_rr(dst,dsta); - and_l_ri(src,~15); - and_l_ri(dst,~15); - if (special_mem || jit_n_addr_unsafe) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - } else - { - int tmp=scratchie; - scratchie+=4; - get_n_addr(src,src,scratchie); - get_n_addr(dst,dst,scratchie); - mov_l_rR(tmp+0,src,0); - mov_l_rR(tmp+1,src,4); - mov_l_rR(tmp+2,src,8); - mov_l_rR(tmp+3,src,12); - mov_l_Rr(dst,tmp+0,0); - forget_about(tmp+0); - mov_l_Rr(dst,tmp+1,4); - forget_about(tmp+1); - mov_l_Rr(dst,tmp+2,8); - forget_about(tmp+2); - mov_l_Rr(dst,tmp+3,12); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE16.L (An)+,(An)+ */ -uae_u32 REGPARAM2 op_f620_0_comp_ff(uae_u32 opcode) /* MOVE16 */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_s32 dstreg = 0; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int src=scratchie++; - int dst=scratchie++; - uae_u16 dstreg=((comp_get_iword((m68k_pc_offset+=2)-2))>>12)&0x07; - mov_l_rr(src,8+srcreg); - mov_l_rr(dst,8+dstreg); - and_l_ri(src,~15); - and_l_ri(dst,~15); - if (srcreg != dstreg) { - add_l_ri(srcreg+8,16); - } - add_l_ri(dstreg+8,16); - if (special_mem || jit_n_addr_unsafe) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - } else - { - int tmp=scratchie; - scratchie+=4; - get_n_addr(src,src,scratchie); - get_n_addr(dst,dst,scratchie); - mov_l_rR(tmp+0,src,0); - mov_l_rR(tmp+1,src,4); - mov_l_rR(tmp+2,src,8); - mov_l_rR(tmp+3,src,12); - mov_l_Rr(dst,tmp+0,0); - forget_about(tmp+0); - mov_l_Rr(dst,tmp+1,4); - forget_about(tmp+1); - mov_l_Rr(dst,tmp+2,8); - forget_about(tmp+2); - mov_l_Rr(dst,tmp+3,12); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - - -#if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) -#define PART_1 1 -#define PART_2 1 -#define PART_3 1 -#define PART_4 1 -#define PART_5 1 -#define PART_6 1 -#define PART_7 1 -#define PART_8 1 -#endif - -#ifdef USE_JIT_FPU -extern void comp_fpp_opp(); -extern void comp_fscc_opp(); -extern void comp_fbcc_opp(); -#endif - -#ifdef PART_1 -/* OR.B #.B,Dn */ -uae_u32 REGPARAM2 op_0_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(An) */ -uae_u32 REGPARAM2 op_10_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_18_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,-(An) */ -uae_u32 REGPARAM2 op_20_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_28_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_30_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_38_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_39_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,Dn */ -uae_u32 REGPARAM2 op_40_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(An) */ -uae_u32 REGPARAM2 op_50_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_58_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,-(An) */ -uae_u32 REGPARAM2 op_60_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_68_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_70_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_78_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_79_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,Dn */ -uae_u32 REGPARAM2 op_80_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(An) */ -uae_u32 REGPARAM2 op_90_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_98_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,-(An) */ -uae_u32 REGPARAM2 op_a0_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_a8_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_b0_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_b8_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_b9_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.L Dn,Dn */ -uae_u32 REGPARAM2 op_100_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(An) */ -uae_u32 REGPARAM2 op_110_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_118_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,-(An) */ -uae_u32 REGPARAM2 op_120_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_128_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_130_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_138_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_139_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(d16,PC) */ -uae_u32 REGPARAM2 op_13a_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_13b_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B Dn,#.B */ -uae_u32 REGPARAM2 op_13c_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = scratchie++; - mov_l_ri(dst, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.L Dn,Dn */ -uae_u32 REGPARAM2 op_140_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(An) */ -uae_u32 REGPARAM2 op_150_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_158_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,-(An) */ -uae_u32 REGPARAM2 op_160_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_168_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_170_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_178_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_179_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.L Dn,Dn */ -uae_u32 REGPARAM2 op_180_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(An) */ -uae_u32 REGPARAM2 op_190_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_198_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,-(An) */ -uae_u32 REGPARAM2 op_1a0_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_1a8_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_1b0_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_1b8_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_1b9_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.L Dn,Dn */ -uae_u32 REGPARAM2 op_1c0_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(An) */ -uae_u32 REGPARAM2 op_1d0_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_1d8_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,-(An) */ -uae_u32 REGPARAM2 op_1e0_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_1e8_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_1f0_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_1f8_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_1f9_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,Dn */ -uae_u32 REGPARAM2 op_200_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(An) */ -uae_u32 REGPARAM2 op_210_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_218_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,-(An) */ -uae_u32 REGPARAM2 op_220_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_228_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_230_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_238_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_239_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,Dn */ -uae_u32 REGPARAM2 op_240_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(An) */ -uae_u32 REGPARAM2 op_250_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_258_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,-(An) */ -uae_u32 REGPARAM2 op_260_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_268_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_270_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_278_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_279_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,Dn */ -uae_u32 REGPARAM2 op_280_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(An) */ -uae_u32 REGPARAM2 op_290_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_298_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,-(An) */ -uae_u32 REGPARAM2 op_2a0_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_2a8_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_2b0_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_2b8_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_2b9_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,Dn */ -uae_u32 REGPARAM2 op_400_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(An) */ -uae_u32 REGPARAM2 op_410_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_418_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,-(An) */ -uae_u32 REGPARAM2 op_420_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_428_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_430_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_438_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_439_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,Dn */ -uae_u32 REGPARAM2 op_440_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(An) */ -uae_u32 REGPARAM2 op_450_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_458_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,-(An) */ -uae_u32 REGPARAM2 op_460_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_468_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_470_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_478_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_479_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,Dn */ -uae_u32 REGPARAM2 op_480_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(An) */ -uae_u32 REGPARAM2 op_490_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_498_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,-(An) */ -uae_u32 REGPARAM2 op_4a0_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_4a8_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_4b0_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_4b8_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_4b9_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,Dn */ -uae_u32 REGPARAM2 op_600_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(An) */ -uae_u32 REGPARAM2 op_610_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_618_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,-(An) */ -uae_u32 REGPARAM2 op_620_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_628_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_630_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_638_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_639_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,Dn */ -uae_u32 REGPARAM2 op_640_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(An) */ -uae_u32 REGPARAM2 op_650_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_658_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,-(An) */ -uae_u32 REGPARAM2 op_660_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_668_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_670_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_678_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_679_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,Dn */ -uae_u32 REGPARAM2 op_680_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(An) */ -uae_u32 REGPARAM2 op_690_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_698_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,-(An) */ -uae_u32 REGPARAM2 op_6a0_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_6a8_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_6b0_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_6b8_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_6b9_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.L #.W,Dn */ -uae_u32 REGPARAM2 op_800_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(An) */ -uae_u32 REGPARAM2 op_810_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(An)+ */ -uae_u32 REGPARAM2 op_818_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,-(An) */ -uae_u32 REGPARAM2 op_820_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(d16,An) */ -uae_u32 REGPARAM2 op_828_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_830_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(xxx).W */ -uae_u32 REGPARAM2 op_838_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(xxx).L */ -uae_u32 REGPARAM2 op_839_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_83a_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BTST.B #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_83b_0_comp_nf(uae_u32 opcode) /* BTST */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bt_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.L #.W,Dn */ -uae_u32 REGPARAM2 op_840_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(An) */ -uae_u32 REGPARAM2 op_850_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(An)+ */ -uae_u32 REGPARAM2 op_858_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,-(An) */ -uae_u32 REGPARAM2 op_860_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(d16,An) */ -uae_u32 REGPARAM2 op_868_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_870_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(xxx).W */ -uae_u32 REGPARAM2 op_878_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCHG.B #.W,(xxx).L */ -uae_u32 REGPARAM2 op_879_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btc_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.L #.W,Dn */ -uae_u32 REGPARAM2 op_880_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(An) */ -uae_u32 REGPARAM2 op_890_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(An)+ */ -uae_u32 REGPARAM2 op_898_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,-(An) */ -uae_u32 REGPARAM2 op_8a0_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(d16,An) */ -uae_u32 REGPARAM2 op_8a8_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_8b0_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(xxx).W */ -uae_u32 REGPARAM2 op_8b8_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BCLR.B #.W,(xxx).L */ -uae_u32 REGPARAM2 op_8b9_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - btr_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.L #.W,Dn */ -uae_u32 REGPARAM2 op_8c0_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,31); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(An) */ -uae_u32 REGPARAM2 op_8d0_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(An)+ */ -uae_u32 REGPARAM2 op_8d8_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,-(An) */ -uae_u32 REGPARAM2 op_8e0_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(d16,An) */ -uae_u32 REGPARAM2 op_8e8_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_8f0_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(xxx).W */ -uae_u32 REGPARAM2 op_8f8_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSET.B #.W,(xxx).L */ -uae_u32 REGPARAM2 op_8f9_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - int s=scratchie++; - int tmp=scratchie++; - mov_l_rr(s,src); - and_l_ri(s,7); - bts_l_rr(dst,s); - sbb_l(s,s); - make_flags_live(); - dont_care_flags(); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,Dn */ -uae_u32 REGPARAM2 op_a00_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(An) */ -uae_u32 REGPARAM2 op_a10_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_a18_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,-(An) */ -uae_u32 REGPARAM2 op_a20_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_a28_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_a30_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_a38_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_a39_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,Dn */ -uae_u32 REGPARAM2 op_a40_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(An) */ -uae_u32 REGPARAM2 op_a50_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_a58_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,-(An) */ -uae_u32 REGPARAM2 op_a60_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_a68_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_a70_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_a78_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_a79_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,Dn */ -uae_u32 REGPARAM2 op_a80_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - { - xor_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(An) */ -uae_u32 REGPARAM2 op_a90_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_a98_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,-(An) */ -uae_u32 REGPARAM2 op_aa0_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_aa8_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_ab0_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_ab8_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_ab9_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_2 -/* CMP.B #.B,Dn */ -uae_u32 REGPARAM2 op_c00_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(An) */ -uae_u32 REGPARAM2 op_c10_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_c18_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,-(An) */ -uae_u32 REGPARAM2 op_c20_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_c28_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_c30_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_c38_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_c39_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(d16,PC) */ -uae_u32 REGPARAM2 op_c3a_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_c3b_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,Dn */ -uae_u32 REGPARAM2 op_c40_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(An) */ -uae_u32 REGPARAM2 op_c50_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_c58_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,-(An) */ -uae_u32 REGPARAM2 op_c60_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_c68_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_c70_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_c78_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_c79_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_c7a_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_c7b_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,Dn */ -uae_u32 REGPARAM2 op_c80_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(An) */ -uae_u32 REGPARAM2 op_c90_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_c98_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,-(An) */ -uae_u32 REGPARAM2 op_ca0_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_ca8_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_cb0_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_cb8_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_cb9_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(d16,PC) */ -uae_u32 REGPARAM2 op_cba_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_cbb_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,Dn */ -uae_u32 REGPARAM2 op_1000_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),Dn */ -uae_u32 REGPARAM2 op_1010_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,Dn */ -uae_u32 REGPARAM2 op_1018_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),Dn */ -uae_u32 REGPARAM2 op_1020_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_1028_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_1030_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_1038_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_1039_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_103a_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_103b_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,Dn */ -uae_u32 REGPARAM2 op_103c_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_b_rr(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(An) */ -uae_u32 REGPARAM2 op_1080_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(An) */ -uae_u32 REGPARAM2 op_1090_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(An) */ -uae_u32 REGPARAM2 op_1098_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(An) */ -uae_u32 REGPARAM2 op_10a0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(An) */ -uae_u32 REGPARAM2 op_10a8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(An) */ -uae_u32 REGPARAM2 op_10b0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(An) */ -uae_u32 REGPARAM2 op_10b8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(An) */ -uae_u32 REGPARAM2 op_10b9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(An) */ -uae_u32 REGPARAM2 op_10ba_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(An) */ -uae_u32 REGPARAM2 op_10bb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(An) */ -uae_u32 REGPARAM2 op_10bc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_10c0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(An)+ */ -uae_u32 REGPARAM2 op_10d0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(An)+ */ -uae_u32 REGPARAM2 op_10d8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(An)+ */ -uae_u32 REGPARAM2 op_10e0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(An)+ */ -uae_u32 REGPARAM2 op_10e8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(An)+ */ -uae_u32 REGPARAM2 op_10f0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(An)+ */ -uae_u32 REGPARAM2 op_10f8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(An)+ */ -uae_u32 REGPARAM2 op_10f9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(An)+ */ -uae_u32 REGPARAM2 op_10fa_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(An)+ */ -uae_u32 REGPARAM2 op_10fb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(An)+ */ -uae_u32 REGPARAM2 op_10fc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,-(An) */ -uae_u32 REGPARAM2 op_1100_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),-(An) */ -uae_u32 REGPARAM2 op_1110_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,-(An) */ -uae_u32 REGPARAM2 op_1118_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),-(An) */ -uae_u32 REGPARAM2 op_1120_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),-(An) */ -uae_u32 REGPARAM2 op_1128_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),-(An) */ -uae_u32 REGPARAM2 op_1130_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,-(An) */ -uae_u32 REGPARAM2 op_1138_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,-(An) */ -uae_u32 REGPARAM2 op_1139_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),-(An) */ -uae_u32 REGPARAM2 op_113a_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),-(An) */ -uae_u32 REGPARAM2 op_113b_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,-(An) */ -uae_u32 REGPARAM2 op_113c_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_1140_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(d16,An) */ -uae_u32 REGPARAM2 op_1150_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(d16,An) */ -uae_u32 REGPARAM2 op_1158_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(d16,An) */ -uae_u32 REGPARAM2 op_1160_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(d16,An) */ -uae_u32 REGPARAM2 op_1168_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_1170_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(d16,An) */ -uae_u32 REGPARAM2 op_1178_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(d16,An) */ -uae_u32 REGPARAM2 op_1179_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(d16,An) */ -uae_u32 REGPARAM2 op_117a_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_117b_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(d16,An) */ -uae_u32 REGPARAM2 op_117c_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_1180_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_1190_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_1198_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11a0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11a8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11b0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11b8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11b9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11ba_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11bb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_11bc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_11c0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(xxx).W */ -uae_u32 REGPARAM2 op_11d0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(xxx).W */ -uae_u32 REGPARAM2 op_11d8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(xxx).W */ -uae_u32 REGPARAM2 op_11e0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(xxx).W */ -uae_u32 REGPARAM2 op_11e8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_11f0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(xxx).W */ -uae_u32 REGPARAM2 op_11f8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(xxx).W */ -uae_u32 REGPARAM2 op_11f9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(xxx).W */ -uae_u32 REGPARAM2 op_11fa_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_11fb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(xxx).W */ -uae_u32 REGPARAM2 op_11fc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_13c0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An),(xxx).L */ -uae_u32 REGPARAM2 op_13d0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (An)+,(xxx).L */ -uae_u32 REGPARAM2 op_13d8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B -(An),(xxx).L */ -uae_u32 REGPARAM2 op_13e0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,An),(xxx).L */ -uae_u32 REGPARAM2 op_13e8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,An,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_13f0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).W,(xxx).L */ -uae_u32 REGPARAM2 op_13f8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (xxx).L,(xxx).L */ -uae_u32 REGPARAM2 op_13f9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d16,PC),(xxx).L */ -uae_u32 REGPARAM2 op_13fa_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B (d8,PC,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_13fb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.B #.B,(xxx).L */ -uae_u32 REGPARAM2 op_13fc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writebyte(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,Dn */ -uae_u32 REGPARAM2 op_2000_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,Dn */ -uae_u32 REGPARAM2 op_2008_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),Dn */ -uae_u32 REGPARAM2 op_2010_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,Dn */ -uae_u32 REGPARAM2 op_2018_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),Dn */ -uae_u32 REGPARAM2 op_2020_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_2028_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_2030_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_2038_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_2039_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_203a_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_203b_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,Dn */ -uae_u32 REGPARAM2 op_203c_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L Dn,An */ -uae_u32 REGPARAM2 op_2040_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L An,An */ -uae_u32 REGPARAM2 op_2048_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (An),An */ -uae_u32 REGPARAM2 op_2050_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (An)+,An */ -uae_u32 REGPARAM2 op_2058_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L -(An),An */ -uae_u32 REGPARAM2 op_2060_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (d16,An),An */ -uae_u32 REGPARAM2 op_2068_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_2070_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (xxx).W,An */ -uae_u32 REGPARAM2 op_2078_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (xxx).L,An */ -uae_u32 REGPARAM2 op_2079_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (d16,PC),An */ -uae_u32 REGPARAM2 op_207a_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_207b_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.L #.L,An */ -uae_u32 REGPARAM2 op_207c_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - mov_l_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(An) */ -uae_u32 REGPARAM2 op_2080_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(An) */ -uae_u32 REGPARAM2 op_2088_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(An) */ -uae_u32 REGPARAM2 op_2090_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(An) */ -uae_u32 REGPARAM2 op_2098_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(An) */ -uae_u32 REGPARAM2 op_20a0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),(An) */ -uae_u32 REGPARAM2 op_20a8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(An) */ -uae_u32 REGPARAM2 op_20b0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(An) */ -uae_u32 REGPARAM2 op_20b8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(An) */ -uae_u32 REGPARAM2 op_20b9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(An) */ -uae_u32 REGPARAM2 op_20ba_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(An) */ -uae_u32 REGPARAM2 op_20bb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(An) */ -uae_u32 REGPARAM2 op_20bc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_20c0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(An)+ */ -uae_u32 REGPARAM2 op_20c8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(An)+ */ -uae_u32 REGPARAM2 op_20d0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(An)+ */ -uae_u32 REGPARAM2 op_20d8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(An)+ */ -uae_u32 REGPARAM2 op_20e0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),(An)+ */ -uae_u32 REGPARAM2 op_20e8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(An)+ */ -uae_u32 REGPARAM2 op_20f0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(An)+ */ -uae_u32 REGPARAM2 op_20f8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(An)+ */ -uae_u32 REGPARAM2 op_20f9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(An)+ */ -uae_u32 REGPARAM2 op_20fa_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(An)+ */ -uae_u32 REGPARAM2 op_20fb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(An)+ */ -uae_u32 REGPARAM2 op_20fc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,-(An) */ -uae_u32 REGPARAM2 op_2100_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,-(An) */ -uae_u32 REGPARAM2 op_2108_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),-(An) */ -uae_u32 REGPARAM2 op_2110_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,-(An) */ -uae_u32 REGPARAM2 op_2118_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),-(An) */ -uae_u32 REGPARAM2 op_2120_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),-(An) */ -uae_u32 REGPARAM2 op_2128_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),-(An) */ -uae_u32 REGPARAM2 op_2130_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,-(An) */ -uae_u32 REGPARAM2 op_2138_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,-(An) */ -uae_u32 REGPARAM2 op_2139_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),-(An) */ -uae_u32 REGPARAM2 op_213a_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),-(An) */ -uae_u32 REGPARAM2 op_213b_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,-(An) */ -uae_u32 REGPARAM2 op_213c_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_2140_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(d16,An) */ -uae_u32 REGPARAM2 op_2148_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(d16,An) */ -uae_u32 REGPARAM2 op_2150_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(d16,An) */ -uae_u32 REGPARAM2 op_2158_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(d16,An) */ -uae_u32 REGPARAM2 op_2160_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),(d16,An) */ -uae_u32 REGPARAM2 op_2168_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_2170_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(d16,An) */ -uae_u32 REGPARAM2 op_2178_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(d16,An) */ -uae_u32 REGPARAM2 op_2179_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(d16,An) */ -uae_u32 REGPARAM2 op_217a_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_217b_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(d16,An) */ -uae_u32 REGPARAM2 op_217c_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_2180_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_2188_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_2190_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_2198_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21a0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_3 -/* MOVE.L (d16,An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21a8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21b0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21b8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21b9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21ba_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21bb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_21bc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_21c0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(xxx).W */ -uae_u32 REGPARAM2 op_21c8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(xxx).W */ -uae_u32 REGPARAM2 op_21d0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(xxx).W */ -uae_u32 REGPARAM2 op_21d8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(xxx).W */ -uae_u32 REGPARAM2 op_21e0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),(xxx).W */ -uae_u32 REGPARAM2 op_21e8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_21f0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(xxx).W */ -uae_u32 REGPARAM2 op_21f8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(xxx).W */ -uae_u32 REGPARAM2 op_21f9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(xxx).W */ -uae_u32 REGPARAM2 op_21fa_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_21fb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(xxx).W */ -uae_u32 REGPARAM2 op_21fc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_23c0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L An,(xxx).L */ -uae_u32 REGPARAM2 op_23c8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An),(xxx).L */ -uae_u32 REGPARAM2 op_23d0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (An)+,(xxx).L */ -uae_u32 REGPARAM2 op_23d8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L -(An),(xxx).L */ -uae_u32 REGPARAM2 op_23e0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,An),(xxx).L */ -uae_u32 REGPARAM2 op_23e8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,An,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_23f0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).W,(xxx).L */ -uae_u32 REGPARAM2 op_23f8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (xxx).L,(xxx).L */ -uae_u32 REGPARAM2 op_23f9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d16,PC),(xxx).L */ -uae_u32 REGPARAM2 op_23fa_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L (d8,PC,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_23fb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.L #.L,(xxx).L */ -uae_u32 REGPARAM2 op_23fc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writelong(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,Dn */ -uae_u32 REGPARAM2 op_3000_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,Dn */ -uae_u32 REGPARAM2 op_3008_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),Dn */ -uae_u32 REGPARAM2 op_3010_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,Dn */ -uae_u32 REGPARAM2 op_3018_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),Dn */ -uae_u32 REGPARAM2 op_3020_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_3028_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_3030_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_3038_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_3039_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_303a_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_303b_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,Dn */ -uae_u32 REGPARAM2 op_303c_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - or_l(dst,scratchie); - forget_about(scratchie); - } else - mov_w_rr(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W Dn,An */ -uae_u32 REGPARAM2 op_3040_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W An,An */ -uae_u32 REGPARAM2 op_3048_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (An),An */ -uae_u32 REGPARAM2 op_3050_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (An)+,An */ -uae_u32 REGPARAM2 op_3058_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W -(An),An */ -uae_u32 REGPARAM2 op_3060_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (d16,An),An */ -uae_u32 REGPARAM2 op_3068_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_3070_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (xxx).W,An */ -uae_u32 REGPARAM2 op_3078_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (xxx).L,An */ -uae_u32 REGPARAM2 op_3079_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (d16,PC),An */ -uae_u32 REGPARAM2 op_307a_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_307b_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEA.W #.W,An */ -uae_u32 REGPARAM2 op_307c_0_comp_nf(uae_u32 opcode) /* MOVEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - { - int tmps=scratchie++; - sign_extend_16_rr(dst,src); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(An) */ -uae_u32 REGPARAM2 op_3080_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(An) */ -uae_u32 REGPARAM2 op_3088_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(An) */ -uae_u32 REGPARAM2 op_3090_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(An) */ -uae_u32 REGPARAM2 op_3098_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(An) */ -uae_u32 REGPARAM2 op_30a0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(An) */ -uae_u32 REGPARAM2 op_30a8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(An) */ -uae_u32 REGPARAM2 op_30b0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(An) */ -uae_u32 REGPARAM2 op_30b8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(An) */ -uae_u32 REGPARAM2 op_30b9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(An) */ -uae_u32 REGPARAM2 op_30ba_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(An) */ -uae_u32 REGPARAM2 op_30bb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(An) */ -uae_u32 REGPARAM2 op_30bc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_30c0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(An)+ */ -uae_u32 REGPARAM2 op_30c8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(An)+ */ -uae_u32 REGPARAM2 op_30d0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(An)+ */ -uae_u32 REGPARAM2 op_30d8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(An)+ */ -uae_u32 REGPARAM2 op_30e0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(An)+ */ -uae_u32 REGPARAM2 op_30e8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(An)+ */ -uae_u32 REGPARAM2 op_30f0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(An)+ */ -uae_u32 REGPARAM2 op_30f8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(An)+ */ -uae_u32 REGPARAM2 op_30f9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(An)+ */ -uae_u32 REGPARAM2 op_30fa_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(An)+ */ -uae_u32 REGPARAM2 op_30fb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_30fc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,-(An) */ -uae_u32 REGPARAM2 op_3100_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,-(An) */ -uae_u32 REGPARAM2 op_3108_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),-(An) */ -uae_u32 REGPARAM2 op_3110_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,-(An) */ -uae_u32 REGPARAM2 op_3118_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),-(An) */ -uae_u32 REGPARAM2 op_3120_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),-(An) */ -uae_u32 REGPARAM2 op_3128_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),-(An) */ -uae_u32 REGPARAM2 op_3130_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,-(An) */ -uae_u32 REGPARAM2 op_3138_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,-(An) */ -uae_u32 REGPARAM2 op_3139_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),-(An) */ -uae_u32 REGPARAM2 op_313a_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),-(An) */ -uae_u32 REGPARAM2 op_313b_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,-(An) */ -uae_u32 REGPARAM2 op_313c_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_3140_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(d16,An) */ -uae_u32 REGPARAM2 op_3148_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(d16,An) */ -uae_u32 REGPARAM2 op_3150_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(d16,An) */ -uae_u32 REGPARAM2 op_3158_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(d16,An) */ -uae_u32 REGPARAM2 op_3160_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(d16,An) */ -uae_u32 REGPARAM2 op_3168_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_3170_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(d16,An) */ -uae_u32 REGPARAM2 op_3178_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(d16,An) */ -uae_u32 REGPARAM2 op_3179_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(d16,An) */ -uae_u32 REGPARAM2 op_317a_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(d16,An) */ -uae_u32 REGPARAM2 op_317b_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_317c_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_3180_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_3188_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_3190_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_3198_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31a0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31a8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31b0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31b8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31b9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31ba_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31bb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_31bc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_31c0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(xxx).W */ -uae_u32 REGPARAM2 op_31c8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(xxx).W */ -uae_u32 REGPARAM2 op_31d0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(xxx).W */ -uae_u32 REGPARAM2 op_31d8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(xxx).W */ -uae_u32 REGPARAM2 op_31e0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(xxx).W */ -uae_u32 REGPARAM2 op_31e8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_31f0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(xxx).W */ -uae_u32 REGPARAM2 op_31f8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(xxx).W */ -uae_u32 REGPARAM2 op_31f9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(xxx).W */ -uae_u32 REGPARAM2 op_31fa_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(xxx).W */ -uae_u32 REGPARAM2 op_31fb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_31fc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_33c0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W An,(xxx).L */ -uae_u32 REGPARAM2 op_33c8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An),(xxx).L */ -uae_u32 REGPARAM2 op_33d0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (An)+,(xxx).L */ -uae_u32 REGPARAM2 op_33d8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W -(An),(xxx).L */ -uae_u32 REGPARAM2 op_33e0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,An),(xxx).L */ -uae_u32 REGPARAM2 op_33e8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,An,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_33f0_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).W,(xxx).L */ -uae_u32 REGPARAM2 op_33f8_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (xxx).L,(xxx).L */ -uae_u32 REGPARAM2 op_33f9_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d16,PC),(xxx).L */ -uae_u32 REGPARAM2 op_33fa_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W (d8,PC,Xn),(xxx).L */ -uae_u32 REGPARAM2 op_33fb_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_33fc_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - writeword(dsta, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B Dn */ -uae_u32 REGPARAM2 op_4000_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - if(srcreg != dst) { - mov_b_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (An) */ -uae_u32 REGPARAM2 op_4010_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (An)+ */ -uae_u32 REGPARAM2 op_4018_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B -(An) */ -uae_u32 REGPARAM2 op_4020_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (d16,An) */ -uae_u32 REGPARAM2 op_4028_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4030_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (xxx).W */ -uae_u32 REGPARAM2 op_4038_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.B (xxx).L */ -uae_u32 REGPARAM2 op_4039_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W Dn */ -uae_u32 REGPARAM2 op_4040_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - if(srcreg != dst) { - mov_w_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (An) */ -uae_u32 REGPARAM2 op_4050_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (An)+ */ -uae_u32 REGPARAM2 op_4058_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W -(An) */ -uae_u32 REGPARAM2 op_4060_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (d16,An) */ -uae_u32 REGPARAM2 op_4068_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4070_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (xxx).W */ -uae_u32 REGPARAM2 op_4078_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.W (xxx).L */ -uae_u32 REGPARAM2 op_4079_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L Dn */ -uae_u32 REGPARAM2 op_4080_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (An) */ -uae_u32 REGPARAM2 op_4090_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (An)+ */ -uae_u32 REGPARAM2 op_4098_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L -(An) */ -uae_u32 REGPARAM2 op_40a0_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (d16,An) */ -uae_u32 REGPARAM2 op_40a8_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_40b0_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (xxx).W */ -uae_u32 REGPARAM2 op_40b8_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEGX.L (xxx).L */ -uae_u32 REGPARAM2 op_40b9_0_comp_nf(uae_u32 opcode) /* NEGX */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (An),An */ -uae_u32 REGPARAM2 op_41d0_0_comp_nf(uae_u32 opcode) /* LEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (d16,An),An */ -uae_u32 REGPARAM2 op_41e8_0_comp_nf(uae_u32 opcode) /* LEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_41f0_0_comp_nf(uae_u32 opcode) /* LEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (xxx).W,An */ -uae_u32 REGPARAM2 op_41f8_0_comp_nf(uae_u32 opcode) /* LEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (xxx).L,An */ -uae_u32 REGPARAM2 op_41f9_0_comp_nf(uae_u32 opcode) /* LEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (d16,PC),An */ -uae_u32 REGPARAM2 op_41fa_0_comp_nf(uae_u32 opcode) /* LEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LEA.L (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_41fb_0_comp_nf(uae_u32 opcode) /* LEA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if(dstreg + 8 != srca) { - mov_l_rr(dstreg + 8, srca); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B Dn */ -uae_u32 REGPARAM2 op_4200_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - if(srcreg != dst) { - mov_b_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (An) */ -uae_u32 REGPARAM2 op_4210_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (An)+ */ -uae_u32 REGPARAM2 op_4218_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B -(An) */ -uae_u32 REGPARAM2 op_4220_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (d16,An) */ -uae_u32 REGPARAM2 op_4228_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4230_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (xxx).W */ -uae_u32 REGPARAM2 op_4238_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.B (xxx).L */ -uae_u32 REGPARAM2 op_4239_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst=scratchie++; - mov_l_ri(dst,0); - writebyte(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W Dn */ -uae_u32 REGPARAM2 op_4240_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - if(srcreg != dst) { - mov_w_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (An) */ -uae_u32 REGPARAM2 op_4250_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (An)+ */ -uae_u32 REGPARAM2 op_4258_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W -(An) */ -uae_u32 REGPARAM2 op_4260_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (d16,An) */ -uae_u32 REGPARAM2 op_4268_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4270_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (xxx).W */ -uae_u32 REGPARAM2 op_4278_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.W (xxx).L */ -uae_u32 REGPARAM2 op_4279_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst=scratchie++; - mov_l_ri(dst,0); - writeword(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L Dn */ -uae_u32 REGPARAM2 op_4280_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (An) */ -uae_u32 REGPARAM2 op_4290_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (An)+ */ -uae_u32 REGPARAM2 op_4298_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L -(An) */ -uae_u32 REGPARAM2 op_42a0_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int dst=scratchie++; - mov_l_ri(dst,0); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (d16,An) */ -uae_u32 REGPARAM2 op_42a8_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_42b0_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (xxx).W */ -uae_u32 REGPARAM2 op_42b8_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst=scratchie++; - mov_l_ri(dst,0); - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CLR.L (xxx).L */ -uae_u32 REGPARAM2 op_42b9_0_comp_nf(uae_u32 opcode) /* CLR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst=scratchie++; - mov_l_ri(dst,0); - writelong(srca, dst, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B Dn */ -uae_u32 REGPARAM2 op_4400_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_b(dst,src); - if(srcreg != dst) { - mov_b_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B (An) */ -uae_u32 REGPARAM2 op_4410_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_4 -/* NEG.B (An)+ */ -uae_u32 REGPARAM2 op_4418_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B -(An) */ -uae_u32 REGPARAM2 op_4420_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B (d16,An) */ -uae_u32 REGPARAM2 op_4428_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4430_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B (xxx).W */ -uae_u32 REGPARAM2 op_4438_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.B (xxx).L */ -uae_u32 REGPARAM2 op_4439_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_b(dst,src); - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W Dn */ -uae_u32 REGPARAM2 op_4440_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_w(dst,src); - if(srcreg != dst) { - mov_w_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (An) */ -uae_u32 REGPARAM2 op_4450_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (An)+ */ -uae_u32 REGPARAM2 op_4458_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W -(An) */ -uae_u32 REGPARAM2 op_4460_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (d16,An) */ -uae_u32 REGPARAM2 op_4468_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4470_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (xxx).W */ -uae_u32 REGPARAM2 op_4478_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.W (xxx).L */ -uae_u32 REGPARAM2 op_4479_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_w(dst,src); - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L Dn */ -uae_u32 REGPARAM2 op_4480_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_l(dst,src); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (An) */ -uae_u32 REGPARAM2 op_4490_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (An)+ */ -uae_u32 REGPARAM2 op_4498_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L -(An) */ -uae_u32 REGPARAM2 op_44a0_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (d16,An) */ -uae_u32 REGPARAM2 op_44a8_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_44b0_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (xxx).W */ -uae_u32 REGPARAM2 op_44b8_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NEG.L (xxx).L */ -uae_u32 REGPARAM2 op_44b9_0_comp_nf(uae_u32 opcode) /* NEG */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0); - dont_care_flags(); - sub_l(dst,src); - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B Dn */ -uae_u32 REGPARAM2 op_4600_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - if(srcreg != dst) { - mov_b_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (An) */ -uae_u32 REGPARAM2 op_4610_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (An)+ */ -uae_u32 REGPARAM2 op_4618_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B -(An) */ -uae_u32 REGPARAM2 op_4620_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (d16,An) */ -uae_u32 REGPARAM2 op_4628_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4630_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (xxx).W */ -uae_u32 REGPARAM2 op_4638_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.B (xxx).L */ -uae_u32 REGPARAM2 op_4639_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W Dn */ -uae_u32 REGPARAM2 op_4640_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - if(srcreg != dst) { - mov_w_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (An) */ -uae_u32 REGPARAM2 op_4650_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (An)+ */ -uae_u32 REGPARAM2 op_4658_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W -(An) */ -uae_u32 REGPARAM2 op_4660_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (d16,An) */ -uae_u32 REGPARAM2 op_4668_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4670_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (xxx).W */ -uae_u32 REGPARAM2 op_4678_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.W (xxx).L */ -uae_u32 REGPARAM2 op_4679_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L Dn */ -uae_u32 REGPARAM2 op_4680_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - xor_l(dst,src); - } - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (An) */ -uae_u32 REGPARAM2 op_4690_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (An)+ */ -uae_u32 REGPARAM2 op_4698_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L -(An) */ -uae_u32 REGPARAM2 op_46a0_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(srca, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (d16,An) */ -uae_u32 REGPARAM2 op_46a8_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_46b0_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (xxx).W */ -uae_u32 REGPARAM2 op_46b8_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOT.L (xxx).L */ -uae_u32 REGPARAM2 op_46b9_0_comp_nf(uae_u32 opcode) /* NOT */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(srca, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LINK.L An,#.L */ -uae_u32 REGPARAM2 op_4808_0_comp_nf(uae_u32 opcode) /* LINK */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - if (srcreg == 7) { - m68k_pc_offset = m68k_pc_offset_thisinst; - FAIL(1); - return 0; - } - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int offs = scratchie++; - mov_l_ri(offs, comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,src,scratchie); - mov_l_rr(src,SP_REG); - add_l(SP_REG,offs); - if(srcreg + 8 != src) { - mov_l_rr(srcreg + 8, src); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SWAP.W Dn */ -uae_u32 REGPARAM2 op_4840_0_comp_nf(uae_u32 opcode) /* SWAP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - rol_l_ri(src,16); - if(srcreg != src) { - mov_l_rr(srcreg, src); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (An) */ -uae_u32 REGPARAM2 op_4850_0_comp_nf(uae_u32 opcode) /* PEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if (srcreg==7) dodgy=1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (d16,An) */ -uae_u32 REGPARAM2 op_4868_0_comp_nf(uae_u32 opcode) /* PEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if (srcreg==7) dodgy=1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4870_0_comp_nf(uae_u32 opcode) /* PEA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if (srcreg==7) dodgy=1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (xxx).W */ -uae_u32 REGPARAM2 op_4878_0_comp_nf(uae_u32 opcode) /* PEA */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (xxx).L */ -uae_u32 REGPARAM2 op_4879_0_comp_nf(uae_u32 opcode) /* PEA */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (d16,PC) */ -uae_u32 REGPARAM2 op_487a_0_comp_nf(uae_u32 opcode) /* PEA */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* PEA.L (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_487b_0_comp_nf(uae_u32 opcode) /* PEA */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - { - int dsta = dodgy ? scratchie++ : 7 + 8; - lea_l_brr(7 + 8, 7 + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + 7); - } - writelong(dsta, srca, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXT.W Dn */ -uae_u32 REGPARAM2 op_4880_0_comp_nf(uae_u32 opcode) /* EXT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - { - int dst = scratchie++; - sign_extend_8_rr(dst,src); - if(srcreg != dst) { - mov_w_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,(An) */ -uae_u32 REGPARAM2 op_4890_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(srca, dstreg + 8); - } - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - offset+=2; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writeword(tmp,i,scratchie); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,-(An) */ -uae_u32 REGPARAM2 op_48a0_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca=dodgy?scratchie++:dstreg+8; - if (dodgy) { - mov_l_rr(srca,8+dstreg); - } - if (1 && !special_mem && !jit_n_addr_unsafe && !(mask & (1 << (7 - dstreg)))) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - offset-=2; - mov_l_rr(tmp,15-i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - } - } - lea_l_brr(8+dstreg,srca,(uae_s32)offset); - } else { - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - sub_l_ri(srca,2); - writeword(srca,15-i,scratchie); - } - } - mov_l_rr(8+dstreg,srca); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_48a8_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + dstreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - offset+=2; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writeword(tmp,i,scratchie); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_48b0_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - offset+=2; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writeword(tmp,i,scratchie); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_48b8_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - offset+=2; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writeword(tmp,i,scratchie); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_48b9_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); - offset+=2; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writeword(tmp,i,scratchie); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXT.L Dn */ -uae_u32 REGPARAM2 op_48c0_0_comp_nf(uae_u32 opcode) /* EXT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - { - int dst = src; - sign_extend_16_rr(src,src); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,(An) */ -uae_u32 REGPARAM2 op_48d0_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(srca, dstreg + 8); - } - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - offset+=4; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writelong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,-(An) */ -uae_u32 REGPARAM2 op_48e0_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(srca, 8 + dstreg); - } - if (1 && !special_mem && !jit_n_addr_unsafe && !(mask & (1 << (7 - dstreg)))) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - offset-=4; - mov_l_rr(tmp,15-i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - } - } - lea_l_brr(8+dstreg,srca,(uae_s32)offset); - } else { - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - sub_l_ri(srca,4); - writelong(srca,15-i,scratchie); - } - } - mov_l_rr(8+dstreg,srca); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,(d16,An) */ -uae_u32 REGPARAM2 op_48e8_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + dstreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - offset+=4; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writelong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_48f0_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - offset+=4; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writelong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,(xxx).W */ -uae_u32 REGPARAM2 op_48f8_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - offset+=4; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writelong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMLE.L #.W,(xxx).L */ -uae_u32 REGPARAM2 op_48f9_0_comp_nf(uae_u32 opcode) /* MVMLE */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - int tmp=scratchie++; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); - offset+=4; - } - } - } else { - mov_l_rr(tmp,srca); - for (i=0;i<16 && mask;i++) { - if ((mask>>i)&1) { - writelong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXT.B Dn */ -uae_u32 REGPARAM2 op_49c0_0_comp_nf(uae_u32 opcode) /* EXT */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - dont_care_flags(); - { - int dst = src; - sign_extend_8_rr(src,src); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B Dn */ -uae_u32 REGPARAM2 op_4a00_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (An) */ -uae_u32 REGPARAM2 op_4a10_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (An)+ */ -uae_u32 REGPARAM2 op_4a18_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B -(An) */ -uae_u32 REGPARAM2 op_4a20_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (d16,An) */ -uae_u32 REGPARAM2 op_4a28_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4a30_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (xxx).W */ -uae_u32 REGPARAM2 op_4a38_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (xxx).L */ -uae_u32 REGPARAM2 op_4a39_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (d16,PC) */ -uae_u32 REGPARAM2 op_4a3a_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4a3b_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.B #.B */ -uae_u32 REGPARAM2 op_4a3c_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W Dn */ -uae_u32 REGPARAM2 op_4a40_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W An */ -uae_u32 REGPARAM2 op_4a48_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (An) */ -uae_u32 REGPARAM2 op_4a50_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (An)+ */ -uae_u32 REGPARAM2 op_4a58_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W -(An) */ -uae_u32 REGPARAM2 op_4a60_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (d16,An) */ -uae_u32 REGPARAM2 op_4a68_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4a70_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (xxx).W */ -uae_u32 REGPARAM2 op_4a78_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (xxx).L */ -uae_u32 REGPARAM2 op_4a79_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (d16,PC) */ -uae_u32 REGPARAM2 op_4a7a_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4a7b_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.W #.W */ -uae_u32 REGPARAM2 op_4a7c_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L Dn */ -uae_u32 REGPARAM2 op_4a80_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L An */ -uae_u32 REGPARAM2 op_4a88_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (An) */ -uae_u32 REGPARAM2 op_4a90_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (An)+ */ -uae_u32 REGPARAM2 op_4a98_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L -(An) */ -uae_u32 REGPARAM2 op_4aa0_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (d16,An) */ -uae_u32 REGPARAM2 op_4aa8_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4ab0_0_comp_nf(uae_u32 opcode) /* TST */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (xxx).W */ -uae_u32 REGPARAM2 op_4ab8_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (xxx).L */ -uae_u32 REGPARAM2 op_4ab9_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (d16,PC) */ -uae_u32 REGPARAM2 op_4aba_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4abb_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* TST.L #.L */ -uae_u32 REGPARAM2 op_4abc_0_comp_nf(uae_u32 opcode) /* TST */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,Dn */ -uae_u32 REGPARAM2 op_4c00_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - int dst = dstreg; - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,(An) */ -uae_u32 REGPARAM2 op_4c10_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,(An)+ */ -uae_u32 REGPARAM2 op_4c18_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,-(An) */ -uae_u32 REGPARAM2 op_4c20_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,(d16,An) */ -uae_u32 REGPARAM2 op_4c28_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_4c30_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,(xxx).W */ -uae_u32 REGPARAM2 op_4c38_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,(xxx).L */ -uae_u32 REGPARAM2 op_4c39_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_4c3a_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(dsta, address + PC16off); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4c3b_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - int pctmp = scratchie++; - int dsta = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULL.L #.W,#.L */ -uae_u32 REGPARAM2 op_4c3c_0_comp_nf(uae_u32 opcode) /* MULL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - int r2=(extra>>12)&7; - int tmp=scratchie++; - { - int dst = scratchie++; - mov_l_ri(dst, comp_get_ilong((m68k_pc_offset+=4)-4)); - if (extra&0x0400) { - int r3=(extra&7); - mov_l_rr(r3,dst); - if (extra&0x0800) { - imul_64_32(r2,r3); - } else { - mul_64_32(r2,r3); - } - } else { - imul_32_32(r2,dst); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(An) */ -uae_u32 REGPARAM2 op_4c90_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(srca, dstreg + 8); - } - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(An)+ */ -uae_u32 REGPARAM2 op_4c98_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, dstreg + 8); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - lea_l_brr(8+dstreg,srca,offset); - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - mov_l_rr(8+dstreg,tmp); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(d16,An) */ -uae_u32 REGPARAM2 op_4ca8_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + dstreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_4cb0_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(xxx).W */ -uae_u32 REGPARAM2 op_4cb8_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(xxx).L */ -uae_u32 REGPARAM2 op_4cb9_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_4cba_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.W #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4cbb_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_w_rR(i,native,offset); - mid_bswap_16(i); - sign_extend_16_rr(i,i); - offset+=2; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readword(tmp,i,scratchie); - sign_extend_16_rr(i,i); - add_l_ri(tmp,2); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(An) */ -uae_u32 REGPARAM2 op_4cd0_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(srca, dstreg + 8); - } - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(An)+ */ -uae_u32 REGPARAM2 op_4cd8_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, dstreg + 8); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - lea_l_brr(8+dstreg,srca,offset); - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - mov_l_rr(8+dstreg,tmp); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(d16,An) */ -uae_u32 REGPARAM2 op_4ce8_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + dstreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_4cf0_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(xxx).W */ -uae_u32 REGPARAM2 op_4cf8_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(xxx).L */ -uae_u32 REGPARAM2 op_4cf9_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_4cfa_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MVMEL.L #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4cfb_0_comp_nf(uae_u32 opcode) /* MVMEL */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); - int native=scratchie++; - int i; - signed char offset=0; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - if (1 && !special_mem && !jit_n_addr_unsafe) { - get_n_addr(srca,native,scratchie); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - mov_l_rR(i,native,offset); - mid_bswap_32(i); - offset+=4; - } - } - } else { - int tmp=scratchie++; - mov_l_rr(tmp,srca); - for (i=0;i<16;i++) { - if ((mask>>i)&1) { - readlong(tmp,i,scratchie); - add_l_ri(tmp,4); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* LINK.W An,#.W */ -uae_u32 REGPARAM2 op_4e50_0_comp_nf(uae_u32 opcode) /* LINK */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - if (srcreg == 7) { - m68k_pc_offset = m68k_pc_offset_thisinst; - FAIL(1); - return 0; - } - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,src,scratchie); - mov_l_rr(src,SP_REG); - sign_extend_16_rr(offs,offs); - add_l(SP_REG,offs); - if(srcreg + 8 != src) { - mov_l_rr(srcreg + 8, src); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* UNLK.L An */ -uae_u32 REGPARAM2 op_4e58_0_comp_nf(uae_u32 opcode) /* UNLK */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - mov_l_rr(SP_REG,src); - readlong(SP_REG,src,scratchie); - add_l_ri(SP_REG,4); - if(srcreg + 8 != src) { - mov_l_rr(srcreg + 8, src); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* NOP.L */ -uae_u32 REGPARAM2 op_4e71_0_comp_nf(uae_u32 opcode) /* NOP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* RTD.L #.W */ -uae_u32 REGPARAM2 op_4e74_0_comp_nf(uae_u32 opcode) /* RTD */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - add_l_ri(offs,4); - { - int newad=scratchie++; - readlong(SP_REG,newad,scratchie); - mov_l_mr(JITPTR ®s.pc,newad); - get_n_addr_jmp(newad,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - add_l(SP_REG,offs); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* RTS.L */ -uae_u32 REGPARAM2 op_4e75_0_comp_nf(uae_u32 opcode) /* RTS */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int newad=scratchie++; - readlong(SP_REG,newad,scratchie); - mov_l_mr(JITPTR ®s.pc,newad); - get_n_addr_jmp(newad,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - lea_l_brr(SP_REG,SP_REG,4); - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (An) */ -uae_u32 REGPARAM2 op_4e90_0_comp_nf(uae_u32 opcode) /* JSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (d16,An) */ -uae_u32 REGPARAM2 op_4ea8_0_comp_nf(uae_u32 opcode) /* JSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4eb0_0_comp_nf(uae_u32 opcode) /* JSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (xxx).W */ -uae_u32 REGPARAM2 op_4eb8_0_comp_nf(uae_u32 opcode) /* JSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (xxx).L */ -uae_u32 REGPARAM2 op_4eb9_0_comp_nf(uae_u32 opcode) /* JSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (d16,PC) */ -uae_u32 REGPARAM2 op_4eba_0_comp_nf(uae_u32 opcode) /* JSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JSR.L (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4ebb_0_comp_nf(uae_u32 opcode) /* JSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (An) */ -uae_u32 REGPARAM2 op_4ed0_0_comp_nf(uae_u32 opcode) /* JMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (d16,An) */ -uae_u32 REGPARAM2 op_4ee8_0_comp_nf(uae_u32 opcode) /* JMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (d8,An,Xn) */ -uae_u32 REGPARAM2 op_4ef0_0_comp_nf(uae_u32 opcode) /* JMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (xxx).W */ -uae_u32 REGPARAM2 op_4ef8_0_comp_nf(uae_u32 opcode) /* JMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (xxx).L */ -uae_u32 REGPARAM2 op_4ef9_0_comp_nf(uae_u32 opcode) /* JMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (d16,PC) */ -uae_u32 REGPARAM2 op_4efa_0_comp_nf(uae_u32 opcode) /* JMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* JMP.L (d8,PC,Xn) */ -uae_u32 REGPARAM2 op_4efb_0_comp_nf(uae_u32 opcode) /* JMP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - mov_l_mr(JITPTR ®s.pc,srca); - get_n_addr_jmp(srca,PC_P,scratchie); - mov_l_mr(JITPTR ®s.pc_oldp,PC_P); - m68k_pc_offset=0; - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,Dn */ -uae_u32 REGPARAM2 op_5000_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(An) */ -uae_u32 REGPARAM2 op_5010_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(An)+ */ -uae_u32 REGPARAM2 op_5018_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,-(An) */ -uae_u32 REGPARAM2 op_5020_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(d16,An) */ -uae_u32 REGPARAM2 op_5028_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_5030_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(xxx).W */ -uae_u32 REGPARAM2 op_5038_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.B #,(xxx).L */ -uae_u32 REGPARAM2 op_5039_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,Dn */ -uae_u32 REGPARAM2 op_5040_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDAQ.W #,An */ -uae_u32 REGPARAM2 op_5048_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(An) */ -uae_u32 REGPARAM2 op_5050_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(An)+ */ -uae_u32 REGPARAM2 op_5058_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,-(An) */ -uae_u32 REGPARAM2 op_5060_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(d16,An) */ -uae_u32 REGPARAM2 op_5068_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_5070_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(xxx).W */ -uae_u32 REGPARAM2 op_5078_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.W #,(xxx).L */ -uae_u32 REGPARAM2 op_5079_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,Dn */ -uae_u32 REGPARAM2 op_5080_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDAQ.L #,An */ -uae_u32 REGPARAM2 op_5088_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(An) */ -uae_u32 REGPARAM2 op_5090_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(An)+ */ -uae_u32 REGPARAM2 op_5098_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_5 -/* ADDQ.L #,-(An) */ -uae_u32 REGPARAM2 op_50a0_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(d16,An) */ -uae_u32 REGPARAM2 op_50a8_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_50b0_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(xxx).W */ -uae_u32 REGPARAM2 op_50b8_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDQ.L #,(xxx).L */ -uae_u32 REGPARAM2 op_50b9_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_50c0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_50c8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_50d0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_50d8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_50e0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_50e8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_50f0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_50f8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_50f9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,Dn */ -uae_u32 REGPARAM2 op_5100_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(An) */ -uae_u32 REGPARAM2 op_5110_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(An)+ */ -uae_u32 REGPARAM2 op_5118_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,-(An) */ -uae_u32 REGPARAM2 op_5120_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(d16,An) */ -uae_u32 REGPARAM2 op_5128_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_5130_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(xxx).W */ -uae_u32 REGPARAM2 op_5138_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.B #,(xxx).L */ -uae_u32 REGPARAM2 op_5139_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,Dn */ -uae_u32 REGPARAM2 op_5140_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBAQ.W #,An */ -uae_u32 REGPARAM2 op_5148_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(An) */ -uae_u32 REGPARAM2 op_5150_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(An)+ */ -uae_u32 REGPARAM2 op_5158_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,-(An) */ -uae_u32 REGPARAM2 op_5160_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(d16,An) */ -uae_u32 REGPARAM2 op_5168_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_5170_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(xxx).W */ -uae_u32 REGPARAM2 op_5178_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.W #,(xxx).L */ -uae_u32 REGPARAM2 op_5179_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,Dn */ -uae_u32 REGPARAM2 op_5180_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBAQ.L #,An */ -uae_u32 REGPARAM2 op_5188_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(An) */ -uae_u32 REGPARAM2 op_5190_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(An)+ */ -uae_u32 REGPARAM2 op_5198_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,-(An) */ -uae_u32 REGPARAM2 op_51a0_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(d16,An) */ -uae_u32 REGPARAM2 op_51a8_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_51b0_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(xxx).W */ -uae_u32 REGPARAM2 op_51b8_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBQ.L #,(xxx).L */ -uae_u32 REGPARAM2 op_51b9_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_51c0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_51c8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - start_needflags(); - sub_w_ri(src,1); - end_needflags(); - { - uintptr v2; - uintptr v1=get_const(PC_P); - v2=get_const(offs); - register_branch(v1,v2,3); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_51d0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_51d8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_51e0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_51e8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_51f0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_51f8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_51f9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_52c0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_52c8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,7); - cmov_l_rr(src,nsrc,7); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_52d0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_52d8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_52e0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_52e8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_52f0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_52f8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_52f9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,6); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_53c0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_53c8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,6); - cmov_l_rr(src,nsrc,6); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_53d0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_53d8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_53e0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_53e8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_53f0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_53f8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_53f9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,7); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_54c0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_54c8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,3); - cmov_l_rr(src,nsrc,3); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_54d0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_54d8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_54e0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_54e8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_54f0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_54f8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_54f9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_55c0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_55c8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,2); - cmov_l_rr(src,nsrc,2); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_55d0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_55d8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_55e0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_55e8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_55f0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_55f8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_55f9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_56c0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_56c8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,5); - cmov_l_rr(src,nsrc,5); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_56d0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_56d8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_56e0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_56e8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_56f0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_56f8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_56f9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_57c0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_57c8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,4); - cmov_l_rr(src,nsrc,4); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_57d0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_57d8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_57e0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_57e8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_57f0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_57f8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_57f9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5ac0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5ac8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,9); - cmov_l_rr(src,nsrc,9); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5ad0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5ad8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5ae0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5ae8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5af0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5af8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5af9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5bc0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5bc8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,8); - cmov_l_rr(src,nsrc,8); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5bd0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5bd8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5be0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5be8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5bf0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5bf8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5bf9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5cc0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5cc8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,13); - cmov_l_rr(src,nsrc,13); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5cd0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5cd8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5ce0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5ce8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5cf0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5cf8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5cf9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5dc0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5dc8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,12); - cmov_l_rr(src,nsrc,12); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5dd0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5dd8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5de0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5de8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5df0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5df8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5df9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5ec0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5ec8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,15); - cmov_l_rr(src,nsrc,15); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5ed0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5ed8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5ee0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5ee8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5ef0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5ef8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5ef9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,14); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B Dn */ -uae_u32 REGPARAM2 op_5fc0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - if(srcreg != val) { - mov_b_rr(srcreg, val); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* DBcc.W Dn,#.W */ -uae_u32 REGPARAM2 op_5fc8_0_comp_nf(uae_u32 opcode) /* DBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int offs = scratchie++; - mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(offs,offs); - sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(offs,JITPTR comp_pc_p); - add_l_ri(offs,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - { - int nsrc=scratchie++; - make_flags_live(); - mov_l_rr(nsrc,src); - lea_l_brr(scratchie,src,(uae_s32)-1); - mov_w_rr(src,scratchie); - cmov_l_rr(offs,PC_P,14); - cmov_l_rr(src,nsrc,14); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,5); - if(srcreg != src) { - mov_w_rr(srcreg, src); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An) */ -uae_u32 REGPARAM2 op_5fd0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (An)+ */ -uae_u32 REGPARAM2 op_5fd8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B -(An) */ -uae_u32 REGPARAM2 op_5fe0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d16,An) */ -uae_u32 REGPARAM2 op_5fe8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (d8,An,Xn) */ -uae_u32 REGPARAM2 op_5ff0_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).W */ -uae_u32 REGPARAM2 op_5ff8_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Scc.B (xxx).L */ -uae_u32 REGPARAM2 op_5ff9_0_comp_nf(uae_u32 opcode) /* Scc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int val = scratchie++; - make_flags_live(); - setcc(val,15); - sub_b_ri(val,1); - writebyte(srca, val, scratchie); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6000_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6001_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_60ff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSR.W #.W */ -uae_u32 REGPARAM2 op_6100_0_comp_nf(uae_u32 opcode) /* BSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - add_l_ri(src,m68k_pc_offset_thisinst+2); - m68k_pc_offset=0; - add_l(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSRQ.B # */ -uae_u32 REGPARAM2 op_6101_0_comp_nf(uae_u32 opcode) /* BSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - add_l_ri(src,m68k_pc_offset_thisinst+2); - m68k_pc_offset=0; - add_l(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BSR.L #.L */ -uae_u32 REGPARAM2 op_61ff_0_comp_nf(uae_u32 opcode) /* BSR */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - { - uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); - int ret=scratchie++; - mov_l_ri(ret,retadd); - sub_l_ri(SP_REG,4); - writelong_clobber(SP_REG,ret,scratchie); - add_l_ri(src,m68k_pc_offset_thisinst+2); - m68k_pc_offset=0; - add_l(PC_P,src); - comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6200_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,7); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6201_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,7); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_62ff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,7); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6300_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,6); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6301_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,6); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_6 -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_63ff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,6); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6400_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,3); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6401_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,3); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_64ff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,3); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6500_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,2); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6501_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,2); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_65ff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,2); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6600_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,5); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6601_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,5); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_66ff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,5); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6700_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,4); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6701_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,4); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_67ff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,4); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6a00_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,9); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6a01_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,9); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6aff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,9); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6b00_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,8); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6b01_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,8); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6bff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,8); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6c00_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,13); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6c01_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,13); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6cff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,13); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6d00_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,12); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6d01_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,12); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6dff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,12); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6e00_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,15); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6e01_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,15); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6eff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,15); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.W #.W */ -uae_u32 REGPARAM2 op_6f00_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - sign_extend_16_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,14); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* BccQ.B # */ -uae_u32 REGPARAM2 op_6f01_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - sign_extend_8_rr(src,src); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,14); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* Bcc.L #.L */ -uae_u32 REGPARAM2 op_6fff_0_comp_nf(uae_u32 opcode) /* Bcc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - add_l_ri(src,JITPTR comp_pc_p); - mov_l_ri(PC_P,JITPTR comp_pc_p); - add_l_ri(src,m68k_pc_offset); - add_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - uintptr v1=get_const(PC_P); - uintptr v2=get_const(src); - register_branch(v1,v2,14); - make_flags_live(); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVEQ.L #,Dn */ -uae_u32 REGPARAM2 op_7000_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); - #else - uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, srcreg); - { - int dst = dstreg; - dont_care_flags(); - mov_l_rr(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,Dn */ -uae_u32 REGPARAM2 op_8000_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (An),Dn */ -uae_u32 REGPARAM2 op_8010_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (An)+,Dn */ -uae_u32 REGPARAM2 op_8018_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B -(An),Dn */ -uae_u32 REGPARAM2 op_8020_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_8028_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_8030_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_8038_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_8039_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_803a_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_803b_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B #.B,Dn */ -uae_u32 REGPARAM2 op_803c_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,Dn */ -uae_u32 REGPARAM2 op_8040_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (An),Dn */ -uae_u32 REGPARAM2 op_8050_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (An)+,Dn */ -uae_u32 REGPARAM2 op_8058_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W -(An),Dn */ -uae_u32 REGPARAM2 op_8060_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_8068_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_8070_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_8078_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_8079_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_807a_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_807b_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W #.W,Dn */ -uae_u32 REGPARAM2 op_807c_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,Dn */ -uae_u32 REGPARAM2 op_8080_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (An),Dn */ -uae_u32 REGPARAM2 op_8090_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (An)+,Dn */ -uae_u32 REGPARAM2 op_8098_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L -(An),Dn */ -uae_u32 REGPARAM2 op_80a0_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_80a8_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_80b0_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_80b8_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_80b9_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_80ba_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_80bb_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L #.L,Dn */ -uae_u32 REGPARAM2 op_80bc_0_comp_nf(uae_u32 opcode) /* OR */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - { - or_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(An) */ -uae_u32 REGPARAM2 op_8110_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_8118_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,-(An) */ -uae_u32 REGPARAM2 op_8120_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_8128_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_8130_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_8138_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_8139_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(An) */ -uae_u32 REGPARAM2 op_8150_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_8158_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,-(An) */ -uae_u32 REGPARAM2 op_8160_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_8168_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_8170_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_8178_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_8179_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l(dst,scratchie); - forget_about(scratchie); - } else - or_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(An) */ -uae_u32 REGPARAM2 op_8190_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_8198_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,-(An) */ -uae_u32 REGPARAM2 op_81a0_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_81a8_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_81b0_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_81b8_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* OR.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_81b9_0_comp_nf(uae_u32 opcode) /* OR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - or_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,Dn */ -uae_u32 REGPARAM2 op_9000_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (An),Dn */ -uae_u32 REGPARAM2 op_9010_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (An)+,Dn */ -uae_u32 REGPARAM2 op_9018_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B -(An),Dn */ -uae_u32 REGPARAM2 op_9020_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_9028_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_9030_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_9038_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_9039_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_903a_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_903b_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B #.B,Dn */ -uae_u32 REGPARAM2 op_903c_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - sub_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,Dn */ -uae_u32 REGPARAM2 op_9040_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W An,Dn */ -uae_u32 REGPARAM2 op_9048_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (An),Dn */ -uae_u32 REGPARAM2 op_9050_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (An)+,Dn */ -uae_u32 REGPARAM2 op_9058_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W -(An),Dn */ -uae_u32 REGPARAM2 op_9060_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_9068_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_9070_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_9078_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_9079_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_907a_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_907b_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W #.W,Dn */ -uae_u32 REGPARAM2 op_907c_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - sub_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,Dn */ -uae_u32 REGPARAM2 op_9080_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L An,Dn */ -uae_u32 REGPARAM2 op_9088_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (An),Dn */ -uae_u32 REGPARAM2 op_9090_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (An)+,Dn */ -uae_u32 REGPARAM2 op_9098_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L -(An),Dn */ -uae_u32 REGPARAM2 op_90a0_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_90a8_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_90b0_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_90b8_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_90b9_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_90ba_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_90bb_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L #.L,Dn */ -uae_u32 REGPARAM2 op_90bc_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - sub_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W Dn,An */ -uae_u32 REGPARAM2 op_90c0_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W An,An */ -uae_u32 REGPARAM2 op_90c8_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (An),An */ -uae_u32 REGPARAM2 op_90d0_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (An)+,An */ -uae_u32 REGPARAM2 op_90d8_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W -(An),An */ -uae_u32 REGPARAM2 op_90e0_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (d16,An),An */ -uae_u32 REGPARAM2 op_90e8_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_90f0_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (xxx).W,An */ -uae_u32 REGPARAM2 op_90f8_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (xxx).L,An */ -uae_u32 REGPARAM2 op_90f9_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (d16,PC),An */ -uae_u32 REGPARAM2 op_90fa_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_90fb_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.W #.W,An */ -uae_u32 REGPARAM2 op_90fc_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.B Dn,Dn */ -uae_u32 REGPARAM2 op_9100_0_comp_nf(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.B -(An),-(An) */ -uae_u32 REGPARAM2 op_9108_0_comp_nf(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(An) */ -uae_u32 REGPARAM2 op_9110_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_9118_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,-(An) */ -uae_u32 REGPARAM2 op_9120_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_9128_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_9130_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_9138_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_9139_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - sub_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.W Dn,Dn */ -uae_u32 REGPARAM2 op_9140_0_comp_nf(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.W -(An),-(An) */ -uae_u32 REGPARAM2 op_9148_0_comp_nf(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(An) */ -uae_u32 REGPARAM2 op_9150_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_9158_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,-(An) */ -uae_u32 REGPARAM2 op_9160_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_9168_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_9170_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_9178_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_9179_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - sub_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.L Dn,Dn */ -uae_u32 REGPARAM2 op_9180_0_comp_nf(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBX.L -(An),-(An) */ -uae_u32 REGPARAM2 op_9188_0_comp_nf(uae_u32 opcode) /* SUBX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(An) */ -uae_u32 REGPARAM2 op_9190_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_9198_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,-(An) */ -uae_u32 REGPARAM2 op_91a0_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_91a8_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_91b0_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_91b8_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUB.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_91b9_0_comp_nf(uae_u32 opcode) /* SUB */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - sub_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L Dn,An */ -uae_u32 REGPARAM2 op_91c0_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L An,An */ -uae_u32 REGPARAM2 op_91c8_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (An),An */ -uae_u32 REGPARAM2 op_91d0_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (An)+,An */ -uae_u32 REGPARAM2 op_91d8_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L -(An),An */ -uae_u32 REGPARAM2 op_91e0_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (d16,An),An */ -uae_u32 REGPARAM2 op_91e8_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_91f0_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (xxx).W,An */ -uae_u32 REGPARAM2 op_91f8_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (xxx).L,An */ -uae_u32 REGPARAM2 op_91f9_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (d16,PC),An */ -uae_u32 REGPARAM2 op_91fa_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_91fb_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* SUBA.L #.L,An */ -uae_u32 REGPARAM2 op_91fc_0_comp_nf(uae_u32 opcode) /* SUBA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B Dn,Dn */ -uae_u32 REGPARAM2 op_b000_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (An),Dn */ -uae_u32 REGPARAM2 op_b010_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (An)+,Dn */ -uae_u32 REGPARAM2 op_b018_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B -(An),Dn */ -uae_u32 REGPARAM2 op_b020_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_b028_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_b030_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_b038_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_b039_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_b03a_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_b03b_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.B #.B,Dn */ -uae_u32 REGPARAM2 op_b03c_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W Dn,Dn */ -uae_u32 REGPARAM2 op_b040_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W An,Dn */ -uae_u32 REGPARAM2 op_b048_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (An),Dn */ -uae_u32 REGPARAM2 op_b050_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (An)+,Dn */ -uae_u32 REGPARAM2 op_b058_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W -(An),Dn */ -uae_u32 REGPARAM2 op_b060_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_b068_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_b070_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_b078_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_b079_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_b07a_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_b07b_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.W #.W,Dn */ -uae_u32 REGPARAM2 op_b07c_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L Dn,Dn */ -uae_u32 REGPARAM2 op_b080_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L An,Dn */ -uae_u32 REGPARAM2 op_b088_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (An),Dn */ -uae_u32 REGPARAM2 op_b090_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (An)+,Dn */ -uae_u32 REGPARAM2 op_b098_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L -(An),Dn */ -uae_u32 REGPARAM2 op_b0a0_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - -#ifdef PART_7 -/* CMP.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_b0a8_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_b0b0_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_b0b8_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_b0b9_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_b0ba_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_b0bb_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMP.L #.L,Dn */ -uae_u32 REGPARAM2 op_b0bc_0_comp_nf(uae_u32 opcode) /* CMP */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W Dn,An */ -uae_u32 REGPARAM2 op_b0c0_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W An,An */ -uae_u32 REGPARAM2 op_b0c8_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (An),An */ -uae_u32 REGPARAM2 op_b0d0_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (An)+,An */ -uae_u32 REGPARAM2 op_b0d8_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W -(An),An */ -uae_u32 REGPARAM2 op_b0e0_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (d16,An),An */ -uae_u32 REGPARAM2 op_b0e8_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_b0f0_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (xxx).W,An */ -uae_u32 REGPARAM2 op_b0f8_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (xxx).L,An */ -uae_u32 REGPARAM2 op_b0f9_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (d16,PC),An */ -uae_u32 REGPARAM2 op_b0fa_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_b0fb_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.W #.W,An */ -uae_u32 REGPARAM2 op_b0fc_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - sign_extend_16_rr(tmps,src); - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,Dn */ -uae_u32 REGPARAM2 op_b100_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPM.B (An)+,(An)+ */ -uae_u32 REGPARAM2 op_b108_0_comp_nf(uae_u32 opcode) /* CMPM */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(An) */ -uae_u32 REGPARAM2 op_b110_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_b118_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,-(An) */ -uae_u32 REGPARAM2 op_b120_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_b128_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_b130_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_b138_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_b139_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_b(dst,src); - } - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,Dn */ -uae_u32 REGPARAM2 op_b140_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPM.W (An)+,(An)+ */ -uae_u32 REGPARAM2 op_b148_0_comp_nf(uae_u32 opcode) /* CMPM */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(An) */ -uae_u32 REGPARAM2 op_b150_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_b158_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,-(An) */ -uae_u32 REGPARAM2 op_b160_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_b168_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_b170_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_b178_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_b179_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - { - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - xor_l(dst,scratchie); - forget_about(scratchie); - } else - xor_w(dst,src); - } - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,Dn */ -uae_u32 REGPARAM2 op_b180_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - { - xor_l(dst,src); - } - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPM.L (An)+,(An)+ */ -uae_u32 REGPARAM2 op_b188_0_comp_nf(uae_u32 opcode) /* CMPM */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - { - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(An) */ -uae_u32 REGPARAM2 op_b190_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_b198_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,-(An) */ -uae_u32 REGPARAM2 op_b1a0_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_b1a8_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_b1b0_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_b1b8_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EOR.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_b1b9_0_comp_nf(uae_u32 opcode) /* EOR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - { - xor_l(dst,src); - } - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L Dn,An */ -uae_u32 REGPARAM2 op_b1c0_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L An,An */ -uae_u32 REGPARAM2 op_b1c8_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (An),An */ -uae_u32 REGPARAM2 op_b1d0_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (An)+,An */ -uae_u32 REGPARAM2 op_b1d8_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L -(An),An */ -uae_u32 REGPARAM2 op_b1e0_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (d16,An),An */ -uae_u32 REGPARAM2 op_b1e8_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_b1f0_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (xxx).W,An */ -uae_u32 REGPARAM2 op_b1f8_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (xxx).L,An */ -uae_u32 REGPARAM2 op_b1f9_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (d16,PC),An */ -uae_u32 REGPARAM2 op_b1fa_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_b1fb_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* CMPA.L #.L,An */ -uae_u32 REGPARAM2 op_b1fc_0_comp_nf(uae_u32 opcode) /* CMPA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmps=scratchie++; - tmps=src; - dont_care_flags(); - /* Weird --- CMP with noflags ;-) */ - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,Dn */ -uae_u32 REGPARAM2 op_c000_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (An),Dn */ -uae_u32 REGPARAM2 op_c010_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (An)+,Dn */ -uae_u32 REGPARAM2 op_c018_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B -(An),Dn */ -uae_u32 REGPARAM2 op_c020_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_c028_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_c030_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_c038_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_c039_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_c03a_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_c03b_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B #.B,Dn */ -uae_u32 REGPARAM2 op_c03c_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,Dn */ -uae_u32 REGPARAM2 op_c040_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (An),Dn */ -uae_u32 REGPARAM2 op_c050_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (An)+,Dn */ -uae_u32 REGPARAM2 op_c058_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W -(An),Dn */ -uae_u32 REGPARAM2 op_c060_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_c068_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_c070_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_c078_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_c079_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_c07a_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_c07b_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W #.W,Dn */ -uae_u32 REGPARAM2 op_c07c_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,Dn */ -uae_u32 REGPARAM2 op_c080_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (An),Dn */ -uae_u32 REGPARAM2 op_c090_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (An)+,Dn */ -uae_u32 REGPARAM2 op_c098_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L -(An),Dn */ -uae_u32 REGPARAM2 op_c0a0_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_c0a8_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_c0b0_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_c0b8_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_c0b9_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_c0ba_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_c0bb_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L #.L,Dn */ -uae_u32 REGPARAM2 op_c0bc_0_comp_nf(uae_u32 opcode) /* AND */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - and_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W Dn,Dn */ -uae_u32 REGPARAM2 op_c0c0_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int src = srcreg; - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (An),Dn */ -uae_u32 REGPARAM2 op_c0d0_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (An)+,Dn */ -uae_u32 REGPARAM2 op_c0d8_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W -(An),Dn */ -uae_u32 REGPARAM2 op_c0e0_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_c0e8_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_c0f0_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_c0f8_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_c0f9_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_c0fa_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_c0fb_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULU.W #.W,Dn */ -uae_u32 REGPARAM2 op_c0fc_0_comp_nf(uae_u32 opcode) /* MULU */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - zero_extend_16_rr(scratchie,src); - zero_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(An) */ -uae_u32 REGPARAM2 op_c110_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_c118_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,-(An) */ -uae_u32 REGPARAM2 op_c120_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_c128_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_c130_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_c138_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_c139_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXG.L Dn,Dn */ -uae_u32 REGPARAM2 op_c140_0_comp_nf(uae_u32 opcode) /* EXG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - int tmp=scratchie++; - mov_l_rr(tmp,src); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - if(dstreg != tmp) { - mov_l_rr(dstreg, tmp); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXG.L An,An */ -uae_u32 REGPARAM2 op_c148_0_comp_nf(uae_u32 opcode) /* EXG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - mov_l_rr(tmp,src); - if(srcreg + 8 != dst) { - mov_l_rr(srcreg + 8, dst); - } - if(dstreg + 8 != tmp) { - mov_l_rr(dstreg + 8, tmp); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(An) */ -uae_u32 REGPARAM2 op_c150_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_c158_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,-(An) */ -uae_u32 REGPARAM2 op_c160_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_c168_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_c170_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_c178_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_c179_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - and_l(dst,scratchie); - forget_about(scratchie); - } else - and_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* EXG.L Dn,An */ -uae_u32 REGPARAM2 op_c188_0_comp_nf(uae_u32 opcode) /* EXG */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - mov_l_rr(tmp,src); - if(srcreg != dst) { - mov_l_rr(srcreg, dst); - } - if(dstreg + 8 != tmp) { - mov_l_rr(dstreg + 8, tmp); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(An) */ -uae_u32 REGPARAM2 op_c190_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_c198_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,-(An) */ -uae_u32 REGPARAM2 op_c1a0_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_c1a8_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_c1b0_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_c1b8_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* AND.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_c1b9_0_comp_nf(uae_u32 opcode) /* AND */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - and_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W Dn,Dn */ -uae_u32 REGPARAM2 op_c1c0_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int src = srcreg; - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (An),Dn */ -uae_u32 REGPARAM2 op_c1d0_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (An)+,Dn */ -uae_u32 REGPARAM2 op_c1d8_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W -(An),Dn */ -uae_u32 REGPARAM2 op_c1e0_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_c1e8_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_c1f0_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_c1f8_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_c1f9_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_c1fa_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_c1fb_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MULS.W #.W,Dn */ -uae_u32 REGPARAM2 op_c1fc_0_comp_nf(uae_u32 opcode) /* MULS */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - sign_extend_16_rr(scratchie,src); - sign_extend_16_rr(dst,dst); - imul_32_32(dst,scratchie); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,Dn */ -uae_u32 REGPARAM2 op_d000_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (An),Dn */ -uae_u32 REGPARAM2 op_d010_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (An)+,Dn */ -uae_u32 REGPARAM2 op_d018_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B -(An),Dn */ -uae_u32 REGPARAM2 op_d020_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (d16,An),Dn */ -uae_u32 REGPARAM2 op_d028_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_d030_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (xxx).W,Dn */ -uae_u32 REGPARAM2 op_d038_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (xxx).L,Dn */ -uae_u32 REGPARAM2 op_d039_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (d16,PC),Dn */ -uae_u32 REGPARAM2 op_d03a_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_d03b_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B #.B,Dn */ -uae_u32 REGPARAM2 op_d03c_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - add_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,Dn */ -uae_u32 REGPARAM2 op_d040_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W An,Dn */ -uae_u32 REGPARAM2 op_d048_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (An),Dn */ -uae_u32 REGPARAM2 op_d050_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (An)+,Dn */ -uae_u32 REGPARAM2 op_d058_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W -(An),Dn */ -uae_u32 REGPARAM2 op_d060_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (d16,An),Dn */ -uae_u32 REGPARAM2 op_d068_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_d070_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (xxx).W,Dn */ -uae_u32 REGPARAM2 op_d078_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (xxx).L,Dn */ -uae_u32 REGPARAM2 op_d079_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (d16,PC),Dn */ -uae_u32 REGPARAM2 op_d07a_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_d07b_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W #.W,Dn */ -uae_u32 REGPARAM2 op_d07c_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dstreg; - dont_care_flags(); - add_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,Dn */ -uae_u32 REGPARAM2 op_d080_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L An,Dn */ -uae_u32 REGPARAM2 op_d088_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (An),Dn */ -uae_u32 REGPARAM2 op_d090_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (An)+,Dn */ -uae_u32 REGPARAM2 op_d098_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L -(An),Dn */ -uae_u32 REGPARAM2 op_d0a0_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (d16,An),Dn */ -uae_u32 REGPARAM2 op_d0a8_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (d8,An,Xn),Dn */ -uae_u32 REGPARAM2 op_d0b0_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (xxx).W,Dn */ -uae_u32 REGPARAM2 op_d0b8_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (xxx).L,Dn */ -uae_u32 REGPARAM2 op_d0b9_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (d16,PC),Dn */ -uae_u32 REGPARAM2 op_d0ba_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L (d8,PC,Xn),Dn */ -uae_u32 REGPARAM2 op_d0bb_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L #.L,Dn */ -uae_u32 REGPARAM2 op_d0bc_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dstreg; - dont_care_flags(); - add_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W Dn,An */ -uae_u32 REGPARAM2 op_d0c0_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W An,An */ -uae_u32 REGPARAM2 op_d0c8_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (An),An */ -uae_u32 REGPARAM2 op_d0d0_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (An)+,An */ -uae_u32 REGPARAM2 op_d0d8_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readword(srca,src,scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 2); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W -(An),An */ -uae_u32 REGPARAM2 op_d0e0_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (d16,An),An */ -uae_u32 REGPARAM2 op_d0e8_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_d0f0_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (xxx).W,An */ -uae_u32 REGPARAM2 op_d0f8_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (xxx).L,An */ -uae_u32 REGPARAM2 op_d0f9_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (d16,PC),An */ -uae_u32 REGPARAM2 op_d0fa_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_d0fb_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readword(srca,src,scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.W #.W,An */ -uae_u32 REGPARAM2 op_d0fc_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.B Dn,Dn */ -uae_u32 REGPARAM2 op_d100_0_comp_nf(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - restore_carry(); - adc_b(dst,src); - if(dstreg != dst) { - mov_b_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.B -(An),-(An) */ -uae_u32 REGPARAM2 op_d108_0_comp_nf(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readbyte(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - { - dont_care_flags(); - restore_carry(); - adc_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(An) */ -uae_u32 REGPARAM2 op_d110_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(An)+ */ -uae_u32 REGPARAM2 op_d118_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,-(An) */ -uae_u32 REGPARAM2 op_d120_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(d16,An) */ -uae_u32 REGPARAM2 op_d128_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_d130_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(xxx).W */ -uae_u32 REGPARAM2 op_d138_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.B Dn,(xxx).L */ -uae_u32 REGPARAM2 op_d139_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readbyte(dsta, dst, scratchie); - dont_care_flags(); - add_b(dst,src); - writebyte(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.W Dn,Dn */ -uae_u32 REGPARAM2 op_d140_0_comp_nf(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - restore_carry(); - adc_w(dst,src); - if(dstreg != dst) { - mov_w_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.W -(An),-(An) */ -uae_u32 REGPARAM2 op_d148_0_comp_nf(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -2); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readword(srca,src,scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - { - dont_care_flags(); - restore_carry(); - adc_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(An) */ -uae_u32 REGPARAM2 op_d150_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(An)+ */ -uae_u32 REGPARAM2 op_d158_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 2); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,-(An) */ -uae_u32 REGPARAM2 op_d160_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -2); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(d16,An) */ -uae_u32 REGPARAM2 op_d168_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_d170_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(xxx).W */ -uae_u32 REGPARAM2 op_d178_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.W Dn,(xxx).L */ -uae_u32 REGPARAM2 op_d179_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readword(dsta,dst,scratchie); - dont_care_flags(); - add_w(dst,src); - writeword(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.L Dn,Dn */ -uae_u32 REGPARAM2 op_d180_0_comp_nf(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dstreg; - { - dont_care_flags(); - restore_carry(); - adc_l(dst,src); - if(dstreg != dst) { - mov_l_rr(dstreg, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDX.L -(An),-(An) */ -uae_u32 REGPARAM2 op_d188_0_comp_nf(uae_u32 opcode) /* ADDX */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - { - dont_care_flags(); - restore_carry(); - adc_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(An) */ -uae_u32 REGPARAM2 op_d190_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(An)+ */ -uae_u32 REGPARAM2 op_d198_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - lea_l_brr(dstreg + 8, dstreg + 8, 4); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,-(An) */ -uae_u32 REGPARAM2 op_d1a0_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - lea_l_brr(dstreg + 8, dstreg + 8, -4); - if (dodgy) { - mov_l_rr(dsta, 8 + dstreg); - } - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(d16,An) */ -uae_u32 REGPARAM2 op_d1a8_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_rr(dsta, 8 + dstreg); - lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_d1b0_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(xxx).W */ -uae_u32 REGPARAM2 op_d1b8_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADD.L Dn,(xxx).L */ -uae_u32 REGPARAM2 op_d1b9_0_comp_nf(uae_u32 opcode) /* ADD */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dst = scratchie++; - readlong(dsta, dst, scratchie); - dont_care_flags(); - add_l(dst,src); - writelong(dsta, dst, scratchie); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L Dn,An */ -uae_u32 REGPARAM2 op_d1c0_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = srcreg; - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L An,An */ -uae_u32 REGPARAM2 op_d1c8_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(src, srcreg + 8); - } - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (An),An */ -uae_u32 REGPARAM2 op_d1d0_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (An)+,An */ -uae_u32 REGPARAM2 op_d1d8_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int src = scratchie++; - readlong(srca, src, scratchie); - lea_l_brr(srcreg + 8, srcreg + 8, 4); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L -(An),An */ -uae_u32 REGPARAM2 op_d1e0_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - { - int srca = dodgy ? scratchie++ : srcreg + 8; - lea_l_brr(srcreg + 8, srcreg + 8, -4); - if (dodgy) { - mov_l_rr(srca, 8 + srcreg); - } - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (d16,An),An */ -uae_u32 REGPARAM2 op_d1e8_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_rr(srca, 8 + srcreg); - lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (d8,An,Xn),An */ -uae_u32 REGPARAM2 op_d1f0_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (xxx).W,An */ -uae_u32 REGPARAM2 op_d1f8_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (xxx).L,An */ -uae_u32 REGPARAM2 op_d1f9_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (d16,PC),An */ -uae_u32 REGPARAM2 op_d1fa_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - mov_l_ri(srca, address + PC16off); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L (d8,PC,Xn),An */ -uae_u32 REGPARAM2 op_d1fb_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int pctmp = scratchie++; - int srca = scratchie++; - uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); - { - mov_l_ri(pctmp,address); - calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); - { - int src = scratchie++; - readlong(srca, src, scratchie); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ADDA.L #.L,An */ -uae_u32 REGPARAM2 op_d1fc_0_comp_nf(uae_u32 opcode) /* ADDA */ -{ - uae_u32 dstreg = (opcode >> 9) & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - { - int src = scratchie++; - mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); - { - int dst = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dst, dstreg + 8); - } - { - int tmp=scratchie++; - tmp=src; - add_l(dst,tmp); - if(dstreg + 8 != dst) { - mov_l_rr(dstreg + 8, dst); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* ASRQ.B #,Dn */ -uae_u32 REGPARAM2 op_e000_0_comp_nf(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shra_b_ri(data,srcreg); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSRQ.B #,Dn */ -uae_u32 REGPARAM2 op_e008_0_comp_nf(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shrl_b_ri(data,srcreg); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* RORQ.B #,Dn */ -uae_u32 REGPARAM2 op_e018_0_comp_nf(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - ror_b_rr(data,cnt); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASR.B Dn,Dn */ -uae_u32 REGPARAM2 op_e020_0_comp_nf(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int setval = scratchie++; - mov_l_ri(cdata, 0); - mov_l_ri(setval, 0xffffffff); - test_l_ri(data, 0x00000080); - cmov_l_rr(setval, cdata, NATIVE_CC_EQ); - mov_l_rr(cdata, setval); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x08); - cmov_l_rr(cdata, setval, NATIVE_CC_HI); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shra_b_rr(cdata, tmpcnt); - mov_b_rr(data, cdata); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSR.B Dn,Dn */ -uae_u32 REGPARAM2 op_e028_0_comp_nf(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x08); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shrl_b_rr(cdata, tmpcnt); - mov_b_rr(data, cdata); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROR.B Dn,Dn */ -uae_u32 REGPARAM2 op_e038_0_comp_nf(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - ror_b_rr(data,cnt); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASRQ.W #,Dn */ -uae_u32 REGPARAM2 op_e040_0_comp_nf(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shra_w_ri(data,srcreg); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -#endif - -#ifdef PART_8 -/* LSRQ.W #,Dn */ -uae_u32 REGPARAM2 op_e048_0_comp_nf(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shrl_w_ri(data,srcreg); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* RORQ.W #,Dn */ -uae_u32 REGPARAM2 op_e058_0_comp_nf(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - ror_w_rr(data,cnt); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASR.W Dn,Dn */ -uae_u32 REGPARAM2 op_e060_0_comp_nf(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int setval = scratchie++; - mov_l_ri(cdata, 0); - mov_l_ri(setval, 0xffffffff); - test_l_ri(data, 0x00008000); - cmov_l_rr(setval, cdata, NATIVE_CC_EQ); - mov_l_rr(cdata, setval); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x10); - cmov_l_rr(cdata, setval, NATIVE_CC_HI); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shra_w_rr(cdata, tmpcnt); - mov_w_rr(data, cdata); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSR.W Dn,Dn */ -uae_u32 REGPARAM2 op_e068_0_comp_nf(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x10); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shrl_w_rr(cdata, tmpcnt); - mov_w_rr(data, cdata); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROR.W Dn,Dn */ -uae_u32 REGPARAM2 op_e078_0_comp_nf(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - ror_w_rr(data,cnt); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASRQ.L #,Dn */ -uae_u32 REGPARAM2 op_e080_0_comp_nf(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shra_l_ri(data,srcreg); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSRQ.L #,Dn */ -uae_u32 REGPARAM2 op_e088_0_comp_nf(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shrl_l_ri(data,srcreg); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* RORQ.L #,Dn */ -uae_u32 REGPARAM2 op_e098_0_comp_nf(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - ror_l_rr(data,cnt); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASR.L Dn,Dn */ -uae_u32 REGPARAM2 op_e0a0_0_comp_nf(uae_u32 opcode) /* ASR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - int setval = scratchie++; - mov_l_ri(cdata, 0); - mov_l_ri(setval, 0xffffffff); - test_l_ri(data, 0x80000000); - cmov_l_rr(setval, cdata, NATIVE_CC_EQ); - mov_l_rr(cdata, setval); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x20); - cmov_l_rr(cdata, setval, NATIVE_CC_HI); - cmov_l_rr(data, setval, NATIVE_CC_EQ); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shra_l_rr(cdata, tmpcnt); - mov_l_rr(data, cdata); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSR.L Dn,Dn */ -uae_u32 REGPARAM2 op_e0a8_0_comp_nf(uae_u32 opcode) /* LSR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x20); - cmov_l_rr(data, cdata, NATIVE_CC_EQ); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shrl_l_rr(cdata, tmpcnt); - mov_l_rr(data, cdata); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROR.L Dn,Dn */ -uae_u32 REGPARAM2 op_e0b8_0_comp_nf(uae_u32 opcode) /* ROR */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - ror_l_rr(data,cnt); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASLQ.B #,Dn */ -uae_u32 REGPARAM2 op_e100_0_comp_nf(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shll_b_ri(data,srcreg); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSLQ.B #,Dn */ -uae_u32 REGPARAM2 op_e108_0_comp_nf(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shll_b_ri(data,srcreg); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROLQ.B #,Dn */ -uae_u32 REGPARAM2 op_e118_0_comp_nf(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - rol_b_rr(data,cnt); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASL.B Dn,Dn */ -uae_u32 REGPARAM2 op_e120_0_comp_nf(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x08); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_b_rr(cdata, tmpcnt); - mov_b_rr(data, cdata); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSL.B Dn,Dn */ -uae_u32 REGPARAM2 op_e128_0_comp_nf(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x08); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_b_rr(cdata, tmpcnt); - mov_b_rr(data, cdata); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROL.B Dn,Dn */ -uae_u32 REGPARAM2 op_e138_0_comp_nf(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - rol_b_rr(data,cnt); - if(dstreg != data) { - mov_b_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASLQ.W #,Dn */ -uae_u32 REGPARAM2 op_e140_0_comp_nf(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shll_w_ri(data,srcreg); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSLQ.W #,Dn */ -uae_u32 REGPARAM2 op_e148_0_comp_nf(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shll_w_ri(data,srcreg); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROLQ.W #,Dn */ -uae_u32 REGPARAM2 op_e158_0_comp_nf(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - rol_w_rr(data,cnt); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASL.W Dn,Dn */ -uae_u32 REGPARAM2 op_e160_0_comp_nf(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x10); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_w_rr(cdata, tmpcnt); - mov_w_rr(data, cdata); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSL.W Dn,Dn */ -uae_u32 REGPARAM2 op_e168_0_comp_nf(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x10); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_w_rr(cdata, tmpcnt); - mov_w_rr(data, cdata); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROL.W Dn,Dn */ -uae_u32 REGPARAM2 op_e178_0_comp_nf(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - rol_w_rr(data,cnt); - if(dstreg != data) { - mov_w_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASLQ.L #,Dn */ -uae_u32 REGPARAM2 op_e180_0_comp_nf(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shll_l_ri(data,srcreg); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSLQ.L #,Dn */ -uae_u32 REGPARAM2 op_e188_0_comp_nf(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - shll_l_ri(data,srcreg); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROLQ.L #,Dn */ -uae_u32 REGPARAM2 op_e198_0_comp_nf(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; - #else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - dont_care_flags(); - { - int cnt = scratchie++; - mov_l_ri(cnt, srcreg); - { - int data = dstreg; - { - rol_l_rr(data,cnt); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ASL.L Dn,Dn */ -uae_u32 REGPARAM2 op_e1a0_0_comp_nf(uae_u32 opcode) /* ASL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - if (needed_flags & FLAG_V) { - FAIL(1); - return 0; - } - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x20); - cmov_l_rr(data, cdata, NATIVE_CC_EQ); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_l_rr(cdata, tmpcnt); - mov_l_rr(data, cdata); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* LSL.L Dn,Dn */ -uae_u32 REGPARAM2 op_e1a8_0_comp_nf(uae_u32 opcode) /* LSL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - { - int cdata = scratchie++; - int tmpcnt = scratchie++; - mov_l_ri(cdata, 0); - mov_l_rr(tmpcnt, cnt); - and_l_ri(tmpcnt, 63); - cmp_b_ri(tmpcnt, 0x20); - cmov_l_rr(data, cdata, NATIVE_CC_EQ); - cmov_l_rr(cdata, data, NATIVE_CC_LS); - shll_l_rr(cdata, tmpcnt); - mov_l_rr(data, cdata); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* ROL.L Dn,Dn */ -uae_u32 REGPARAM2 op_e1b8_0_comp_nf(uae_u32 opcode) /* ROL */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 1) & 7); - #else - uae_s32 srcreg = ((opcode >> 9) & 7); - #endif - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - if ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; - } - { - dont_care_flags(); - { - int cnt = srcreg; - { - int data = dstreg; - { - rol_l_rr(data,cnt); - if(dstreg != data) { - mov_l_rr(dstreg, data); - } - } - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,Dn */ -uae_u32 REGPARAM2 op_f200_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,An */ -uae_u32 REGPARAM2 op_f208_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(An) */ -uae_u32 REGPARAM2 op_f210_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(An)+ */ -uae_u32 REGPARAM2 op_f218_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,-(An) */ -uae_u32 REGPARAM2 op_f220_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(d16,An) */ -uae_u32 REGPARAM2 op_f228_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_f230_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(xxx).W */ -uae_u32 REGPARAM2 op_f238_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(xxx).L */ -uae_u32 REGPARAM2 op_f239_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(d16,PC) */ -uae_u32 REGPARAM2 op_f23a_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_s32 dstreg = 2; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,(d8,PC,Xn) */ -uae_u32 REGPARAM2 op_f23b_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_s32 dstreg = 3; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FPP.L #.W,#.L */ -uae_u32 REGPARAM2 op_f23c_0_comp_nf(uae_u32 opcode) /* FPP */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fpp_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,Dn */ -uae_u32 REGPARAM2 op_f240_0_comp_nf(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(An) */ -uae_u32 REGPARAM2 op_f250_0_comp_nf(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(An)+ */ -uae_u32 REGPARAM2 op_f258_0_comp_nf(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,-(An) */ -uae_u32 REGPARAM2 op_f260_0_comp_nf(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(d16,An) */ -uae_u32 REGPARAM2 op_f268_0_comp_nf(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(d8,An,Xn) */ -uae_u32 REGPARAM2 op_f270_0_comp_nf(uae_u32 opcode) /* FScc */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(xxx).W */ -uae_u32 REGPARAM2 op_f278_0_comp_nf(uae_u32 opcode) /* FScc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FScc.L #.W,(xxx).L */ -uae_u32 REGPARAM2 op_f279_0_comp_nf(uae_u32 opcode) /* FScc */ -{ - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); - comp_fscc_opp(opcode,extra); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FBccQ.L #,#.W */ -uae_u32 REGPARAM2 op_f280_0_comp_nf(uae_u32 opcode) /* FBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 63); - #else - uae_s32 srcreg = (opcode & 63); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - comp_fbcc_opp(opcode); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* FBccQ.L #,#.L */ -uae_u32 REGPARAM2 op_f2c0_0_comp_nf(uae_u32 opcode) /* FBcc */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 63); - #else - uae_s32 srcreg = (opcode & 63); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - #ifdef USE_JIT_FPU - comp_fbcc_opp(opcode); - #else - failure = 1; - #endif - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - if (failure) { - m68k_pc_offset = m68k_pc_offset_thisinst; - } - return 0; -} -/* MOVE16.L (An)+,(xxx).L */ -uae_u32 REGPARAM2 op_f600_0_comp_nf(uae_u32 opcode) /* MOVE16 */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int src=scratchie++; - int dst=scratchie++; - { - int srca = scratchie++; - mov_l_rr(srca, srcreg + 8); - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - mov_l_rr(src,srca); - mov_l_rr(dst,dsta); - and_l_ri(src,~15); - and_l_ri(dst,~15); - add_l_ri(srcreg+8,16); - if (special_mem || jit_n_addr_unsafe) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - } else - { - int tmp=scratchie; - scratchie+=4; - get_n_addr(src,src,scratchie); - get_n_addr(dst,dst,scratchie); - mov_l_rR(tmp+0,src,0); - mov_l_rR(tmp+1,src,4); - mov_l_rR(tmp+2,src,8); - mov_l_rR(tmp+3,src,12); - mov_l_Rr(dst,tmp+0,0); - forget_about(tmp+0); - mov_l_Rr(dst,tmp+1,4); - forget_about(tmp+1); - mov_l_Rr(dst,tmp+2,8); - forget_about(tmp+2); - mov_l_Rr(dst,tmp+3,12); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE16.L (xxx).L,(An)+ */ -uae_u32 REGPARAM2 op_f608_0_comp_nf(uae_u32 opcode) /* MOVE16 */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int src=scratchie++; - int dst=scratchie++; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dsta = scratchie++; - mov_l_rr(dsta, dstreg + 8); - mov_l_rr(src,srca); - mov_l_rr(dst,dsta); - and_l_ri(src,~15); - and_l_ri(dst,~15); - add_l_ri(dstreg+8,16); - if (special_mem || jit_n_addr_unsafe) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - } else - { - int tmp=scratchie; - scratchie+=4; - get_n_addr(src,src,scratchie); - get_n_addr(dst,dst,scratchie); - mov_l_rR(tmp+0,src,0); - mov_l_rR(tmp+1,src,4); - mov_l_rR(tmp+2,src,8); - mov_l_rR(tmp+3,src,12); - mov_l_Rr(dst,tmp+0,0); - forget_about(tmp+0); - mov_l_Rr(dst,tmp+1,4); - forget_about(tmp+1); - mov_l_Rr(dst,tmp+2,8); - forget_about(tmp+2); - mov_l_Rr(dst,tmp+3,12); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE16.L (An),(xxx).L */ -uae_u32 REGPARAM2 op_f610_0_comp_nf(uae_u32 opcode) /* MOVE16 */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int src=scratchie++; - int dst=scratchie++; - { - int srca = dodgy ? scratchie++ : srcreg + 8; - if (dodgy) { - mov_l_rr(srca, srcreg + 8); - } - { - int dsta = scratchie++; - mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - mov_l_rr(src,srca); - mov_l_rr(dst,dsta); - and_l_ri(src,~15); - and_l_ri(dst,~15); - if (special_mem || jit_n_addr_unsafe) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - } else - { - int tmp=scratchie; - scratchie+=4; - get_n_addr(src,src,scratchie); - get_n_addr(dst,dst,scratchie); - mov_l_rR(tmp+0,src,0); - mov_l_rR(tmp+1,src,4); - mov_l_rR(tmp+2,src,8); - mov_l_rR(tmp+3,src,12); - mov_l_Rr(dst,tmp+0,0); - forget_about(tmp+0); - mov_l_Rr(dst,tmp+1,4); - forget_about(tmp+1); - mov_l_Rr(dst,tmp+2,8); - forget_about(tmp+2); - mov_l_Rr(dst,tmp+3,12); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE16.L (xxx).L,(An) */ -uae_u32 REGPARAM2 op_f618_0_comp_nf(uae_u32 opcode) /* MOVE16 */ -{ - uae_u32 dstreg = opcode & 7; - uae_u32 dodgy=0; - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int src=scratchie++; - int dst=scratchie++; - { - int srca = scratchie++; - mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - { - int dsta = dodgy ? scratchie++ : dstreg + 8; - if (dodgy) { - mov_l_rr(dsta, dstreg + 8); - } - mov_l_rr(src,srca); - mov_l_rr(dst,dsta); - and_l_ri(src,~15); - and_l_ri(dst,~15); - if (special_mem || jit_n_addr_unsafe) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - } else - { - int tmp=scratchie; - scratchie+=4; - get_n_addr(src,src,scratchie); - get_n_addr(dst,dst,scratchie); - mov_l_rR(tmp+0,src,0); - mov_l_rR(tmp+1,src,4); - mov_l_rR(tmp+2,src,8); - mov_l_rR(tmp+3,src,12); - mov_l_Rr(dst,tmp+0,0); - forget_about(tmp+0); - mov_l_Rr(dst,tmp+1,4); - forget_about(tmp+1); - mov_l_Rr(dst,tmp+2,8); - forget_about(tmp+2); - mov_l_Rr(dst,tmp+3,12); - } - } - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -/* MOVE16.L (An)+,(An)+ */ -uae_u32 REGPARAM2 op_f620_0_comp_nf(uae_u32 opcode) /* MOVE16 */ -{ - #if defined(HAVE_GET_WORD_UNSWAPPED) - uae_u32 srcreg = ((opcode >> 8) & 7); - #else - uae_s32 srcreg = (opcode & 7); - #endif - uae_s32 dstreg = 0; - uae_u32 dodgy=(srcreg==(uae_s32)dstreg); - uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; - m68k_pc_offset+=2; - { - uae_u8 scratchie=S1; - int src=scratchie++; - int dst=scratchie++; - uae_u16 dstreg=((comp_get_iword((m68k_pc_offset+=2)-2))>>12)&0x07; - mov_l_rr(src,8+srcreg); - mov_l_rr(dst,8+dstreg); - and_l_ri(src,~15); - and_l_ri(dst,~15); - if (srcreg != dstreg) { - add_l_ri(srcreg+8,16); - } - add_l_ri(dstreg+8,16); - if (special_mem || jit_n_addr_unsafe) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - add_l_ri(src,4); - add_l_ri(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - } else - { - int tmp=scratchie; - scratchie+=4; - get_n_addr(src,src,scratchie); - get_n_addr(dst,dst,scratchie); - mov_l_rR(tmp+0,src,0); - mov_l_rR(tmp+1,src,4); - mov_l_rR(tmp+2,src,8); - mov_l_rR(tmp+3,src,12); - mov_l_Rr(dst,tmp+0,0); - forget_about(tmp+0); - mov_l_Rr(dst,tmp+1,4); - forget_about(tmp+1); - mov_l_Rr(dst,tmp+2,8); - forget_about(tmp+2); - mov_l_Rr(dst,tmp+3,12); - } - } - if (m68k_pc_offset > SYNC_PC_OFFSET) { - sync_m68k_pc(); - } - return 0; -} -#endif - +#elif defined(CPU_i386) || defined(CPU_x86_64) || defined(__i386__) || \ + defined(__x86_64__) || defined(_M_IX86) || defined(_M_AMD64) +#include "x86/compemu_x86.cpp" #endif diff --git a/jit/compemu.h b/jit/compemu.h index b4b30f3a..ad6821f2 100644 --- a/jit/compemu.h +++ b/jit/compemu.h @@ -1,582 +1,12 @@ -#if defined(CPU_AARCH64) || defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) -#include "arm/compemu_arm.h" -#else -/* - * compiler/compemu.h - Public interface and definitions - * - * Copyright (c) 2001-2004 Milan Jurik of ARAnyM dev team (see AUTHORS) - * - * Inspired by Christian Bauer's Basilisk II - * - * This file is part of the ARAnyM project which builds a new and powerful - * TOS/FreeMiNT compatible virtual machine running on almost any hardware. - * - * JIT compiler m68k -> IA-32 and AMD64 - * - * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer - * Adaptation for Basilisk II and improvements, copyright 2000-2004 Gwenole Beauchesne - * Portions related to CPU detection come from linux/arch/i386/kernel/setup.c - * - * ARAnyM is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * ARAnyM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with ARAnyM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef COMPEMU_H -#define COMPEMU_H - -#include "sysconfig.h" -#include "newcpu.h" - -#ifdef UAE -#ifdef CPU_64_BIT -typedef uae_u64 uintptr; -typedef uae_s64 intptr; -#else -typedef uae_u32 uintptr; -#endif -/* FIXME: cpummu.cpp also checks for USE_JIT, possibly others */ -#define USE_JIT -#endif - -#define JITPTR (uintptr) - -#ifdef USE_JIT - -/* Allocate memory near the JIT cache / .data segment for RIP-relative access. - * options=0 uses anchor-based allocation; options=1 forces low 2GB (MAP_32BIT). */ -extern void *jit_vm_acquire(uae_u32 size, int options = 0); - -#ifdef JIT_DEBUG -/* dump some information (m68k block, x86 block addresses) about the compiler state */ -extern void compiler_dumpstate(void); -#endif - -/* Now that we do block chaining, and also have linked lists on each tag, - TAGMASK can be much smaller and still do its job. Saves several megs - of memory! */ -#define TAGMASK 0x0000ffff -#define TAGSIZE (TAGMASK+1) -#define MAXRUN 1024 -#define cacheline(x) (((uintptr)x)&TAGMASK) - -extern uae_u8* start_pc_p; -extern uae_u32 start_pc; - -struct blockinfo_t; - -struct cpu_history { - uae_u16* location; -#ifdef UAE - uae_u8 specmem; -#endif -}; - -union cacheline { - cpuop_func *handler; - blockinfo_t * bi; -}; - -/* Use new spill/reload strategy when calling external functions */ -#define USE_OPTIMIZED_CALLS 0 -#if USE_OPTIMIZED_CALLS -#error implementation in progress -#endif - -/* (gb) When on, this option can save up to 30% compilation time - * when many lazy flushes occur (e.g. apps in MacOS 8.x). - */ -#define USE_SEPARATE_BIA 1 - -/* Use chain of checksum_info_t to compute the block checksum */ -#define USE_CHECKSUM_INFO 1 - -/* Use code inlining, aka follow-up of constant jumps */ -#define USE_INLINING 1 - -/* Inlining requires the chained checksum information */ -#if USE_INLINING -#undef USE_CHECKSUM_INFO -#define USE_CHECKSUM_INFO 1 -#endif - -/* Does flush_icache_range() only check for blocks falling in the requested range? */ -#define LAZY_FLUSH_ICACHE_RANGE 0 - -#define USE_F_ALIAS 1 -#define USE_OFFSET 1 -#define COMP_DEBUG 1 - -#if COMP_DEBUG -#define Dif(x) if (x) -#else -#define Dif(x) if (0) -#endif - -#define SCALE 2 - -#define BYTES_PER_INST 10240 /* paranoid ;-) */ -#if defined(CPU_arm) -#define LONGEST_68K_INST 256 /* The number of bytes the longest possible - 68k instruction takes */ -#else -#define LONGEST_68K_INST 16 /* The number of bytes the longest possible - 68k instruction takes */ -#endif -#define MAX_CHECKSUM_LEN 2048 /* The maximum size we calculate checksums - for. Anything larger will be flushed - unconditionally even with SOFT_FLUSH */ -#define MAX_HOLD_BI 3 /* One for the current block, and up to two - for jump targets */ - -#define INDIVIDUAL_INST 0 -#define FLAG_X 0x0010 -#define FLAG_N 0x0008 -#define FLAG_Z 0x0004 -#define FLAG_V 0x0002 -#define FLAG_C 0x0001 -#define FLAG_CZNV (FLAG_C | FLAG_Z | FLAG_N | FLAG_V) -#define FLAG_ALL (FLAG_C | FLAG_Z | FLAG_N | FLAG_V | FLAG_X) -#define FLAG_ZNV (FLAG_Z | FLAG_N | FLAG_V) - -#define KILLTHERAT 1 /* Set to 1 to avoid some partial_rat_stalls */ - -#if defined(CPU_arm) -#define USE_DATA_BUFFER -#define N_REGS 13 /* really 16, but 13 to 15 are SP, LR, PC */ -#else -#if defined(CPU_x86_64) -#define N_REGS 16 /* really only 15, but they are numbered 0-3,5-15 */ -#else -#define N_REGS 8 /* really only 7, but they are numbered 0,1,2,3,5,6,7 */ -#endif -#endif -#define N_FREGS 6 /* That leaves us two positions on the stack to play with */ - -/* Functions exposed to newcpu, or to what was moved from newcpu.c to - * compemu_support.c */ -extern void compiler_init(void); -extern void compiler_exit(void); -extern bool compiler_use_jit(void); -extern void flush(int save_regs); -void flush_reg(int reg); -extern void set_target(uae_u8* t); -extern uae_u8* get_target(void); -#ifdef UAE -extern void build_comp(void); -#endif -extern void set_cache_state(int enabled); -extern int get_cache_state(void); -extern uae_u32 get_jitted_size(void); -#ifdef JIT -extern void (*flush_icache)(int); -#endif -extern void alloc_cache(void); -extern int check_for_cache_miss(void); -#ifdef UAE -extern void disable_jit_on_runtime_alloc_failure(const char *what); -#endif - -/* JIT FPU compilation */ -struct jit_disable_opcodes { - bool fbcc; - bool fdbcc; - bool fscc; - bool ftrapcc; - bool fsave; - bool frestore; - bool fmove; - bool fmovem; - bool fmovec; /* for move control register */ - bool fmovecr; /* for move from constant rom */ - bool fint; - bool fsinh; - bool fintrz; - bool fsqrt; - bool flognp1; - bool fetoxm1; - bool ftanh; - bool fatan; - bool fasin; - bool fatanh; - bool fsin; - bool ftan; - bool fetox; - bool ftwotox; - bool ftentox; - bool flogn; - bool flog10; - bool flog2; - bool fabs; - bool fcosh; - bool fneg; - bool facos; - bool fcos; - bool fgetexp; - bool fgetman; - bool fdiv; - bool fmod; - bool fadd; - bool fmul; - bool fsgldiv; - bool frem; - bool fscale; - bool fsglmul; - bool fsub; - bool fsincos; - bool fcmp; - bool ftst; -}; -extern struct jit_disable_opcodes jit_disable; - - -extern void comp_fpp_opp (uae_u32 opcode, uae_u16 extra); -extern void comp_fbcc_opp (uae_u32 opcode); -extern void comp_fscc_opp (uae_u32 opcode, uae_u16 extra); -void comp_fdbcc_opp (uae_u32 opcode, uae_u16 extra); -void comp_ftrapcc_opp (uae_u32 opcode, uaecptr oldpc); -void comp_fsave_opp (uae_u32 opcode); -void comp_frestore_opp (uae_u32 opcode); - -extern uae_u32 needed_flags; -extern uae_u8* comp_pc_p; -extern void* pushall_call_handler; - -#define VREGS 32 -#define VFREGS 16 - -#define INMEM 1 -#define CLEAN 2 -#define DIRTY 3 -#define UNDEF 4 -#define ISCONST 5 - -typedef struct { - uae_u32* mem; - uintptr val; /* Must be pointer-width: PC_P holds a host pointer (64-bit on x86_64) */ - uae_u8 is_swapped; - uae_u8 status; - uae_s8 realreg; /* gb-- realreg can hold -1 */ - uae_u8 realind; /* The index in the holds[] array */ - uae_u8 needflush; - uae_u8 validsize; - uae_u8 dirtysize; - uae_u8 dummy; -} reg_status; - -typedef struct { - uae_u32* mem; - double val; - uae_u8 status; - uae_s8 realreg; /* gb-- realreg can hold -1 */ - uae_u8 realind; - uae_u8 needflush; -} freg_status; - -#define SP_REG 15 -#define PC_P 16 -#define FLAGX 17 -#define FLAGTMP 18 -#define NEXT_HANDLER 19 -#define S1 20 -#define S2 21 -#define S3 22 -#define S4 23 -#define S5 24 -#define S6 25 -#define S7 26 -#define S8 27 -#define S9 28 -#define S10 29 -#define S11 30 -#define S12 31 - -#define FP_RESULT 8 -#define FS1 9 -#define FS2 10 -#define FS3 11 - -typedef struct { - uae_u32 touched; - uae_s8 holds[VREGS]; - uae_u8 nholds; - uae_u8 canbyte; - uae_u8 canword; - uae_u8 locked; -} n_status; - -typedef struct { - uae_u32 touched; - uae_s8 holds[VFREGS]; - uae_u8 nholds; - uae_u8 locked; -} fn_status; - -/* For flag handling */ -#define NADA 1 -#define TRASH 2 -#define VALID 3 +#ifndef WINUAE_JIT_COMPEMU_H +#define WINUAE_JIT_COMPEMU_H -/* needflush values */ -#define NF_SCRATCH 0 -#define NF_TOMEM 1 -#define NF_HANDLER 2 - -typedef struct { - /* Integer part */ - reg_status state[VREGS]; - n_status nat[N_REGS]; - uae_u32 flags_on_stack; - uae_u32 flags_in_flags; - uae_u32 flags_are_important; - /* FPU part */ - freg_status fate[VFREGS]; - fn_status fat[N_FREGS]; - - /* x86 FPU part */ - uae_s8 spos[N_FREGS]; - uae_s8 onstack[6]; - uae_s8 tos; -} bigstate; - -typedef struct { - /* Integer part */ - uae_s8 virt[VREGS]; - uae_s8 nat[N_REGS]; -} smallstate; - -extern int touchcnt; - -#define IMM uae_s32 -#define IMPTR uintptr -#define RR1 uae_u32 -#define RR2 uae_u32 -#define RR4 uae_u32 -/* - R1, R2, R4 collides with ARM registers defined in ucontext -#define R1 uae_u32 -#define R2 uae_u32 -#define R4 uae_u32 -*/ -#define W1 uae_u32 -#define W2 uae_u32 -#define W4 uae_u32 -#define RW1 uae_u32 -#define RW2 uae_u32 -#define RW4 uae_u32 -#define MEMR uintptr -#define MEMW uintptr -#define MEMRW uintptr -#define MEMPTR uintptr -#define MEMPTRR MEMPTR -#define MEMPTRW MEMPTR -#define MEMPTRRW MEMPTR - -#define FW uae_u32 -#define FR uae_u32 -#define FRW uae_u32 - -#define MIDFUNC(nargs,func,args) void func args -#define COMPCALL(func) func - -#define LOWFUNC(flags,mem,nargs,func,args) static inline void func args - -/* What we expose to the outside */ -#define DECLARE_MIDFUNC(func) extern void func - -#if defined(CPU_i386) || defined(CPU_x86_64) -#include "compemu_midfunc_x86.h" -#endif - -#undef DECLARE_MIDFUNC - -extern int failure; -#define FAIL(x) do { failure|=x; } while (0) - -/* Convenience functions exposed to gencomp */ -extern uae_u32 m68k_pc_offset; -extern void readbyte(int address, int dest, int tmp); -extern void readword(int address, int dest, int tmp); -extern void readlong(int address, int dest, int tmp); -extern void writebyte(int address, int source, int tmp); -extern void writeword(int address, int source, int tmp); -extern void writelong(int address, int source, int tmp); -extern void writeword_clobber(int address, int source, int tmp); -extern void writelong_clobber(int address, int source, int tmp); -extern void get_n_addr(int address, int dest, int tmp); -extern void get_n_addr_jmp(int address, int dest, int tmp); -extern void calc_disp_ea_020(int base, uae_u32 dp, int target, int tmp); -/* Set native Z flag only if register is zero */ -extern void set_zero(int r, int tmp); -extern int kill_rodent(int r); -#define SYNC_PC_OFFSET 100 -extern void sync_m68k_pc(void); -extern uintptr get_const(int r); -extern int is_const(int r); -extern void register_branch(uintptr not_taken, uintptr taken, uae_u8 cond); -void compemu_make_sr(int sr, int tmp); -void compemu_enter_super(int sr); -void compemu_exc_make_frame(int format, int sr, int currpc, int nr, int tmp); -void compemu_bkpt(void); -extern bool disasm_this_inst; - -#define comp_get_ibyte(o) do_get_mem_byte((uae_u8 *)(comp_pc_p + (o) + 1)) -#define comp_get_iword(o) do_get_mem_word((uae_u16 *)(comp_pc_p + (o))) -#define comp_get_ilong(o) do_get_mem_long((uae_u32 *)(comp_pc_p + (o))) - -struct blockinfo_t; - -typedef struct dep_t { - uae_u32* jmp_off; - struct blockinfo_t* target; - struct blockinfo_t* source; - struct dep_t** prev_p; - struct dep_t* next; -} dependency; - -typedef struct checksum_info_t { - uae_u8 *start_p; - uae_u32 length; - struct checksum_info_t *next; -} checksum_info; - -typedef struct blockinfo_t { - uae_s32 count; - cpuop_func* direct_handler_to_use; - cpuop_func* handler_to_use; - /* The direct handler does not check for the correct address */ - - cpuop_func* handler; - cpuop_func* direct_handler; - - cpuop_func* direct_pen; - cpuop_func* direct_pcc; - -#ifdef UAE - uae_u8* nexthandler; -#endif - uae_u8* pc_p; - - uae_u32 c1; - uae_u32 c2; -#if USE_CHECKSUM_INFO - checksum_info *csi; -#else - uae_u32 len; - uae_u32 min_pcp; -#endif - - struct blockinfo_t* next_same_cl; - struct blockinfo_t** prev_same_cl_p; - struct blockinfo_t* next; - struct blockinfo_t** prev_p; - - uae_u8 optlevel; - uae_u8 needed_flags; - uae_u8 status; - uae_u8 havestate; - - dependency dep[2]; /* Holds things we depend on */ - dependency* deplist; /* List of things that depend on this */ - smallstate env; - -#ifdef JIT_DEBUG - /* (gb) size of the compiled block (direct handler) */ - uae_u32 direct_handler_size; -#endif -} blockinfo; - -#define BI_INVALID 0 -#define BI_ACTIVE 1 -#define BI_NEED_RECOMP 2 -#define BI_NEED_CHECK 3 -#define BI_CHECKING 4 -#define BI_COMPILING 5 -#define BI_FINALIZING 6 - -void execute_normal(void); -void exec_nostats(void); -void do_nothing(void); - -#else - -static inline void flush_icache(void) { } - -#endif /* !USE_JIT */ - -#ifdef UAE - -#define JIT_EXCEPTION_HANDLER -// #define JIT_ALWAYS_DISTRUST - -/* ARAnyM uses fpu_register name, used in scratch_t */ -/* FIXME: check that no ARAnyM code assumes different floating point type */ -typedef fptype fpu_register; - -extern void compile_block(cpu_history* pc_hist, int blocklen, int totcyles); - -#define MAXCYCLES (1000 * CYCLE_UNIT) -#define scaled_cycles(x) (currprefs.m68k_speed<0?(((x)/SCALE)?(((x)/SCALE IA-32 and AMD64 - * - * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer - * Adaptation for Basilisk II and improvements, copyright 2000-2004 Gwenole Beauchesne - * Portions related to CPU detection come from linux/arch/i386/kernel/setup.c - * - * ARAnyM is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * ARAnyM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with ARAnyM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -/* - * UAE - The Un*x Amiga Emulator - * - * MC68881 emulation - * - * Copyright 1996 Herman ten Brugge - * Adapted for JIT compilation (c) Bernd Meyer, 2000 - */ - -#include "sysdeps.h" - -#ifdef JIT - -#include -#include -#include - -#include "memory-uae.h" -#include "readcpu.h" -#include "newcpu.h" -#include "compemu.h" -//#include "fpu/fpu.h" -//#include "fpu/flags.h" -//#include "fpu/exceptions.h" -//#include "fpu/rounding.h" - -//#define DEBUG 0 -#include "debug.h" - -struct jit_disable_opcodes jit_disable; - -#if defined(USE_LONG_DOUBLE) || defined(USE_QUAD_DOUBLE) -#define LD(x) x ## L -#else -#define LD(x) x +#elif defined(CPU_i386) || defined(CPU_x86_64) || defined(__i386__) || \ + defined(__x86_64__) || defined(_M_IX86) || defined(_M_AMD64) +#include "x86/compemu_fpp_x86.cpp" #endif - -// gb-- WARNING: get_fpcr() and set_fpcr() support is experimental -#define HANDLE_FPCR 0 - -// - IEEE-based fpu core must be used -#if defined(FPU_IEEE) -# define CAN_HANDLE_FPCR -#endif - -// - Generic rounding mode and precision modes are supported if set together -#if defined(FPU_USE_GENERIC_ROUNDING_MODE) && defined(FPU_USE_GENERIC_ROUNDING_PRECISION) -# define CAN_HANDLE_FPCR -#endif - -// - X86 rounding mode and precision modes are *not* supported but might work (?!) -#if defined(FPU_USE_X86_ROUNDING_MODE) && defined(FPU_USE_X86_ROUNDING_PRECISION) -# define CAN_HANDLE_FPCR -#endif - -#if HANDLE_FPCR && !defined(CAN_HANDLE_FPCR) -# warning "Can't handle FPCR, will FAIL(1) at runtime" -# undef HANDLE_FPCR -# define HANDLE_FPCR 0 -#endif - -//#define STATIC_INLINE static inline -#define MAKE_FPSR(r) do { fmov_rr(FP_RESULT,r); } while (0) - -#if 0 -#define delay nop() ;nop() -#define delay2 nop() ;nop() -#else -#define delay -#define delay2 -#endif - -#define UNKNOWN_EXTRA 0xFFFFFFFF -#if 0 -static void fpuop_illg(uae_u32 opcode, uae_u32 /* extra */) -{ -/* - if (extra == UNKNOWN_EXTRA) - printf("FPU opcode %x, extra UNKNOWN_EXTRA\n",opcode & 0xFFFF); - else - printf("FPU opcode %x, extra %x\n",opcode & 0xFFFF,extra & 0xFFFF); -*/ - op_illg(opcode); -} -#endif - -uae_s32 temp_fp[4]; /* To convert between FP/integer */ - -/* return register number, or -1 for failure */ -STATIC_INLINE int get_fp_value(uae_u32 opcode, uae_u16 extra) -{ - int size; - int mode; - int reg; - uae_u32 ad = 0; - static int const sz1[8] = { 4, 4, 12, 12, 2, 8, 1, 0 }; - static int const sz2[8] = { 4, 4, 12, 12, 2, 8, 2, 0 }; - - if ((extra & 0x4000) == 0) - { - return ((extra >> 10) & 7); - } - - mode = (opcode >> 3) & 7; - reg = opcode & 7; - size = (extra >> 10) & 7; - switch (mode) - { - case 0: /* Dn */ - switch (size) - { - case 6: /* byte */ - sign_extend_8_rr(S1, reg); - mov_l_mr(JITPTR temp_fp, S1); - delay2; - fmovi_rm(FS1, JITPTR temp_fp); - return FS1; - case 4: /* word */ - sign_extend_16_rr(S1, reg); - mov_l_mr(JITPTR temp_fp, S1); - delay2; - fmovi_rm(FS1, JITPTR temp_fp); - return FS1; - case 0: /* long */ - mov_l_mr(JITPTR temp_fp, reg); - delay2; - fmovi_rm(FS1, JITPTR temp_fp); - return FS1; - case 1: /* single precision */ - mov_l_mr(JITPTR temp_fp, reg); - delay2; - fmovs_rm(FS1, JITPTR temp_fp); - return FS1; - default: - return -1; - } - return -1; /* Should be unreachable */ - case 1: /* An */ - return -1; /* Genuine invalid instruction */ - default: - break; - } - - /* OK, we *will* have to load something from an address. Let's make - sure we know how to handle that, or quit early --- i.e. *before* - we do any postincrement/predecrement that we may regret */ - switch (size) - { - case 0: /* long */ - case 1: /* single precision */ - case 2: /* extended precision */ - case 4: /* word */ - case 5: /* double precision */ - case 6: /* byte */ - break; - case 3: /* packed decimal static */ - default: - return -1; - } - - switch (mode) - { - case 2: /* (An) */ - ad = S1; /* We will change it, anyway ;-) */ - mov_l_rr(ad, reg + 8); - break; - case 3: /* (An)+ */ - ad = S1; - mov_l_rr(ad, reg + 8); - lea_l_brr(reg + 8, reg + 8, (reg == 7 ? sz2[size] : sz1[size])); - break; - case 4: /* -(An) */ - ad = S1; - lea_l_brr(reg + 8, reg + 8, -(reg == 7 ? sz2[size] : sz1[size])); - mov_l_rr(ad, reg + 8); - break; - case 5: /* d16(An) */ - { - uae_u32 off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); - - ad = S1; - mov_l_rr(ad, reg + 8); - lea_l_brr(ad, ad, off); - } - break; - case 6: /* d8(An,Xn) */ - { - uae_u32 dp = comp_get_iword((m68k_pc_offset += 2) - 2); - - ad = S1; - calc_disp_ea_020(reg + 8, dp, ad, S2); - } - break; - case 7: - switch (reg) - { - case 0: /* abs.w */ - { - uae_u32 off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); - - ad = S1; - mov_l_ri(ad, off); - } - break; - case 1: /* abs.l */ - { - uae_u32 off = comp_get_ilong((m68k_pc_offset += 4) - 4); - - ad = S1; - mov_l_ri(ad, off); - } - break; - case 2: /* d16(pc) */ - { - uae_u32 address = (uae_u32)(start_pc + ((char *) comp_pc_p - (char *) start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); - - ad = S1; - mov_l_ri(ad, address + PC16off); - } - break; - case 3: /* d8(pc,Xn) */ - return -1; - case 4: /* #imm */ - { - uae_u32 address = (uae_u32)(start_pc + ((char *) comp_pc_p - (char *) start_pc_p) + m68k_pc_offset); - - ad = S1; - // Immediate addressing mode && Operation Length == Byte -> - // Use the low-order byte of the extension word. - if (size == 6) - address++; - mov_l_ri(ad, address); - m68k_pc_offset += sz2[size]; - } - break; - default: - return -1; - } - } - - switch (size) - { - case 0: /* long */ - readlong(ad, S2, S3); - mov_l_mr(JITPTR temp_fp, S2); - delay2; - fmovi_rm(FS1, JITPTR temp_fp); - break; - case 1: /* single precision */ - readlong(ad, S2, S3); - mov_l_mr(JITPTR temp_fp, S2); - delay2; - fmovs_rm(FS1, JITPTR temp_fp); - break; - case 2: /* extended precision */ - readword(ad, S2, S3); - mov_w_mr((JITPTR temp_fp) + 8, S2); - add_l_ri(ad, 4); - readlong(ad, S2, S3); - // always set the explicit integer bit. - or_l_ri(S2, 0x80000000); - mov_l_mr(JITPTR (temp_fp) + 4, S2); - add_l_ri(ad, 4); - readlong(ad, S2, S3); - mov_l_mr(JITPTR (temp_fp), S2); - delay2; - fmov_ext_rm(FS1, JITPTR (temp_fp)); - break; - case 3: /* packed decimal static */ - return -1; /* Some silly "packed" stuff */ - case 4: /* word */ - readword(ad, S2, S3); - sign_extend_16_rr(S2, S2); - mov_l_mr(JITPTR temp_fp, S2); - delay2; - fmovi_rm(FS1, JITPTR temp_fp); - break; - case 5: /* double precision */ - readlong(ad, S2, S3); - mov_l_mr((JITPTR temp_fp) + 4, S2); - add_l_ri(ad, 4); - readlong(ad, S2, S3); - mov_l_mr(JITPTR (temp_fp), S2); - delay2; - fmov_rm(FS1, JITPTR (temp_fp)); - break; - case 6: /* byte */ - readbyte(ad, S2, S3); - sign_extend_8_rr(S2, S2); - mov_l_mr(JITPTR temp_fp, S2); - delay2; - fmovi_rm(FS1, JITPTR temp_fp); - break; - default: - return -1; - } - return FS1; -} - -static struct { - fpu_register b[2]; - fpu_register w[2]; - fpu_register l[2]; -} clamp_bounds = { - { -128.0, 127.0 }, - { -32768.0, 32767.0 }, - { -2147483648.0, 2147483647.0 } -}; - -/* return of -1 means failure, >=0 means OK */ -STATIC_INLINE int put_fp_value(int val, uae_u32 opcode, uae_u16 extra) -{ - int size; - int mode; - int reg; - uae_u32 ad; - static int const sz1[8] = { 4, 4, 12, 12, 2, 8, 1, 0 }; - static int const sz2[8] = { 4, 4, 12, 12, 2, 8, 2, 0 }; - - if ((extra & 0x4000) == 0) - { - const int dest_reg = (extra >> 10) & 7; - - fmov_rr(dest_reg, val); - // gb-- status register is affected - MAKE_FPSR(dest_reg); - return 0; - } - - mode = (opcode >> 3) & 7; - reg = opcode & 7; - size = (extra >> 10) & 7; - ad = (uae_u32) -1; - switch (mode) - { - case 0: /* Dn */ - switch (size) - { - case 6: /* byte */ - fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.b); - delay; - mov_b_rm(reg, JITPTR temp_fp); - return 0; - case 4: /* word */ - fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.w); - delay; - mov_w_rm(reg, JITPTR temp_fp); - return 0; - case 0: /* long */ - fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.l); - fmovi_mr(JITPTR temp_fp, val); - delay; - mov_l_rm(reg, JITPTR temp_fp); - return 0; - case 1: /* single precision */ - fmovs_mr(JITPTR temp_fp, val); - delay; - mov_l_rm(reg, JITPTR temp_fp); - return 0; - default: - return -1; - } - case 1: /* An */ - return -1; /* genuine invalid instruction */ - default: - break; - } - - /* Let's make sure we get out *before* doing something silly if - we can't handle the size */ - switch (size) - { - case 0: /* long */ - case 1: /* single precision */ - case 2: /* extended precision */ - case 4: /* word */ - case 5: /* double precision */ - case 6: /* byte */ - break; - case 3: /* packed decimal static */ - default: - return -1; - } - - switch (mode) - { - case 2: /* (An) */ - ad = S1; - mov_l_rr(ad, reg + 8); - break; - case 3: /* (An)+ */ - ad = S1; - mov_l_rr(ad, reg + 8); - lea_l_brr(reg + 8, reg + 8, (reg == 7 ? sz2[size] : sz1[size])); - break; - case 4: /* -(An) */ - ad = S1; - lea_l_brr(reg + 8, reg + 8, -(reg == 7 ? sz2[size] : sz1[size])); - mov_l_rr(ad, reg + 8); - break; - case 5: /* d16(An) */ - { - uae_u32 off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); - - ad = S1; - mov_l_rr(ad, reg + 8); - add_l_ri(ad, off); - } - break; - case 6: /* d8(An,Xn) */ - { - uae_u32 dp = comp_get_iword((m68k_pc_offset += 2) - 2); - - ad = S1; - calc_disp_ea_020(reg + 8, dp, ad, S2); - } - break; - case 7: - switch (reg) - { - case 0: /* abs.w */ - { - uae_u32 off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); - - ad = S1; - mov_l_ri(ad, off); - } - break; - case 1: /* abs.l */ - { - uae_u32 off = comp_get_ilong((m68k_pc_offset += 4) - 4); - - ad = S1; - mov_l_ri(ad, off); - } - break; - case 2: /* d16(pc) */ - { - uae_u32 address = (uae_u32)(start_pc + ((char *) comp_pc_p - (char *) start_pc_p) + m68k_pc_offset); - uae_s32 PC16off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); - - ad = S1; - mov_l_ri(ad, address + PC16off); - } - break; - case 3: /* d8(pc,Xn) */ - return -1; - case 4: /* #imm */ - { - uae_u32 address = (uae_u32)(start_pc + ((char *) comp_pc_p - (char *) start_pc_p) + m68k_pc_offset); - - ad = S1; - mov_l_ri(ad, address); - m68k_pc_offset += sz2[size]; - } - break; - default: - return -1; - } - } - - switch (size) - { - case 0: /* long */ - fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.l); - delay; - mov_l_rm(S2, JITPTR temp_fp); - writelong_clobber(ad, S2, S3); - break; - case 1: /* single precision */ - fmovs_mr(JITPTR temp_fp, val); - delay; - mov_l_rm(S2, JITPTR temp_fp); - writelong_clobber(ad, S2, S3); - break; - case 2: /* extended precision */ - fmov_ext_mr(JITPTR temp_fp, val); - delay; - mov_w_rm(S2, JITPTR temp_fp + 8); - writeword_clobber(ad, S2, S3); - add_l_ri(ad, 4); - mov_l_rm(S2, JITPTR temp_fp + 4); - writelong_clobber(ad, S2, S3); - add_l_ri(ad, 4); - mov_l_rm(S2, JITPTR temp_fp); - writelong_clobber(ad, S2, S3); - break; - case 3: /* packed decimal static */ - return -1; /* Packed */ - case 4: /* word */ - fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.w); - delay; - mov_l_rm(S2, JITPTR temp_fp); - writeword_clobber(ad, S2, S3); - break; - case 5: /* double precision */ - fmov_mr(JITPTR temp_fp, val); - delay; - mov_l_rm(S2, JITPTR temp_fp + 4); - writelong_clobber(ad, S2, S3); - add_l_ri(ad, 4); - mov_l_rm(S2, JITPTR temp_fp); - writelong_clobber(ad, S2, S3); - break; - case 6: /* byte */ - fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.b); - delay; - mov_l_rm(S2, JITPTR temp_fp); - writebyte(ad, S2, S3); - break; - default: - return -1; - } - return 0; -} - - -/* return -1 for failure, or register number for success */ -STATIC_INLINE int get_fp_ad(uae_u32 opcode) -{ - int mode; - int reg; - uae_s32 off; - - mode = (opcode >> 3) & 7; - reg = opcode & 7; - switch (mode) - { - case 0: /* Dn */ - case 1: /* An */ - return -1; - case 2: /* (An) */ - case 3: /* (An)+ */ - case 4: /* -(An) */ - mov_l_rr(S1, 8 + reg); - return S1; - case 5: /* d16(An) */ - off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); - mov_l_rr(S1, 8 + reg); - add_l_ri(S1, off); - return S1; - case 6: /* d8(An,Xn) */ - return -1; - break; - case 7: - switch (reg) - { - case 0: /* abs.w */ - off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); - mov_l_ri(S1, off); - return S1; - case 1: /* abs.l */ - off = comp_get_ilong((m68k_pc_offset += 4) - 4); - mov_l_ri(S1, off); - return S1; - case 2: /* d16(pc) */ - off = (uae_s32)(start_pc + ((char *) comp_pc_p - (char *) start_pc_p) + m68k_pc_offset); - off += (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); - mov_l_ri(S1, off); - return S1; - case 3: /* d8(pc,Xn) */ - return -1; - default: - return -1; - } - } - abort(); -} - - -/* return -1 for failure, or register number for success */ -void comp_fdbcc_opp (uae_u32 /* opcode */, uae_u16 /* extra */) -{ - if (jit_disable.fdbcc) - { - FAIL(1); - return; - } - FAIL(1); - return; -} - - -void comp_fscc_opp(uae_u32 opcode, uae_u16 extra) -{ - int reg; - - if (!currprefs.compfpu) - { - FAIL(1); - return; - } - if (jit_disable.fscc) - { - FAIL(1); - return; - } - - if (extra & 0x20) - { /* only cc from 00 to 1f are defined */ - FAIL(1); - return; - } - if ((opcode & 0x38) != 0) - { /* We can only do to integer register */ - FAIL(1); - return; - } - - fflags_into_flags(S2); - reg = (opcode & 7); - - mov_l_ri(S1, 255); - mov_l_ri(S4, 0); - switch (extra & 0x0f) - { /* according to fpp.c, the 0x10 bit is ignored - */ - case 0: - break; /* set never */ - case 1: - mov_l_rr(S2, S4); - cmov_l_rr(S4, S1, 4); - cmov_l_rr(S4, S2, 10); - break; - case 2: - cmov_l_rr(S4, S1, 7); - break; - case 3: - cmov_l_rr(S4, S1, 3); - break; - case 4: - mov_l_rr(S2, S4); - cmov_l_rr(S4, S1, 2); - cmov_l_rr(S4, S2, 10); - break; - case 5: - mov_l_rr(S2, S4); - cmov_l_rr(S4, S1, 6); - cmov_l_rr(S4, S2, 10); - break; - case 6: - cmov_l_rr(S4, S1, 5); - break; - case 7: - cmov_l_rr(S4, S1, 11); - break; - case 8: - cmov_l_rr(S4, S1, 10); - break; - case 9: - cmov_l_rr(S4, S1, 4); - break; - case 10: - cmov_l_rr(S4, S1, 10); - cmov_l_rr(S4, S1, 7); - break; - case 11: - cmov_l_rr(S4, S1, 4); - cmov_l_rr(S4, S1, 3); - break; - case 12: - cmov_l_rr(S4, S1, 2); - break; - case 13: - cmov_l_rr(S4, S1, 6); - break; - case 14: - cmov_l_rr(S4, S1, 5); - cmov_l_rr(S4, S1, 10); - break; - case 15: - mov_l_rr(S4, S1); - break; - } - - if ((opcode & 0x38) == 0) - { - mov_b_rr(reg, S4); - } else - { - abort(); -#if 0 - int cc; - - if (get_fp_ad(opcode) < 0) - { - FAIL(1); - } else - { - put_byte(ad, cc ? 0xff : 0x00); - } -#endif - } -} - - -void comp_ftrapcc_opp (uae_u32 /* opcode */, uaecptr /* oldpc */) -{ - FAIL(1); - return; -} - - -void comp_fbcc_opp(uae_u32 opcode) -{ - uae_u32 start_68k_offset = m68k_pc_offset; - uae_s32 off; - uintptr v1; - uintptr v2; - int cc; - - if (!currprefs.compfpu) - { - FAIL(1); - return; - } - if (jit_disable.fbcc) - { - FAIL(1); - return; - } - if (opcode & 0x20) - { /* only cc from 00 to 1f are defined */ - FAIL(1); - return; - } - if ((opcode & 0x40) == 0) - { - off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); - } else - { - off = (uae_s32) comp_get_ilong((m68k_pc_offset += 4) - 4); - } - /* Match the ARM64 FBcc fix: keep the signed displacement separate - * from the 64-bit host pointer so non-PC_P set_const paths do not - * lose pointer width or zero-extend backward branches. */ - { - uae_s32 displacement = off - (uae_s32)(m68k_pc_offset - start_68k_offset); - mov_l_ri(S1, (uintptr)(uae_s32)displacement); - add_l_ri(S1, (uintptr)comp_pc_p); - } - mov_l_ri(PC_P, JITPTR comp_pc_p); - - /* Now they are both constant. Might as well fold in m68k_pc_offset */ - add_l_ri(S1, m68k_pc_offset); - add_l_ri(PC_P, m68k_pc_offset); - m68k_pc_offset = 0; - - /* according to fpp.c, the 0x10 bit is ignored - (it handles exception handling, which we don't - do, anyway ;-) */ - cc = opcode & 0x0f; - v1 = get_const(PC_P); - v2 = get_const(S1); - fflags_into_flags(S2); - - switch (cc) - { - case 0: - break; /* jump never */ - case 1: - mov_l_rr(S2, PC_P); - cmov_l_rr(PC_P, S1, 4); - cmov_l_rr(PC_P, S2, 10); - break; - case 2: - register_branch(v1, v2, 7); - break; - case 3: - register_branch(v1, v2, 3); - break; - case 4: - mov_l_rr(S2, PC_P); - cmov_l_rr(PC_P, S1, 2); - cmov_l_rr(PC_P, S2, 10); - break; - case 5: - mov_l_rr(S2, PC_P); - cmov_l_rr(PC_P, S1, 6); - cmov_l_rr(PC_P, S2, 10); - break; - case 6: - register_branch(v1, v2, 5); - break; - case 7: - register_branch(v1, v2, 11); - break; - case 8: - register_branch(v1, v2, 10); - break; - case 9: - register_branch(v1, v2, 4); - break; - case 10: - cmov_l_rr(PC_P, S1, 10); - cmov_l_rr(PC_P, S1, 7); - break; - case 11: - cmov_l_rr(PC_P, S1, 4); - cmov_l_rr(PC_P, S1, 3); - break; - case 12: - register_branch(v1, v2, 2); - break; - case 13: - register_branch(v1, v2, 6); - break; - case 14: - cmov_l_rr(PC_P, S1, 5); - cmov_l_rr(PC_P, S1, 10); - break; - case 15: - mov_l_rr(PC_P, S1); - break; - } -} - - - /* Floating point conditions - The "NotANumber" part could be problematic; Howver, when NaN is - encountered, the ftst instruction sets bot N and Z to 1 on the x87, - so quite often things just fall into place. This is probably not - accurate wrt the 68k FPU, but it is *as* accurate as this was before. - However, some more thought should go into fixing this stuff up so - it accurately emulates the 68k FPU. ->==> 13) & 0x7) - { - case 1: /* illegal */ - break; - - case 3: /* FMOVE Fpn, */ - /* 2nd most common */ - if (jit_disable.fmove) - { - FAIL(1); - return; - } - - if (put_fp_value((extra >> 7) & 7, opcode, extra) < 0) - { - FAIL(1); - return; - } - return; - - case 6: /* FMOVEM , */ - case 7: /* FMOVEM , */ - if (jit_disable.fmovem) - { - FAIL(1); - return; - } - - { - int ad; - uae_u32 list = 0; - int incr = 0; - - if (extra & 0x2000) - { - /* FMOVEM FPP->memory */ - switch ((extra >> 11) & 3) - { /* Get out early if failure */ - case 0: /* static pred */ - case 2: /* static postinc */ - break; - case 1: /* dynamic pred */ - case 3: /* dynamic postinc */ - default: - FAIL(1); - return; - } - if ((ad = get_fp_ad(opcode)) < 0) - { - FAIL(1); - return; - } - switch ((extra >> 11) & 3) - { - case 0: /* static pred */ - list = extra & 0xff; - incr = -1; - break; - case 2: /* static postinc */ - list = extra & 0xff; - incr = 1; - break; - case 1: /* dynamic pred */ - case 3: /* dynamic postinc */ - abort(); - } - if (incr < 0) - { /* Predecrement */ - for (reg = 7; reg >= 0; reg--) - { - if (list & 0x80) - { - fmov_ext_mr(JITPTR temp_fp, reg); - delay; - sub_l_ri(ad, 4); - mov_l_rm(S2, JITPTR temp_fp); - writelong_clobber(ad, S2, S3); - sub_l_ri(ad, 4); - mov_l_rm(S2, JITPTR temp_fp + 4); - writelong_clobber(ad, S2, S3); - sub_l_ri(ad, 4); - mov_w_rm(S2, JITPTR temp_fp + 8); - writeword_clobber(ad, S2, S3); - } - list <<= 1; - } - } else - { /* Postincrement */ - for (reg = 0; reg < 8; reg++) - { - if (list & 0x80) - { - fmov_ext_mr(JITPTR temp_fp, reg); - delay; - mov_w_rm(S2, JITPTR temp_fp + 8); - writeword_clobber(ad, S2, S3); - add_l_ri(ad, 4); - mov_l_rm(S2, JITPTR temp_fp + 4); - writelong_clobber(ad, S2, S3); - add_l_ri(ad, 4); - mov_l_rm(S2, JITPTR temp_fp); - writelong_clobber(ad, S2, S3); - add_l_ri(ad, 4); - } - list <<= 1; - } - } - if ((opcode & 0x38) == 0x18) - mov_l_rr((opcode & 7) + 8, ad); - if ((opcode & 0x38) == 0x20) - mov_l_rr((opcode & 7) + 8, ad); - } else - { - /* FMOVEM memory->FPP */ - - int ad; - - switch ((extra >> 11) & 3) - { /* Get out early if failure */ - case 0: /* static pred */ - case 2: /* static postinc */ - break; - case 1: /* dynamic pred */ - case 3: /* dynamic postinc */ - default: - FAIL(1); - return; - } - ad = get_fp_ad(opcode); - if (ad < 0) - { - D(bug("no ad\n")); - FAIL(1); - return; - } - switch ((extra >> 11) & 3) - { - case 0: /* static pred */ - list = extra & 0xff; - incr = -1; - break; - case 2: /* static postinc */ - list = extra & 0xff; - incr = 1; - break; - case 1: /* dynamic pred */ - case 3: /* dynamic postinc */ - abort(); - } - - if (incr < 0) - { - // not reached - for (reg = 7; reg >= 0; reg--) - { - if (list & 0x80) - { - sub_l_ri(ad, 4); - readlong(ad, S2, S3); - mov_l_mr(JITPTR (temp_fp), S2); - sub_l_ri(ad, 4); - readlong(ad, S2, S3); - mov_l_mr(JITPTR (temp_fp) + 4, S2); - sub_l_ri(ad, 4); - readword(ad, S2, S3); - mov_w_mr((JITPTR temp_fp) + 8, S2); - delay2; - fmov_ext_rm(reg, JITPTR (temp_fp)); - } - list <<= 1; - } - } else - { - for (reg = 0; reg < 8; reg++) - { - if (list & 0x80) - { - readword(ad, S2, S3); - mov_w_mr((JITPTR temp_fp) + 8, S2); - add_l_ri(ad, 4); - readlong(ad, S2, S3); - mov_l_mr(JITPTR (temp_fp) + 4, S2); - add_l_ri(ad, 4); - readlong(ad, S2, S3); - mov_l_mr(JITPTR(temp_fp), S2); - add_l_ri(ad, 4); - delay2; - fmov_ext_rm(reg, JITPTR (temp_fp)); - } - list <<= 1; - } - } - if ((opcode & 0x38) == 0x18) - mov_l_rr((opcode & 7) + 8, ad); - if ((opcode & 0x38) == 0x20) - mov_l_rr((opcode & 7) + 8, ad); - } - } - return; - - case 4: /* FMOVEM , */ - case 5: /* FMOVEM , */ - if (jit_disable.fmovec) - { - FAIL(1); - return; - } - - /* rare */ - if ((opcode & 0x30) == 0) - { - /* = Dn or An */ - if (extra & 0x2000) - { - if (extra & 0x1000) - { -#if HANDLE_FPCR - mov_l_rm(opcode & 15, (uintptr) & fpu.fpcr.rounding_mode); - or_l_rm(opcode & 15, (uintptr) & fpu.fpcr.rounding_precision); -#else - FAIL(1); - return; -#endif - } - if (extra & 0x0800) - { - FAIL(1); - return; - } - if (extra & 0x0400) - { - /* FPIAR: fixme; we cannot correctly return the address from compiled code */ -#ifdef UAE - mov_l_rm(opcode & 15, JITPTR ®s.fpiar); -#else - mov_l_rm(opcode & 15, JITPTR &fpu.instruction_address); -#endif - return; - } - } else - { - // gb-- moved here so that we may FAIL() without generating any code - if (extra & 0x0800) - { - // set_fpsr(m68k_dreg (regs, opcode & 15)); - FAIL(1); - return; - } - if (extra & 0x1000) - { -#if HANDLE_FPCR -#if defined(FPU_USE_X86_ROUNDING_MODE) && defined(FPU_USE_X86_ROUNDING_PRECISION) - FAIL(1); - return; -#endif - mov_l_rr(S1, opcode & 15); - mov_l_rr(S2, opcode & 15); - and_l_ri(S1, FPCR_ROUNDING_PRECISION); - and_l_ri(S2, FPCR_ROUNDING_MODE); - mov_l_mr((uintptr) & fpu.fpcr.rounding_precision, S1); - mov_l_mr((uintptr) & fpu.fpcr.rounding_mode, S2); -#else - FAIL(1); - return; -#endif - } - if (extra & 0x0400) - { - /* FPIAR: does that make sense at all? */ -#ifdef UAE - mov_l_mr(JITPTR ®s.fpiar, opcode & 15); -#else - mov_l_mr(JITPTR &fpu.instruction_address, opcode & 15); -#endif - } - return; - } - } else if ((opcode & 0x3f) == 0x3c) - { - /* = #imm */ - if ((extra & 0x2000) == 0) - { - // gb-- moved here so that we may FAIL() without generating any code - if (extra & 0x0800) - { - FAIL(1); - return; - } - if (extra & 0x1000) - { - comp_get_ilong((m68k_pc_offset += 4) - 4); -#if HANDLE_FPCR -#if defined(FPU_USE_X86_ROUNDING_MODE) && defined(FPU_USE_X86_ROUNDING_PRECISION) - FAIL(1); - return; -#endif - // mov_l_mi((uintptr)®s.fpcr,val); - mov_l_ri(S1, val); - mov_l_ri(S2, val); - and_l_ri(S1, FPCR_ROUNDING_PRECISION); - and_l_ri(S2, FPCR_ROUNDING_MODE); - mov_l_mr((uintptr) & fpu.fpcr.rounding_precision, S1); - mov_l_mr((uintptr) & fpu.fpcr.rounding_mode, S2); -#else - FAIL(1); - return; -#endif - } - if (extra & 0x0400) - { - uae_u32 val = comp_get_ilong((m68k_pc_offset += 4) - 4); -#ifdef UAE - mov_l_mi(JITPTR ®s.fpiar, val); -#else - mov_l_mi(JITPTR &fpu.instruction_address, val); -#endif - } - return; - } - FAIL(1); - return; - } else if (extra & 0x2000) - { - FAIL(1); - return; - } else - { - FAIL(1); - return; - } - FAIL(1); - return; - - case 0: - case 2: /* Extremely common */ - reg = (extra >> 7) & 7; - if ((extra & 0xfc00) == 0x5c00) - { - if (jit_disable.fmovecr) - { - FAIL(1); - return; - } - - switch (extra & 0x7f) - { - case 0x00: - fmov_pi(reg); - break; - case 0x0b: - fmov_log10_2(reg); - break; - case 0x0c: -#if defined(USE_LONG_DOUBLE) || defined(USE_QUAD_DOUBLE) - fmov_ext_rm(reg, (uintptr) & const_e); -#else - fmov_rm(reg, (uintptr) & const_e); -#endif - break; - case 0x0d: - fmov_log2_e(reg); - break; - case 0x0e: -#if defined(USE_LONG_DOUBLE) || defined(USE_QUAD_DOUBLE) - fmov_ext_rm(reg, (uintptr) & const_log10_e); -#else - fmov_rm(reg, (uintptr) & const_log10_e); -#endif - break; - case 0x0f: - fmov_0(reg); - break; - case 0x30: - fmov_loge_2(reg); - break; - case 0x31: -#if defined(USE_LONG_DOUBLE) || defined(USE_QUAD_DOUBLE) - fmov_ext_rm(reg, (uintptr) & const_loge_10); -#else - fmov_rm(reg, (uintptr) & const_loge_10); -#endif - break; - case 0x32: - fmov_1(reg); - break; - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x3a: - case 0x3b: -#if defined(USE_LONG_DOUBLE) || defined(USE_QUAD_DOUBLE) - case 0x3c: - case 0x3d: - case 0x3e: - case 0x3f: - fmov_ext_rm(reg, (uintptr) (power10 + (extra & 0x7f) - 0x32)); -#else - fmov_rm(reg, (uintptr) (power10 + (extra & 0x7f) - 0x32)); -#endif - break; - default: - /* This is not valid, so we fail */ - FAIL(1); - return; - } - return; - } - - switch (extra & 0x7f) - { - case 0x00: /* FMOVE */ - case 0x40: /* FSMOVE: Explicit rounding. This is just a quick fix. Same - * for all other cases that have three choices */ - case 0x44: /* FDMOVE */ - if (jit_disable.fmove) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fmov_rr(reg, src); - MAKE_FPSR(src); - break; - case 0x01: /* FINT */ - if (jit_disable.fint) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x02: /* FSINH */ - if (jit_disable.fsinh) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x03: /* FINTRZ */ - if (jit_disable.fintrz) - { - FAIL(1); - return; - } -#ifdef USE_X86_FPUCW - /* If we have control over the CW, we can do this */ - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - mov_l_ri(S1, 16); /* Switch to "round to zero" mode */ - fldcw_m_indexed(S1, JITPTR x86_fpucw); - - frndint_rr(reg, src); - - /* restore control word */ - mov_l_rm(S1, JITPTR ®s.fpcr); - and_l_ri(S1, 0x000000f0); - fldcw_m_indexed(S1, JITPTR x86_fpucw); - - MAKE_FPSR(reg); - break; -#endif - FAIL(1); - return; - break; - case 0x04: /* FSQRT */ - case 0x41: /* FSSQRT */ - case 0x45: /* FDSQRT */ - if (jit_disable.fsqrt) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fsqrt_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x06: /* FLOGNP1 */ - if (jit_disable.flognp1) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x08: /* FETOXM1 */ - if (jit_disable.fetoxm1) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x09: /* FTANH */ - if (jit_disable.ftanh) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x0a: /* FATAN */ - if (jit_disable.fatan) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x0c: /* FASIN */ - if (jit_disable.fasin) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x0d: /* FATANH */ - if (jit_disable.fatanh) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x0e: /* FSIN */ - if (jit_disable.fsin) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fsin_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x0f: /* FTAN */ - if (jit_disable.ftan) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x10: /* FETOX */ - if (jit_disable.fetox) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fetox_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x11: /* FTWOTOX */ - if (jit_disable.ftwotox) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - ftwotox_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x12: /* FTENTOX */ - if (jit_disable.ftentox) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x14: /* FLOGN */ - if (jit_disable.flogn) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x15: /* FLOG10 */ - if (jit_disable.flog10) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x16: /* FLOG2 */ - if (jit_disable.flog2) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - flog2_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x18: /* FABS */ - case 0x58: /* FSABS */ - case 0x5c: /* FDABS */ - if (jit_disable.fabs) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fabs_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x19: /* FCOSH */ - if (jit_disable.fcosh) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x1a: /* FNEG */ - case 0x5a: /* FSNEG */ - case 0x5e: /* FDNEG */ - if (jit_disable.fneg) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fneg_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x1c: /* FACOS */ - if (jit_disable.facos) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x1d: /* FCOS */ - if (jit_disable.fcos) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fcos_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x1e: /* FGETEXP */ - if (jit_disable.fgetexp) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x1f: /* FGETMAN */ - if (jit_disable.fgetman) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x20: /* FDIV */ - case 0x60: /* FSDIV */ - case 0x64: /* FDDIV */ - if (jit_disable.fdiv) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fdiv_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x21: /* FMOD */ - if (jit_disable.fmod) - { - FAIL(1); - return; - } - - // FIXME: the quotient byte must be computed - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - frem_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x22: /* FADD */ - case 0x62: /* FSADD */ - case 0x66: /* FDADD */ - if (jit_disable.fadd) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fadd_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x23: /* FMUL */ - case 0x63: /* FSMUL */ - case 0x67: /* FDMUL */ - if (jit_disable.fmul) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fmul_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x24: /* FSGLDIV */ - if (jit_disable.fsgldiv) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fdiv_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x25: /* FREM */ - if (jit_disable.frem) - { - FAIL(1); - return; - } - // gb-- disabled because the quotient byte must be computed - // otherwise, free rotation in ClarisWorks doesn't work. - FAIL(1); - return; - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - frem1_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x26: /* FSCALE */ - if (jit_disable.fscale) - { - FAIL(1); - return; - } - - FAIL(1); - return; - break; - case 0x27: /* FSGLMUL */ - if (jit_disable.fsglmul) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fmul_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x28: /* FSUB */ - case 0x68: /* FSSUB */ - case 0x6c: /* FDSUB */ - if (jit_disable.fsub) - { - FAIL(1); - return; - } - - dont_care_fflags(); - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fsub_rr(reg, src); - MAKE_FPSR(reg); - break; - case 0x30: /* FSINCOS */ - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - if (jit_disable.fsincos) - { - FAIL(1); - return; - } - - FAIL(1); - return; - dont_care_fflags(); - break; - case 0x38: /* FCMP */ - if (jit_disable.fcmp) - { - FAIL(1); - return; - } - - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fmov_rr(FP_RESULT, reg); - fsub_rr(FP_RESULT, src); /* Right way? */ - break; - case 0x3a: /* FTST */ - if (jit_disable.ftst) - { - FAIL(1); - return; - } - - src = get_fp_value(opcode, extra); - if (src < 0) - { - FAIL(1); /* Illegal instruction */ - return; - } - fmov_rr(FP_RESULT, src); - break; - default: - FAIL(1); - return; - break; - } - return; - } - FAIL(1); -} - -#endif - -#endif /* CPU_AARCH64 */ diff --git a/jit/compemu_support.cpp b/jit/compemu_support.cpp index 3e78fc8d..71e6899a 100644 --- a/jit/compemu_support.cpp +++ b/jit/compemu_support.cpp @@ -1,6481 +1,7 @@ -#if defined(CPU_AARCH64) || defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#if defined(CPU_arm) || defined(CPU_AARCH64) || defined(__aarch64__) || \ + defined(_M_ARM64) || defined(_M_ARM64EC) #include "arm/compemu_support_arm.cpp" -#else -/* - * compiler/compemu_support.cpp - Core dynamic translation engine - * - * Copyright (c) 2001-2009 Milan Jurik of ARAnyM dev team (see AUTHORS) - * - * Inspired by Christian Bauer's Basilisk II - * - * This file is part of the ARAnyM project which builds a new and powerful - * TOS/FreeMiNT compatible virtual machine running on almost any hardware. - * - * JIT compiler m68k -> IA-32 and AMD64 / ARM - * - * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer - * Adaptation for Basilisk II and improvements, copyright 2000-2004 Gwenole Beauchesne - * Portions related to CPU detection come from linux/arch/i386/kernel/setup.c - * - * ARAnyM is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * ARAnyM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with ARAnyM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#include "sysdeps.h" - -#ifdef UAE - -#define writemem_special writemem -#define readmem_special readmem - -#else -#if !FIXED_ADDRESSING -#error "Only Fixed Addressing is supported with the JIT Compiler" +#elif defined(CPU_i386) || defined(CPU_x86_64) || defined(__i386__) || \ + defined(__x86_64__) || defined(_M_IX86) || defined(_M_AMD64) +#include "x86/compemu_support_x86.cpp" #endif - -#if defined(X86_ASSEMBLY) && !SAHF_SETO_PROFITABLE -#error "Only [LS]AHF scheme to [gs]et flags is supported with the JIT Compiler" -#endif - -/* NOTE: support for AMD64 assumes translation cache and other code - * buffers are allocated into a 32-bit address space because (i) B2/JIT - * code is not 64-bit clean and (ii) it's faster to resolve branches - * that way. - */ -#if !defined(CPU_i386) && !defined(CPU_x86_64) && !defined(CPU_arm) && !defined(CPU_AARCH64) -#error "Only IA-32, X86-64, ARM and ARM64 targets are supported with the JIT Compiler" -#endif -#endif - -#define USE_MATCH 0 - -/* kludge for Brian, so he can compile under MSVC++ */ -#define USE_NORMAL_CALLING_CONVENTION 0 - -#include "sysconfig.h" -#include "sysdeps.h" - -#ifdef JIT - -#ifdef UAE -#define bug write_log -#include "options.h" -#include "events.h" -#include "uae/memory.h" -#include "custom.h" -#else -#include "cpu_emulation.h" -#include "main.h" -#include "vm_alloc.h" - -#include "m68k.h" -#include "memory-uae.h" -#include "readcpu.h" -#endif -#include "newcpu.h" -#include "comptbl.h" -#ifdef UAE -#include "compemu.h" -#ifdef FSUAE -#include "codegen_udis86.h" -#endif -#else -#include "compiler/compemu.h" -#include "fpu/fpu.h" -#include "fpu/flags.h" -#include "parameters.h" -static void build_comp(void); -#endif -#ifndef UAE -#include "verify.h" -#endif - -#ifdef UAE -#ifdef FSUAE -#include "uae/fs.h" -#endif -#include "uae/log.h" - -/* PIE is now supported on x86-64: the anchor-based JIT allocator - * keeps code within RIP-relative range of globals. FreeBSD still - * requires -fno-pie (ADDR32+MAP_32BIT strategy). */ - -#include "uae/vm.h" -#if defined(CPU_x86_64) && !defined(_WIN32) -#include -#endif -#if defined(CPU_x86_64) && defined(__APPLE__) -#include -#include -#include -#endif -#define VM_PAGE_READ UAE_VM_READ -#define VM_PAGE_WRITE UAE_VM_WRITE -#define VM_PAGE_EXECUTE UAE_VM_EXECUTE -#define VM_MAP_FAILED UAE_VM_ALLOC_FAILED -#define VM_MAP_DEFAULT 0 -#define VM_MAP_32BIT 1 -#define vm_protect(address, size, protect) uae_vm_protect(address, size, protect) -#define vm_release(address, size) uae_vm_free(address, size) - -#if defined(CPU_x86_64) -/* - * JIT cache allocation strategy (PIE-compatible): - * - * x86-64 JIT uses RIP-relative [RIP+disp32] addressing to access globals - * (regs, regflags, etc.) via the _r_X() macro. This requires the JIT code - * cache to be within +/-2GB of .data. - * - * Under non-PIE, .data is at a fixed low address and MAP_32BIT suffices. - * Under PIE+ASLR, .data can be anywhere in the 47-bit VA space. - * - * We use an anchor-based probe: &data_anchor is a reference point in .data, - * and we search outward from it for a free VA range. This mirrors the - * Windows strategy (VirtualQuery walk from data_anchor). - * - * The probe covers +/-1.75GB at 2MB intervals, well within the +/-2GB - * RIP-relative limit. - */ - -/* jit_vm_acquire() uses this as the RIP-relative allocation anchor. - * Set to the JIT cache base after alloc_cache() succeeds. - * All x86-64 platforms need this since RIP-relative addressing - * requires JIT allocations within +/-2GB of both code and globals. */ -static uae_u8* vm_acquire_anchor = NULL; -#endif - -static inline bool jit_vm_alloc_failed(const void *ptr) -{ - return ptr == NULL || ptr == VM_MAP_FAILED; -} - -#if defined(CPU_x86_64) && defined(__linux__) -/* VMA-aware near-address allocator - Linux equivalent of the Windows - * VirtualQuery walk. Parses /proc/self/maps to find the closest gap - * to `base` that can hold `size` bytes within `range`. - * Returns mmap'd pointer on success, NULL on failure. */ -static void *find_nearest_gap(uintptr base, uae_u32 size, uintptr range) -{ - FILE *maps = fopen("/proc/self/maps", "r"); - if (!maps) - return NULL; - - const uintptr granularity = 0x10000; /* 64KB, matches Windows path */ - uintptr lo = (base > range) ? (base - range) : granularity; - uintptr hi = base + range; - - void *best = NULL; - uintptr best_dist = UINTPTR_MAX; - uintptr prev_end = 0; - - char line[512]; - while (fgets(line, sizeof(line), maps)) { - unsigned long vma_start, vma_end; - if (sscanf(line, "%lx-%lx", &vma_start, &vma_end) != 2) - continue; - - /* Check the gap between prev_end and this VMA's start */ - if (vma_start > prev_end && prev_end > 0) { - uintptr gap_start = prev_end; - uintptr gap_end = vma_start; - uintptr gap_size = gap_end - gap_start; - - if (gap_size >= size && gap_start < hi && gap_end > lo) { - /* Find the address in this gap closest to base */ - uintptr alloc_at; - if (base >= gap_start && base + size <= gap_end) { - /* Gap contains base - ideal */ - alloc_at = base & ~(granularity - 1); - } else if (gap_end <= base) { - /* Gap is below base - use highest aligned addr */ - alloc_at = (gap_end - size) & ~(granularity - 1); - } else { - /* Gap is above base - use lowest aligned addr */ - alloc_at = (gap_start + granularity - 1) & ~(granularity - 1); - } - - if (alloc_at >= gap_start && alloc_at + size <= gap_end && - alloc_at >= lo && alloc_at + size <= hi) { - uintptr dist = (alloc_at >= base) - ? (alloc_at - base) : (base - alloc_at); - if (dist < best_dist) { - best = (void *)alloc_at; - best_dist = dist; - } - } - } - } - prev_end = vma_end; - } - fclose(maps); - - if (!best) - return NULL; - - /* Try atomic claim with MAP_FIXED_NOREPLACE first */ -#ifdef MAP_FIXED_NOREPLACE - void *result = mmap(best, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED_NOREPLACE, -1, 0); - if (result != MAP_FAILED) - return result; -#endif - /* Fallback: hint-based (kernel may slide it) */ - void *result2 = mmap(best, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - if (result2 != MAP_FAILED) { - uintptr dist = ((uintptr)result2 >= base) - ? ((uintptr)result2 - base) : (base - (uintptr)result2); - if (dist < range) - return result2; - munmap(result2, size); - } - return NULL; -} -#endif /* CPU_x86_64 && __linux__ */ - -#if defined(CPU_x86_64) && defined(__APPLE__) -#ifndef VM_FLAGS_FIXED -#define VM_FLAGS_FIXED 0 -#endif - -static void *mach_vm_allocate_fixed(uintptr try_addr, uae_u32 size) -{ - mach_vm_address_t address = (mach_vm_address_t)try_addr; - const kern_return_t kr = mach_vm_allocate( - mach_task_self(), &address, size, VM_FLAGS_FIXED); - if (kr != KERN_SUCCESS) - return NULL; - if ((uintptr)address == try_addr) - return (void *)address; - mach_vm_deallocate(mach_task_self(), address, size); - return NULL; -} - -static void *mach_vm_try_gap(uintptr gap_start, uintptr gap_end, uintptr base, - uae_u32 size, uintptr page, void *best, uintptr *best_dist) -{ - if (gap_end <= gap_start || gap_end - gap_start < size) - return best; - - uintptr alloc_at; - if (base >= gap_start && base + size <= gap_end) { - alloc_at = base & ~(page - 1); - if (alloc_at < gap_start) - alloc_at += page; - } else if (gap_end <= base) { - alloc_at = (gap_end - size) & ~(page - 1); - } else { - alloc_at = (gap_start + page - 1) & ~(page - 1); - } - if (alloc_at < gap_start || alloc_at + size > gap_end) - return best; - - const uintptr dist = (alloc_at >= base) ? (alloc_at - base) : (base - alloc_at); - if (dist >= *best_dist) - return best; - - void *candidate = mach_vm_allocate_fixed(alloc_at, size); - if (!candidate) - return best; - if (best) - mach_vm_deallocate(mach_task_self(), (mach_vm_address_t)best, size); - *best_dist = dist; - return candidate; -} - -static void *mach_vm_acquire_near(uintptr base, uae_u32 size, uintptr range) -{ - const uintptr page = (uintptr)uae_vm_page_size(); - const uintptr lo = (base > range) ? (base - range) : page; - const uintptr hi = base + range; - const uintptr rounded_size = (size + page - 1) & ~(page - 1); - - void *best = NULL; - uintptr best_dist = UINTPTR_MAX; - uintptr prev_end = lo; - mach_vm_address_t address = (mach_vm_address_t)lo; - - while ((uintptr)address < hi) { - mach_vm_size_t region_size = 0; - natural_t depth = 0; - vm_region_submap_info_data_64_t info; - mach_msg_type_number_t count = VM_REGION_SUBMAP_INFO_COUNT_64; - const kern_return_t kr = mach_vm_region_recurse( - mach_task_self(), &address, ®ion_size, &depth, - (vm_region_recurse_info_t)&info, &count); - if (kr != KERN_SUCCESS) - break; - - uintptr region_start = (uintptr)address; - uintptr region_end = region_start + (uintptr)region_size; - if (region_start > hi) - region_start = hi; - if (region_start > prev_end) { - best = mach_vm_try_gap(prev_end, region_start, base, - (uae_u32)rounded_size, page, best, &best_dist); - if (best_dist == 0) - return best; - } - if (region_end <= prev_end) - region_end = prev_end + page; - prev_end = region_end; - address = (mach_vm_address_t)region_end; - } - - if (prev_end < hi) { - best = mach_vm_try_gap(prev_end, hi, base, - (uae_u32)rounded_size, page, best, &best_dist); - } - if (best) - return best; - - const uintptr stride = rounded_size > 0x10000 ? 0x10000 : page; - for (uintptr offset = 0; offset < range; offset += stride) { - for (int dir = 0; dir < 2; dir++) { - if (offset == 0 && dir == 1) - continue; - if (dir == 1 && base <= offset) - continue; - uintptr try_addr = dir == 0 ? base + offset : base - offset; - try_addr &= ~(page - 1); - if (try_addr < lo || try_addr + rounded_size > hi) - continue; - void *candidate = mach_vm_allocate_fixed(try_addr, (uae_u32)rounded_size); - if (candidate) - return candidate; - } - } - return best; -} -#endif /* CPU_x86_64 && __APPLE__ */ - -void *jit_vm_acquire(uae_u32 size, int options) -{ -#if defined(CPU_x86_64) - if (!(options & VM_MAP_32BIT)) { -#ifdef _WIN32 - /* RIP-relative addressing (the _r_X macro in codegen_x86.h) - * requires all targets within +/-2GB of the JIT code that - * references them. Anchor at compiled_code (JIT cache base) - * when available; fall back to a .data anchor for the first - * allocation (the JIT cache itself). - * Use VirtualQuery to find the closest free region within - * +/-1.75GB - this avoids the blind 16MB-step probe that - * exhausts in congested ASLR address spaces. */ - uintptr base; - if (vm_acquire_anchor) { - base = (uintptr)vm_acquire_anchor; - } else { - static int anchor; - base = (uintptr)&anchor; - } - base &= ~(uintptr)0xFFFF; - const uintptr range = 0x70000000ULL; /* 1.75GB */ - const uintptr granularity = 0x10000; /* Windows 64KB alloc granularity */ - uintptr lo = (base > range) ? (base - range) : 0; - uintptr hi = base + range; - - /* Walk the address space with VirtualQuery to find the - * closest free region large enough for this allocation. */ - void *best = NULL; - uintptr best_dist = UINTPTR_MAX; - uintptr addr = lo; - while (addr < hi) { - MEMORY_BASIC_INFORMATION mbi; - if (VirtualQuery((void *)addr, &mbi, sizeof(mbi)) == 0) - break; - uintptr region_base = (uintptr)mbi.BaseAddress; - uintptr region_end = region_base + mbi.RegionSize; - if (mbi.State == MEM_FREE && mbi.RegionSize >= size) { - /* Pick the address in this region closest to base */ - uintptr alloc_at; - if (base >= region_base && base < region_end) { - /* Region contains base - ideal */ - alloc_at = base & ~(granularity - 1); - } else if (region_end <= base) { - /* Region is below base - use highest aligned addr */ - alloc_at = (region_end - size) & ~(granularity - 1); - } else { - /* Region is above base - use lowest aligned addr */ - alloc_at = (region_base + granularity - 1) & ~(granularity - 1); - } - if (alloc_at >= region_base && alloc_at + size <= region_end && - alloc_at >= lo && alloc_at + size <= hi) { - uintptr dist = (alloc_at >= base) ? (alloc_at - base) : (base - alloc_at); - if (dist < best_dist) { - best = (void *)alloc_at; - best_dist = dist; - } - } - } - /* Advance to next region */ - if (region_end <= addr) break; /* overflow protection */ - addr = region_end; - } - void *result = NULL; - if (best) { - result = VirtualAlloc(best, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); - } - if (!result) { - /* Last resort: OS choice - range-check the result to avoid - * silent RIP-relative overflow in pool allocations that - * bypass alloc_cache()'s post-hoc distance check. */ - result = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); - if (result) { - intptr_t dist = (intptr_t)result - (intptr_t)base; - if (llabs(dist) >= (intptr_t)range) { - VirtualFree(result, 0, MEM_RELEASE); - result = NULL; - } - } - } - return result; -#else -#if defined(__FreeBSD__) - /* FreeBSD: ASLR defeats anchor-based hints. Delegate to - * uae_vm_alloc with UAE_VM_32BIT (MAP_32BIT), guaranteeing - * allocation below 2GB where ADDR32 absolute addressing works. */ - return uae_vm_alloc(size, UAE_VM_32BIT, UAE_VM_READ_WRITE); -#else - /* Linux/POSIX x86-64: RIP-relative addressing (the _r_X macro) - * requires all JIT allocations within +/-2GB of both the JIT code - * and global variables in the .data segment. Use compiled_code - * as anchor when available, otherwise a .data section anchor. - * Try mmap with hints near the anchor; fall back to unanchored. */ - static int data_anchor; - uintptr base = vm_acquire_anchor - ? (uintptr)vm_acquire_anchor - : (uintptr)&data_anchor; - base &= ~(uintptr)0xFFFF; - const uintptr range = 0x70000000ULL; /* 1.75GB */ - - uintptr lo = (base > range) ? (base - range) : 0x10000; - uintptr hi = base + range; - void *result = NULL; - -#ifdef __linux__ - result = find_nearest_gap(base, size, range); - if (result) - return result; -#endif -#ifdef __APPLE__ - result = mach_vm_acquire_near(base, size, range); - if (result) - return result; -#endif - -#ifdef MAP_FIXED_NOREPLACE - int extra_flags = MAP_FIXED_NOREPLACE; -#else - int extra_flags = 0; -#endif - - uintptr stride = (size + 0xFFFF) & ~(uintptr)0xFFFF; - if (stride < 0x10000) - stride = 0x10000; - - for (uintptr offset = 0; offset < range && !result; offset += stride) { - /* Try above anchor */ - uintptr try_addr = base + offset; - if (try_addr >= lo && try_addr + size <= hi) { - result = mmap((void *)try_addr, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS | extra_flags, -1, 0); - if (result != MAP_FAILED) { - uintptr dist = ((uintptr)result >= base) - ? ((uintptr)result - base) : (base - (uintptr)result); - if (dist < range) - break; - munmap(result, size); - result = NULL; - } else { - result = NULL; - } - } - if (offset == 0) - continue; - /* Try below anchor */ - if (base > offset) { - try_addr = base - offset; - if (try_addr >= lo && try_addr + size <= hi) { - result = mmap((void *)try_addr, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS | extra_flags, -1, 0); - if (result != MAP_FAILED) { - uintptr dist = ((uintptr)result >= base) - ? ((uintptr)result - base) : (base - (uintptr)result); - if (dist < range) - break; - munmap(result, size); - result = NULL; - } else { - result = NULL; - } - } - } - } - if (!result) { - for (int attempt = 0; attempt < 2 && !result; attempt++) { - void *try_alloc = (attempt == 0) - ? uae_vm_alloc(size, UAE_VM_32BIT, UAE_VM_READ_WRITE) - : uae_vm_alloc(size, 0, UAE_VM_READ_WRITE); - if (jit_vm_alloc_failed(try_alloc)) - continue; - intptr_t dist = (intptr_t)try_alloc - (intptr_t)base; - if (llabs(dist) >= (intptr_t)range) { - uae_vm_free(try_alloc, size); - continue; - } - result = try_alloc; - } - if (!result) { - write_log("JIT: WARNING: could not allocate within 2GB of globals " - "(anchor=%p)\n", (void *)base); - } - } - return result; -#endif /* !__FreeBSD__ */ -#endif /* !_WIN32 */ - } -#endif - return uae_vm_alloc(size, UAE_VM_32BIT, UAE_VM_READ_WRITE); -} - -#define UNUSED(x) -#include "uae.h" -#include "uae/log.h" -#define jit_log(format, ...) \ - write_log("JIT: " format "\n", ##__VA_ARGS__); -#define jit_log2(format, ...) - -#define MEMBaseDiff ((uintptr)NATMEM_OFFSET) - -#ifdef NATMEM_OFFSET -#define FIXED_ADDRESSING 1 -#endif - -// %%% BRIAN KING WAS HERE %%% -extern bool canbang; -extern int jit_n_addr_unsafe; -extern int jit_n_addr_bank_unsafe; - -#include "compemu_prefs.cpp" - -#define uint32 uae_u32 -#define uint8 uae_u8 - -static inline int distrust_check(int value) -{ -#ifdef JIT_ALWAYS_DISTRUST - return 1; -#else - int distrust = value; -#ifdef FSUAE - switch (value) { - case 0: distrust = 0; break; - case 1: distrust = 1; break; - case 2: distrust = ((start_pc & 0xF80000) == 0xF80000); break; - case 3: distrust = !have_done_picasso; break; - default: abort(); - } -#endif - return distrust; -#endif -} - -static inline int distrust_byte(void) -{ - return distrust_check(currprefs.comptrustbyte); -} - -static inline int distrust_word(void) -{ - return distrust_check(currprefs.comptrustword); -} - -static inline int distrust_long(void) -{ - return distrust_check(currprefs.comptrustlong); -} - -static inline int distrust_addr(void) -{ - return distrust_check(currprefs.comptrustnaddr); -} - -static inline bool jit_use_memory_helpers(void) -{ - return jit_n_addr_bank_unsafe || (jit_n_addr_unsafe && !canbang); -} - -static inline bool jit_use_compile_fallbacks(void) -{ - return jit_n_addr_bank_unsafe; -} - -#else -#define DEBUG 0 -#include "debug.h" - -#define NATMEM_OFFSET MEMBaseDiff -#define canbang 1 -#define op_illg op_illg_1 - -#ifdef WINUAE_ARANYM -void jit_abort(const char *format, ...) -{ - va_list args; - va_start(args, format); - ndebug::pdbvprintf(format, args); - va_end(args); - abort(); -} -#endif - -#if DEBUG -#define PROFILE_COMPILE_TIME 1 -#define PROFILE_UNTRANSLATED_INSNS 1 -#endif -#endif - -# include -# include -# include -# include - -#if defined(CPU_x86_64) && 0 -#define RECORD_REGISTER_USAGE 1 -#endif - -#ifdef JIT_DEBUG -#undef abort -#define abort() do { \ - fprintf(stderr, "Abort in file %s at line %d\n", __FILE__, __LINE__); \ - compiler_dumpstate(); \ - exit(EXIT_FAILURE); \ -} while (0) -#endif - -#ifdef RECORD_REGISTER_USAGE -static uint64 reg_count[16]; -static uint64 reg_count_local[16]; - -static int reg_count_compare(const void *ap, const void *bp) -{ - const int a = *((int *)ap); - const int b = *((int *)bp); - return reg_count[b] - reg_count[a]; -} -#endif - -#ifdef PROFILE_COMPILE_TIME -#include -static uae_u32 compile_count = 0; -static clock_t compile_time = 0; -static clock_t emul_start_time = 0; -static clock_t emul_end_time = 0; -#endif - -#ifdef PROFILE_UNTRANSLATED_INSNS -static const int untranslated_top_ten = 50; -static uae_u32 raw_cputbl_count[65536] = { 0, }; -static uae_u16 opcode_nums[65536]; - - -static int __cdecl untranslated_compfn(const void *e1, const void *e2) -{ - int v1 = *(const uae_u16*)e1; - int v2 = *(const uae_u16*)e2; - return (int)raw_cputbl_count[v2] - (int)raw_cputbl_count[v1]; -} -#endif - -static compop_func *compfunctbl[65536]; -static compop_func *nfcompfunctbl[65536]; -#ifdef NOFLAGS_SUPPORT_GENCOMP -static cpuop_func *nfcpufunctbl[65536]; -#endif -uae_u8* comp_pc_p; - -#ifdef UAE -/* defined in uae.h */ -#else -// External variables -#endif - -// gb-- Extra data for Basilisk II/JIT -#ifdef JIT_DEBUG -#define JITDebug bx_options.jit.jitdebug // Enable runtime disassemblers through mon? -#else -#define JITDebug false // Don't use JIT debug mode at all -#endif -#if USE_INLINING -#ifdef UAE -#define follow_const_jumps (currprefs.comp_constjump != 0) -#else -static bool follow_const_jumps = true; // Flag: translation through constant jumps -#endif -#else -const bool follow_const_jumps = false; -#endif - -static uae_u32 cache_size = 0; // Size of total cache allocated for compiled blocks -static uae_u32 current_cache_size = 0; // Cache grows upwards: how much has been consumed already -// Flag: compile FPU instructions ? -#ifdef UAE -#ifdef USE_JIT_FPU -#define avoid_fpu (!currprefs.compfpu) -#define lazy_flush (!currprefs.comp_hardflush) -#else -#define avoid_fpu (true) -#define lazy_flush (true) -#endif -#else -#ifdef USE_JIT_FPU -#define avoid_fpu (!bx_options.jit.jitfpu) -#else -#define avoid_fpu (true) -#endif -#endif -static bool have_cmov = false; // target has CMOV instructions ? -static bool have_rat_stall = true; // target has partial register stalls ? -const bool tune_alignment = true; // Tune code alignments for running CPU ? -const bool tune_nop_fillers = true; // Tune no-op fillers for architecture -static bool setzflg_uses_bsf = false; // setzflg virtual instruction can use native BSF instruction correctly? -static int align_loops = 32; // Align the start of loops -static int align_jumps = 32; // Align the start of jumps -static int optcount[10] = { -#ifdef UAE - 4, // How often a block has to be executed before it is translated -#else - 10, // How often a block has to be executed before it is translated -#endif - 0, // How often to use naive translation - 0, 0, 0, 0, - -1, -1, -1, -1 -}; - -#ifdef UAE -op_properties prop[65536]; -#else -static op_properties prop[65536]; - -static inline int end_block(uae_u32 opcode) -{ - return (prop[opcode].cflow & fl_end_block); -} -#endif - -static inline bool is_const_jump(uae_u32 opcode) -{ - return (prop[opcode].cflow == fl_const_jump); -} - -static inline bool is_dbcc_opcode(uae_u32 opcode) -{ - return (opcode & 0xf0f8) == 0x50c8; -} - -static inline bool is_cmp_w_an_postinc_dn_opcode(uae_u32 opcode) -{ - return (opcode & 0xf1f8) == 0xb058; -} - -#if 0 -static inline bool may_trap(uae_u32 opcode) -{ - return (prop[opcode].cflow & fl_trap); -} -#endif - -static inline unsigned int cft_map (unsigned int f) -{ -#ifdef UAE -#if !defined(HAVE_GET_WORD_UNSWAPPED) - return f; -#else - return do_byteswap_16(f); -#endif -#else -#if !defined(HAVE_GET_WORD_UNSWAPPED) || defined(FULLMMU) - return f; -#else - return ((f >> 8) & 255) | ((f & 255) << 8); -#endif -#endif -} - -uae_u8* start_pc_p; -uae_u32 start_pc; -uintptr current_block_pc_p; -static uintptr current_block_start_target; -uae_u32 needed_flags; -static uintptr next_pc_p; -static uintptr taken_pc_p; -static int branch_cc; -static int redo_current_block; - -#ifdef UAE -int segvcount=0; -#endif -static uae_u8* current_compile_p=NULL; -static uae_u8* max_compile_start; -static uae_u8* compiled_code=NULL; -static uae_s32 reg_alloc_run; -const int POPALLSPACE_SIZE = 2048; /* That should be enough space */ -static uae_u8 *popallspace=NULL; - -void* pushall_call_handler=NULL; -static void* popall_do_nothing=NULL; -static void* popall_exec_nostats=NULL; -static void* popall_execute_normal=NULL; -static void* popall_cache_miss=NULL; -static void* popall_recompile_block=NULL; -static void* popall_check_checksum=NULL; - -/* The 68k only ever executes from even addresses. So right now, we - * waste half the entries in this array - * UPDATE: We now use those entries to store the start of the linked - * lists that we maintain for each hash result. - */ -static cacheline cache_tags[TAGSIZE]; -static int cache_enabled=0; -static blockinfo* hold_bi[MAX_HOLD_BI]; -static blockinfo* active; -static blockinfo* dormant; - -#ifdef NOFLAGS_SUPPORT_GENCOMP -/* 68040 */ -extern const struct cputbl op_smalltbl_0[]; -#endif -extern const struct comptbl op_smalltbl_0_comp_nf[]; -extern const struct comptbl op_smalltbl_0_comp_ff[]; - -static void flush_icache_hard(int); -static void flush_icache_lazy(int); -static void flush_icache_none(int); -//void (*flush_icache)(int) = flush_icache_none; - -#ifdef UAE -void disable_jit_on_runtime_alloc_failure(const char *what) -{ - if (!cache_enabled && currprefs.cachesize == 0 && changed_prefs.cachesize == 0) - return; - - write_log("JIT: WARNING: %s\n", what); - write_log("JIT: WARNING: Disabling JIT and falling back to the interpreter.\n"); - - cache_enabled = 0; - currprefs.cachesize = 0; - changed_prefs.cachesize = 0; -} -#endif - -static bigstate live; -static smallstate empty_ss; -static smallstate default_ss; -static int optlev; - -static int writereg(int r, int size); -static void unlock2(int r); -static void setlock(int r); -static int readreg_specific(int r, int size, int spec); -static int writereg_specific(int r, int size, int spec); - -static void inline write_jmp_target(uae_u32 *jmpaddr, cpuop_func* a); - -uae_u32 m68k_pc_offset; - -/* Some arithmetic operations can be optimized away if the operands - * are known to be constant. But that's only a good idea when the - * side effects they would have on the flags are not important. This - * variable indicates whether we need the side effects or not - */ -static uae_u32 needflags=0; - -/* Flag handling is complicated. - * - * x86 instructions create flags, which quite often are exactly what we - * want. So at times, the "68k" flags are actually in the x86 flags. - * - * Then again, sometimes we do x86 instructions that clobber the x86 - * flags, but don't represent a corresponding m68k instruction. In that - * case, we have to save them. - * - * We used to save them to the stack, but now store them back directly - * into the regflags.cznv of the traditional emulation. Thus some odd - * names. - * - * So flags can be in either of two places (used to be three; boy were - * things complicated back then!); And either place can contain either - * valid flags or invalid trash (and on the stack, there was also the - * option of "nothing at all", now gone). A couple of variables keep - * track of the respective states. - * - * To make things worse, we might or might not be interested in the flags. - * by default, we are, but a call to dont_care_flags can change that - * until the next call to live_flags. If we are not, pretty much whatever - * is in the register and/or the native flags is seen as valid. - */ - -static inline blockinfo* get_blockinfo(uae_u32 cl) -{ - return cache_tags[cl+1].bi; -} - -static inline blockinfo* get_blockinfo_addr(void* addr) -{ - blockinfo* bi=get_blockinfo(cacheline(addr)); - - while (bi) { - if (bi->pc_p==addr) - return bi; - bi=bi->next_same_cl; - } - return NULL; -} - -#ifdef WINUAE_ARANYM -/******************************************************************* - * Disassembler support * - *******************************************************************/ - -#define TARGET_M68K 0 -#define TARGET_POWERPC 1 -#define TARGET_X86 2 -#define TARGET_X86_64 3 -#define TARGET_ARM 4 -#if defined(CPU_i386) -#define TARGET_NATIVE TARGET_X86 -#endif -#if defined(CPU_powerpc) -#define TARGET_NATIVE TARGET_POWERPC -#endif -#if defined(CPU_x86_64) -#define TARGET_NATIVE TARGET_X86_64 -#endif -#if defined(CPU_arm) -#define TARGET_NATIVE TARGET_ARM -#endif -#include "disasm-glue.h" - -bool disasm_this_inst; - -#if defined(JIT_DEBUG) || (defined(HAVE_DISASM_NATIVE) && defined(HAVE_DISASM_M68K)) -static void disasm_block(int disasm_target, const uint8 *start, size_t length) -{ - UNUSED(start); - UNUSED(length); - switch (disasm_target) - { - case TARGET_M68K: -#if defined(HAVE_DISASM_M68K) - { - char buf[256]; - - disasm_info.memory_vma = ((memptr)((uintptr_t)(start) - MEMBaseDiff)); - while (length > 0) - { - int isize = m68k_disasm_to_buf(&disasm_info, buf, 1); - bug("%s", buf); - if (isize < 0) - break; - if ((uintptr)isize > length) - break; - length -= isize; - } - } -#endif - break; - case TARGET_X86: - case TARGET_X86_64: -#if defined(HAVE_DISASM_X86) - { - const uint8 *end = start + length; - char buf[256]; - - while (start < end) - { - start = x86_disasm(start, buf, 1); - bug("%s", buf); - } - } -#endif - break; - case TARGET_ARM: -#if defined(HAVE_DISASM_ARM) - { - const uint8 *end = start + length; - char buf[256]; - - while (start < end) - { - start = arm_disasm(start, buf, 1); - bug("%s", buf); - } - } -#endif - break; - } -} - -static inline void disasm_native_block(const uint8 *start, size_t length) -{ - disasm_block(TARGET_NATIVE, start, length); -} - -static inline void disasm_m68k_block(const uint8 *start, size_t length) -{ - disasm_block(TARGET_M68K, start, length); -} -#endif -#endif /* WINUAE_ARANYM */ - - -/******************************************************************* - * All sorts of list related functions for all of the lists * - *******************************************************************/ - -static inline void remove_from_cl_list(blockinfo* bi) -{ - uae_u32 cl=cacheline(bi->pc_p); - - if (bi->prev_same_cl_p) - *(bi->prev_same_cl_p)=bi->next_same_cl; - if (bi->next_same_cl) - bi->next_same_cl->prev_same_cl_p=bi->prev_same_cl_p; - if (cache_tags[cl+1].bi) - cache_tags[cl].handler=cache_tags[cl+1].bi->handler_to_use; - else - cache_tags[cl].handler=(cpuop_func*)popall_execute_normal; -} - -static inline void remove_from_list(blockinfo* bi) -{ - if (bi->prev_p) - *(bi->prev_p)=bi->next; - if (bi->next) - bi->next->prev_p=bi->prev_p; -} - -#if 0 -static inline void remove_from_lists(blockinfo* bi) -{ - remove_from_list(bi); - remove_from_cl_list(bi); -} -#endif - -static inline void add_to_cl_list(blockinfo* bi) -{ - uae_u32 cl=cacheline(bi->pc_p); - - if (cache_tags[cl+1].bi) - cache_tags[cl+1].bi->prev_same_cl_p=&(bi->next_same_cl); - bi->next_same_cl=cache_tags[cl+1].bi; - - cache_tags[cl+1].bi=bi; - bi->prev_same_cl_p=&(cache_tags[cl+1].bi); - - cache_tags[cl].handler=bi->handler_to_use; -} - -static inline void raise_in_cl_list(blockinfo* bi) -{ - remove_from_cl_list(bi); - add_to_cl_list(bi); -} - -static inline void add_to_active(blockinfo* bi) -{ - if (active) - active->prev_p=&(bi->next); - bi->next=active; - - active=bi; - bi->prev_p=&active; -} - -static inline void add_to_dormant(blockinfo* bi) -{ - if (dormant) - dormant->prev_p=&(bi->next); - bi->next=dormant; - - dormant=bi; - bi->prev_p=&dormant; -} - -static inline void remove_dep(dependency* d) -{ - if (d->prev_p) - *(d->prev_p)=d->next; - if (d->next) - d->next->prev_p=d->prev_p; - d->prev_p=NULL; - d->next=NULL; -} - -/* This block's code is about to be thrown away, so it no longer - depends on anything else */ -static inline void remove_deps(blockinfo* bi) -{ - remove_dep(&(bi->dep[0])); - remove_dep(&(bi->dep[1])); -} - -static inline void adjust_jmpdep(dependency* d, cpuop_func* a) -{ - write_jmp_target(d->jmp_off, a); -} - -/******************************************************************** - * Soft flush handling support functions * - ********************************************************************/ - -static inline void set_dhtu(blockinfo* bi, cpuop_func *dh) -{ - jit_log2("bi is %p",bi); - if (dh!=bi->direct_handler_to_use) { - dependency* x=bi->deplist; - jit_log2("bi->deplist=%p",bi->deplist); - while (x) { - jit_log2("x is %p",x); - jit_log2("x->next is %p",x->next); - jit_log2("x->prev_p is %p",x->prev_p); - - if (x->jmp_off) { - adjust_jmpdep(x,dh); - } - x=x->next; - } - bi->direct_handler_to_use=dh; - } -} - -static inline void invalidate_block(blockinfo* bi) -{ - int i; - - bi->optlevel=0; - bi->count=optcount[0]-1; - bi->handler=NULL; - bi->handler_to_use=(cpuop_func*)popall_execute_normal; - bi->direct_handler=NULL; - set_dhtu(bi,bi->direct_pen); - bi->needed_flags=0xff; - bi->status=BI_INVALID; - for (i=0;i<2;i++) { - bi->dep[i].jmp_off=NULL; - bi->dep[i].target=NULL; - } - remove_deps(bi); -} - -static inline void create_jmpdep(blockinfo* bi, int i, uae_u32* jmpaddr, uintptr target) -{ - blockinfo* tbi=get_blockinfo_addr((void*)(uintptr)target); - - Dif(!tbi) { - jit_abort("Could not create jmpdep!"); - } - bi->dep[i].jmp_off=jmpaddr; - bi->dep[i].source=bi; - bi->dep[i].target=tbi; - bi->dep[i].next=tbi->deplist; - if (bi->dep[i].next) - bi->dep[i].next->prev_p=&(bi->dep[i].next); - bi->dep[i].prev_p=&(tbi->deplist); - tbi->deplist=&(bi->dep[i]); -} - -static inline void block_need_recompile(blockinfo * bi) -{ - uae_u32 cl = cacheline(bi->pc_p); - - set_dhtu(bi, bi->direct_pen); - bi->direct_handler = bi->direct_pen; - - bi->handler_to_use = (cpuop_func *)popall_execute_normal; - bi->handler = (cpuop_func *)popall_execute_normal; - if (bi == cache_tags[cl + 1].bi) - cache_tags[cl].handler = (cpuop_func *)popall_execute_normal; - bi->status = BI_NEED_RECOMP; -} - -#if USE_MATCH -static inline void mark_callers_recompile(blockinfo * bi) -{ - dependency *x = bi->deplist; - - while (x) { - dependency *next = x->next; /* This disappears when we mark for - * recompilation and thus remove the - * blocks from the lists */ - if (x->jmp_off) { - blockinfo *cbi = x->source; - - Dif(cbi->status == BI_INVALID) { - jit_log("invalid block in dependency list"); // FIXME? - // abort(); - } - if (cbi->status == BI_ACTIVE || cbi->status == BI_NEED_CHECK) { - block_need_recompile(cbi); - mark_callers_recompile(cbi); - } - else if (cbi->status == BI_COMPILING) { - redo_current_block = 1; - } - else if (cbi->status == BI_NEED_RECOMP) { - /* nothing */ - } - else { - jit_log2("Status %d in mark_callers",cbi->status); // FIXME? - } - } - x = next; - } -} -#endif - -static inline blockinfo* get_blockinfo_addr_new(void* addr, int /* setstate */) -{ - blockinfo* bi=get_blockinfo_addr(addr); - int i; - - if (!bi) { - for (i=0;ipc_p=(uae_u8*)addr; - invalidate_block(bi); - add_to_active(bi); - add_to_cl_list(bi); - - } - } - } - if (!bi) { -#ifdef UAE - disable_jit_on_runtime_alloc_failure("Looking for blockinfo, can't find free one"); - return NULL; -#else - jit_abort("Looking for blockinfo, can't find free one"); -#endif - } - return bi; -} - -static void prepare_block(blockinfo* bi); - -/* Management of blockinfos. - - A blockinfo struct is allocated whenever a new block has to be - compiled. If the list of free blockinfos is empty, we allocate a new - pool of blockinfos and link the newly created blockinfos altogether - into the list of free blockinfos. Otherwise, we simply pop a structure - of the free list. - - Blockinfo are lazily deallocated, i.e. chained altogether in the - list of free blockinfos whenvever a translation cache flush (hard or - soft) request occurs. -*/ - -template< class T > -class LazyBlockAllocator -{ - enum { - kPoolSize = 1 + (16384 - sizeof(T) - sizeof(void *)) / sizeof(T) - }; - struct Pool { - T chunk[kPoolSize]; - Pool * next; - }; - Pool * mPools; - T * mChunks; -public: - LazyBlockAllocator() : mPools(0), mChunks(0) { } -#ifdef UAE -#else - ~LazyBlockAllocator(); -#endif - T * acquire(); - void release(T * const); -}; - -#ifdef UAE -/* uae_vm_release may do logging, which isn't safe to do when the application - * is shutting down. Better to release memory manually with a function call - * to a release_all method on shutdown, or even simpler, just let the OS - * handle it (we're shutting down anyway). */ -#else -template< class T > -LazyBlockAllocator::~LazyBlockAllocator() -{ - Pool * currentPool = mPools; - while (currentPool) { - Pool * deadPool = currentPool; - currentPool = currentPool->next; - vm_release(deadPool, sizeof(Pool)); - } -} -#endif - -template< class T > -T * LazyBlockAllocator::acquire() -{ - if (!mChunks) { - // There is no chunk left, allocate a new pool and link the - // chunks into the free list -#if defined(CPU_x86_64) && defined(__FreeBSD__) - Pool * newPool = (Pool *)jit_vm_acquire(sizeof(Pool), VM_MAP_DEFAULT | VM_MAP_32BIT); -#elif defined(CPU_x86_64) - Pool * newPool = (Pool *)jit_vm_acquire(sizeof(Pool), VM_MAP_DEFAULT); -#else - Pool * newPool = (Pool *)jit_vm_acquire(sizeof(Pool), VM_MAP_DEFAULT | VM_MAP_32BIT); -#endif - if (jit_vm_alloc_failed(newPool)) { -#ifdef UAE - disable_jit_on_runtime_alloc_failure("Could not allocate block pool!"); - return NULL; -#else - jit_abort("Could not allocate block pool!"); -#endif - } - for (T * chunk = &newPool->chunk[0]; chunk < &newPool->chunk[kPoolSize]; chunk++) { - chunk->next = mChunks; - mChunks = chunk; - } - newPool->next = mPools; - mPools = newPool; - } - T * chunk = mChunks; - mChunks = chunk->next; - return chunk; -} - -template< class T > -void LazyBlockAllocator::release(T * const chunk) -{ - chunk->next = mChunks; - mChunks = chunk; -} - -template< class T > -class HardBlockAllocator -{ -public: - T * acquire() { - T * data = (T *)current_compile_p; - current_compile_p += sizeof(T); - return data; - } - - void release(T * const ) { - // Deallocated on invalidation - } -}; - -#if USE_SEPARATE_BIA -static LazyBlockAllocator BlockInfoAllocator; -static LazyBlockAllocator ChecksumInfoAllocator; -#else -static HardBlockAllocator BlockInfoAllocator; -static HardBlockAllocator ChecksumInfoAllocator; -#endif - -static inline checksum_info *alloc_checksum_info(void) -{ - checksum_info *csi = ChecksumInfoAllocator.acquire(); - if (!csi) - return NULL; - csi->next = NULL; - return csi; -} - -static inline void free_checksum_info(checksum_info *csi) -{ - if (!csi) - return; - csi->next = NULL; - ChecksumInfoAllocator.release(csi); -} - -static inline void free_checksum_info_chain(checksum_info *csi) -{ - while (csi != NULL) { - checksum_info *csi2 = csi->next; - free_checksum_info(csi); - csi = csi2; - } -} - -static inline blockinfo *alloc_blockinfo(void) -{ - blockinfo *bi = BlockInfoAllocator.acquire(); - if (!bi) - return NULL; -#if USE_CHECKSUM_INFO - bi->csi = NULL; -#endif - return bi; -} - -static inline void free_blockinfo(blockinfo *bi) -{ - if (!bi) - return; -#if USE_CHECKSUM_INFO - free_checksum_info_chain(bi->csi); - bi->csi = NULL; -#endif - BlockInfoAllocator.release(bi); -} - -static inline bool alloc_blockinfos(void) -{ - int i; - blockinfo* bi; - - for (i=0;i data_endpos || get_target_noopt() + codesize - data_writepos > DATA_BUFFER_MAXOFFSET) - { - // Start new buffer -#if DEBUG - if(data_writepos < data_endpos) - data_wasted += data_endpos - data_writepos; -#endif - compemu_raw_branch(DATA_BUFFER_SIZE); - data_writepos = get_target_noopt(); - data_endpos = data_writepos + DATA_BUFFER_SIZE; - set_target(get_target_noopt() + DATA_BUFFER_SIZE); - } -} - -static inline long data_word_offs(uae_u16 x) -{ - data_check_end(4, 4); -#ifdef WORDS_BIGENDIAN - *((uae_u16*)data_writepos)=x; - data_writepos += 2; - *((uae_u16*)data_writepos)=0; - data_writepos += 2; -#else - *((uae_u32*)data_writepos)=x; - data_writepos += 4; -#endif - return (long)data_writepos - (long)get_target_noopt() - 12; -} - -static inline long data_long(uae_u32 x, long codesize) -{ - data_check_end(4, codesize); - *((uae_u32*)data_writepos)=x; - data_writepos += 4; - return (long)data_writepos - 4; -} - -static inline long data_long_offs(uae_u32 x) -{ - data_check_end(4, 4); - *((uae_u32*)data_writepos)=x; - data_writepos += 4; - return (long)data_writepos - (long)get_target_noopt() - 12; -} - -static inline long get_data_offset(long t) -{ - return t - (long)get_target_noopt() - 8; -} - -static inline void reset_data_buffer(void) -{ - data_writepos = 0; - data_endpos = 0; -} - -#endif -/******************************************************************** - * Getting the information about the target CPU * - ********************************************************************/ - -#if defined(CPU_arm) -#include "codegen_arm.cpp" -#endif -#if defined(CPU_i386) || defined(CPU_x86_64) -#include "codegen_x86.cpp" -#endif - - -/******************************************************************** - * Flags status handling. EMIT TIME! * - ********************************************************************/ - -static void bt_l_ri_noclobber(RR4 r, IMM i); - -static void make_flags_live_internal(void) -{ - if (live.flags_in_flags==VALID) - return; - Dif (live.flags_on_stack==TRASH) { - jit_abort("Want flags, got something on stack, but it is TRASH"); - } - if (live.flags_on_stack==VALID) { - int tmp; - tmp=readreg_specific(FLAGTMP,4,FLAG_NREG2); - raw_reg_to_flags(tmp); - unlock2(tmp); - - live.flags_in_flags=VALID; - return; - } - jit_abort("Huh? live.flags_in_flags=%d, live.flags_on_stack=%d, but need to make live", - live.flags_in_flags,live.flags_on_stack); -} - -static void flags_to_stack(void) -{ - if (live.flags_on_stack==VALID) - return; - if (!live.flags_are_important) { - live.flags_on_stack=VALID; - return; - } - Dif (live.flags_in_flags!=VALID) - jit_abort("flags_to_stack != VALID"); - else { - int tmp; - tmp=writereg_specific(FLAGTMP,4,FLAG_NREG1); - raw_flags_to_reg(tmp); - unlock2(tmp); - } - live.flags_on_stack=VALID; -} - -static inline void clobber_flags(void) -{ - if (live.flags_in_flags==VALID && live.flags_on_stack!=VALID) - flags_to_stack(); - live.flags_in_flags=TRASH; -} - -/* Prepare for leaving the compiled stuff */ -static inline void flush_flags(void) -{ - flags_to_stack(); - return; -} - -int touchcnt; - -/******************************************************************** - * Partial register flushing for optimized calls * - ********************************************************************/ - -struct regusage { - uae_u16 rmask; - uae_u16 wmask; -}; - -#if 0 -static inline void ru_set(uae_u16 *mask, int reg) -{ -#if USE_OPTIMIZED_CALLS - *mask |= 1 << reg; -#else - UNUSED(mask); - UNUSED(reg); -#endif -} - -static inline bool ru_get(const uae_u16 *mask, int reg) -{ -#if USE_OPTIMIZED_CALLS - return (*mask & (1 << reg)); -#else - UNUSED(mask); - UNUSED(reg); - /* Default: instruction reads & write to register */ - return true; -#endif -} - -static inline void ru_set_read(regusage *ru, int reg) -{ - ru_set(&ru->rmask, reg); -} - -static inline void ru_set_write(regusage *ru, int reg) -{ - ru_set(&ru->wmask, reg); -} - -static inline bool ru_read_p(const regusage *ru, int reg) -{ - return ru_get(&ru->rmask, reg); -} - -static inline bool ru_write_p(const regusage *ru, int reg) -{ - return ru_get(&ru->wmask, reg); -} - -static void ru_fill_ea(regusage *ru, int reg, amodes mode, - wordsizes size, int write_mode) -{ - switch (mode) { - case Areg: - reg += 8; - /* fall through */ - case Dreg: - ru_set(write_mode ? &ru->wmask : &ru->rmask, reg); - break; - case Ad16: - /* skip displacement */ - m68k_pc_offset += 2; - case Aind: - case Aipi: - case Apdi: - ru_set_read(ru, reg+8); - break; - case Ad8r: - ru_set_read(ru, reg+8); - /* fall through */ - case PC8r: { - uae_u16 dp = comp_get_iword((m68k_pc_offset+=2)-2); - reg = (dp >> 12) & 15; - ru_set_read(ru, reg); - if (dp & 0x100) - m68k_pc_offset += (((dp & 0x30) >> 3) & 7) + ((dp & 3) * 2); - break; - } - case PC16: - case absw: - case imm0: - case imm1: - m68k_pc_offset += 2; - break; - case absl: - case imm2: - m68k_pc_offset += 4; - break; - case immi: - m68k_pc_offset += (size == sz_long) ? 4 : 2; - break; - } -} - -/* TODO: split into a static initialization part and a dynamic one - (instructions depending on extension words) */ - -static void ru_fill(regusage *ru, uae_u32 opcode) -{ - m68k_pc_offset += 2; - - /* Default: no register is used or written to */ - ru->rmask = 0; - ru->wmask = 0; - - uae_u32 real_opcode = cft_map(opcode); - struct instr *dp = &table68k[real_opcode]; - - bool rw_dest = true; - bool handled = false; - - /* Handle some instructions specifically */ - uae_u16 ext; - switch (dp->mnemo) { - case i_BFCHG: - case i_BFCLR: - case i_BFEXTS: - case i_BFEXTU: - case i_BFFFO: - case i_BFINS: - case i_BFSET: - case i_BFTST: - ext = comp_get_iword((m68k_pc_offset+=2)-2); - if (ext & 0x800) ru_set_read(ru, (ext >> 6) & 7); - if (ext & 0x020) ru_set_read(ru, ext & 7); - ru_fill_ea(ru, dp->dreg, (amodes)dp->dmode, (wordsizes)dp->size, 1); - if (dp->dmode == Dreg) - ru_set_read(ru, dp->dreg); - switch (dp->mnemo) { - case i_BFEXTS: - case i_BFEXTU: - case i_BFFFO: - ru_set_write(ru, (ext >> 12) & 7); - break; - case i_BFINS: - ru_set_read(ru, (ext >> 12) & 7); - /* fall through */ - case i_BFCHG: - case i_BFCLR: - case i_BSET: - if (dp->dmode == Dreg) - ru_set_write(ru, dp->dreg); - break; - } - handled = true; - rw_dest = false; - break; - - case i_BTST: - rw_dest = false; - break; - - case i_CAS: - { - ext = comp_get_iword((m68k_pc_offset+=2)-2); - int Du = ext & 7; - ru_set_read(ru, Du); - int Dc = (ext >> 6) & 7; - ru_set_read(ru, Dc); - ru_set_write(ru, Dc); - break; - } - case i_CAS2: - { - int Dc1, Dc2, Du1, Du2, Rn1, Rn2; - ext = comp_get_iword((m68k_pc_offset+=2)-2); - Rn1 = (ext >> 12) & 15; - Du1 = (ext >> 6) & 7; - Dc1 = ext & 7; - ru_set_read(ru, Rn1); - ru_set_read(ru, Du1); - ru_set_read(ru, Dc1); - ru_set_write(ru, Dc1); - ext = comp_get_iword((m68k_pc_offset+=2)-2); - Rn2 = (ext >> 12) & 15; - Du2 = (ext >> 6) & 7; - Dc2 = ext & 7; - ru_set_read(ru, Rn2); - ru_set_read(ru, Du2); - ru_set_write(ru, Dc2); - break; - } - case i_DIVL: case i_MULL: - m68k_pc_offset += 2; - break; - case i_LEA: - case i_MOVE: case i_MOVEA: case i_MOVE16: - rw_dest = false; - break; - case i_PACK: case i_UNPK: - rw_dest = false; - m68k_pc_offset += 2; - break; - case i_TRAPcc: - m68k_pc_offset += (dp->size == sz_long) ? 4 : 2; - break; - case i_RTR: - /* do nothing, just for coverage debugging */ - break; - /* TODO: handle EXG instruction */ - } - - /* Handle A-Traps better */ - if ((real_opcode & 0xf000) == 0xa000) { - handled = true; - } - - /* Handle EmulOps better */ - if ((real_opcode & 0xff00) == 0x7100) { - handled = true; - ru->rmask = 0xffff; - ru->wmask = 0; - } - - if (dp->suse && !handled) - ru_fill_ea(ru, dp->sreg, (amodes)dp->smode, (wordsizes)dp->size, 0); - - if (dp->duse && !handled) - ru_fill_ea(ru, dp->dreg, (amodes)dp->dmode, (wordsizes)dp->size, 1); - - if (rw_dest) - ru->rmask |= ru->wmask; - - handled = handled || dp->suse || dp->duse; - - /* Mark all registers as used/written if the instruction may trap */ - if (may_trap(opcode)) { - handled = true; - ru->rmask = 0xffff; - ru->wmask = 0xffff; - } - - if (!handled) { - jit_abort("ru_fill: %04x = { %04x, %04x }", - real_opcode, ru->rmask, ru->wmask); - } -} -#endif - -/******************************************************************** - * register allocation per block logging * - ********************************************************************/ - -static uae_s8 vstate[VREGS]; -static uae_s8 vwritten[VREGS]; -static uae_s8 nstate[N_REGS]; - -#define L_UNKNOWN -127 -#define L_UNAVAIL -1 -#define L_NEEDED -2 -#define L_UNNEEDED -3 - -#if USE_MATCH -static inline void big_to_small_state(bigstate * /* b */, smallstate * s) -{ - int i; - - for (i = 0; i < VREGS; i++) - s->virt[i] = vstate[i]; - for (i = 0; i < N_REGS; i++) - s->nat[i] = nstate[i]; -} - -static inline int callers_need_recompile(bigstate * /* b */, smallstate * s) -{ - int i; - int reverse = 0; - - for (i = 0; i < VREGS; i++) { - if (vstate[i] != L_UNNEEDED && s->virt[i] == L_UNNEEDED) - return 1; - if (vstate[i] == L_UNNEEDED && s->virt[i] != L_UNNEEDED) - reverse++; - } - for (i = 0; i < N_REGS; i++) { - if (nstate[i] >= 0 && nstate[i] != s->nat[i]) - return 1; - if (nstate[i] < 0 && s->nat[i] >= 0) - reverse++; - } - if (reverse >= 2 && USE_MATCH) - return 1; /* In this case, it might be worth recompiling the - * callers */ - return 0; -} -#endif - -static inline void log_startblock(void) -{ - int i; - - for (i = 0; i < VREGS; i++) { - vstate[i] = L_UNKNOWN; - vwritten[i] = 0; - } - for (i = 0; i < N_REGS; i++) - nstate[i] = L_UNKNOWN; -} - -/* Using an n-reg for a temp variable */ -static inline void log_isused(int n) -{ - if (nstate[n] == L_UNKNOWN) - nstate[n] = L_UNAVAIL; -} - -static inline void log_visused(int r) -{ - if (vstate[r] == L_UNKNOWN) - vstate[r] = L_NEEDED; -} - -static inline void do_load_reg(int n, int r) -{ - if (r == FLAGTMP) - raw_load_flagreg(n); - else if (r == FLAGX) - raw_load_flagx(n); -#if X86_TARGET_64BIT - else if (r == PC_P) { - /* PC_P holds a 64-bit host pointer - must use 64-bit load */ - raw_mov_q_rm(n, (uintptr)live.state[r].mem); - } -#endif - else - compemu_raw_mov_l_rm(n, JITPTR live.state[r].mem); -} - -#if 0 -static inline void check_load_reg(int n, int r) -{ - compemu_raw_mov_l_rm(n, (uintptr) live.state[r].mem); -} -#endif - -static inline void log_vwrite(int r) -{ - vwritten[r] = 1; -} - -/* Using an n-reg to hold a v-reg */ -static inline void log_isreg(int n, int r) -{ - if (nstate[n] == L_UNKNOWN && r < 16 && !vwritten[r] && USE_MATCH) - nstate[n] = r; - else { - do_load_reg(n, r); - if (nstate[n] == L_UNKNOWN) - nstate[n] = L_UNAVAIL; - } - if (vstate[r] == L_UNKNOWN) - vstate[r] = L_NEEDED; -} - -static inline void log_clobberreg(int r) -{ - if (vstate[r] == L_UNKNOWN) - vstate[r] = L_UNNEEDED; -} - -/* This ends all possibility of clever register allocation */ - -static inline void log_flush(void) -{ - int i; - - for (i = 0; i < VREGS; i++) - if (vstate[i] == L_UNKNOWN) - vstate[i] = L_NEEDED; - for (i = 0; i < N_REGS; i++) - if (nstate[i] == L_UNKNOWN) - nstate[i] = L_UNAVAIL; -} - -static inline void log_dump(void) -{ - int i; - - return; - - jit_log("----------------------"); - for (i = 0; i < N_REGS; i++) { - switch (nstate[i]) { - case L_UNKNOWN: - jit_log("Nat %d : UNKNOWN", i); - break; - case L_UNAVAIL: - jit_log("Nat %d : UNAVAIL", i); - break; - default: - jit_log("Nat %d : %d", i, nstate[i]); - break; - } - } - for (i = 0; i < VREGS; i++) { - if (vstate[i] == L_UNNEEDED) { - jit_log("Virt %d: UNNEEDED", i); - } - } -} - -/******************************************************************** - * register status handling. EMIT TIME! * - ********************************************************************/ - -static inline void set_status(int r, int status) -{ - if (status == ISCONST) - log_clobberreg(r); - live.state[r].status=status; -} - -static inline int isinreg(int r) -{ - return live.state[r].status==CLEAN || live.state[r].status==DIRTY; -} - -static inline void adjust_nreg(int r, uintptr val) -{ - if (!val) - return; - compemu_raw_lea_l_brr(r,r,val); -} - -#if X86_TARGET_64BIT -static inline void free_nreg(int r); - -static inline bool x86_imm_fits_s32(uintptr i) -{ - const intptr_t si = static_cast(i); - return si >= static_cast(-2147483647 - 1) && - si <= static_cast(2147483647); -} - -static inline int get_unlocked_scratch_nreg_excluding(int avoid1, int avoid2) -{ - static const int candidates[] = { - R11_INDEX, R10_INDEX, R9_INDEX, R8_INDEX, - EAX_INDEX, ECX_INDEX, EDX_INDEX, EBX_INDEX, - EBP_INDEX, ESI_INDEX, EDI_INDEX, R13_INDEX, R14_INDEX - }; - - for (int r : candidates) { - if (r != avoid1 && r != avoid2 && !live.nat[r].locked) - return r; - } - - jit_abort("No unlocked scratch register for 64-bit pointer operation"); - return R11_INDEX; -} - -static inline int get_unlocked_scratch_nreg(void) -{ - return get_unlocked_scratch_nreg_excluding(-1, -1); -} - -static inline void x86_add_q_ri_ptr(int d, uintptr i, int avoid = -1) -{ - if (x86_imm_fits_s32(i)) { - ADDQir(static_cast(i), d); - } else { - const int scratch = get_unlocked_scratch_nreg_excluding(d, avoid); - free_nreg(scratch); - MOVQir(i, scratch); - ADDQrr(scratch, d); - } -} - -static inline void copy_vreg_nreg(int vreg, int dst, int src) -{ - if (vreg == PC_P) { - MOVQrr(src, dst); - } else { - compemu_raw_mov_l_rr(dst, src); - } -} - -static inline void adjust_vreg_nreg(int vreg, int nreg, uintptr val) -{ - if (!val) - return; - if (vreg == PC_P) { - const intptr_t svalue = static_cast(val); - if (svalue >= static_cast(-2147483647 - 1) && - svalue <= static_cast(2147483647)) { - LEAQmr(static_cast(svalue), nreg, X86_NOREG, 1, nreg); - } else { - x86_add_q_ri_ptr(nreg, val); - } - } else { - adjust_nreg(nreg, val); - } -} -#else -static inline void copy_vreg_nreg(int /* vreg */, int dst, int src) -{ - compemu_raw_mov_l_rr(dst, src); -} - -static inline void adjust_vreg_nreg(int /* vreg */, int nreg, uintptr val) -{ - adjust_nreg(nreg, val); -} -#endif - -static void tomem(int r) -{ - int rr=live.state[r].realreg; - - if (isinreg(r)) { - if (live.state[r].val && live.nat[rr].nholds==1 - && !live.nat[rr].locked) { - jit_log2("RemovingA offset %x from reg %d (%d) at %p", live.state[r].val,r,rr,target); - adjust_vreg_nreg(r,rr,live.state[r].val); - live.state[r].val=0; - live.state[r].dirtysize=4; - set_status(r,DIRTY); - } - } - - if (live.state[r].status==DIRTY) { - switch (live.state[r].dirtysize) { - case 1: compemu_raw_mov_b_mr(JITPTR live.state[r].mem,rr); break; - case 2: compemu_raw_mov_w_mr(JITPTR live.state[r].mem,rr); break; - case 4: -#if X86_TARGET_64BIT - if (r == PC_P) { - /* PC_P holds a 64-bit host pointer - must use 64-bit store */ - raw_mov_q_mr((uintptr)live.state[r].mem, rr); - } else -#endif - { - compemu_raw_mov_l_mr(JITPTR live.state[r].mem, rr); - } - break; - default: abort(); - } - log_vwrite(r); - set_status(r,CLEAN); - live.state[r].dirtysize=0; - } -} - -static inline int isconst(int r) -{ - return live.state[r].status==ISCONST; -} - -#if X86_TARGET_64BIT -static inline void store_const_q_mi(uintptr d, uintptr s) -{ - int scratch = get_unlocked_scratch_nreg(); - free_nreg(scratch); - raw_mov_q_ri(scratch, s); - raw_mov_q_mr(d, scratch); -} -#endif - -int is_const(int r) -{ - return isconst(r); -} - -static inline void writeback_const(int r) -{ - if (!isconst(r)) - return; - Dif (live.state[r].needflush==NF_HANDLER) { - jit_abort("Trying to write back constant NF_HANDLER!"); - } - -#if X86_TARGET_64BIT - if (r == PC_P) { - /* PC_P holds a 64-bit host pointer and needs allocator-aware scratch use. */ - store_const_q_mi((uintptr)live.state[r].mem, live.state[r].val); - } else -#endif - { - compemu_raw_mov_l_mi(JITPTR live.state[r].mem, live.state[r].val); - } - log_vwrite(r); - live.state[r].val=0; - set_status(r,INMEM); -} - -static inline void tomem_c(int r) -{ - if (isconst(r)) { - writeback_const(r); - } - else - tomem(r); -} - -static void evict(int r) -{ - int rr; - - if (!isinreg(r)) - return; - tomem(r); - rr=live.state[r].realreg; - - Dif (live.nat[rr].locked && - live.nat[rr].nholds==1) { - jit_abort("register %d in nreg %d is locked!",r,live.state[r].realreg); - } - - live.nat[rr].nholds--; - if (live.nat[rr].nholds!=live.state[r].realind) { /* Was not last */ - int topreg=live.nat[rr].holds[live.nat[rr].nholds]; - int thisind=live.state[r].realind; - - live.nat[rr].holds[thisind]=topreg; - live.state[topreg].realind=thisind; - } - live.state[r].realreg=-1; - set_status(r,INMEM); -} - -static inline void free_nreg(int r) -{ - int i=live.nat[r].nholds; - - while (i) { - int vr; - - --i; - vr=live.nat[r].holds[i]; - evict(vr); - } - Dif (live.nat[r].nholds!=0) { - jit_abort("Failed to free nreg %d, nholds is %d",r,live.nat[r].nholds); - } -} - -/* Use with care! */ -static inline void isclean(int r) -{ - if (!isinreg(r)) - return; - live.state[r].validsize=4; - live.state[r].dirtysize=0; - live.state[r].val=0; - set_status(r,CLEAN); -} - -static inline void disassociate(int r) -{ - isclean(r); - evict(r); -} - -static inline void set_const(int r, uintptr val) -{ - disassociate(r); -#if X86_TARGET_64BIT - /* Guest Dn/An/flag virtual registers are 32-bit M68K values. - PC_P is the only virtual register that may hold a 64-bit host pointer. */ - if (r != PC_P) - val = (uae_u32)val; -#endif - live.state[r].val=val; - set_status(r,ISCONST); -} - -static inline uae_u32 get_offset(int r) -{ - return live.state[r].val; -} - -static int alloc_reg_hinted(int r, int size, int willclobber, int hint) -{ - int bestreg; - uae_s32 when; - int i; - uae_s32 badness=0; /* to shut up gcc */ - bestreg=-1; - when=2000000000; - - /* XXX use a regalloc_order table? */ - for (i=0;i0) { - free_nreg(bestreg); - } - if (isinreg(r)) { - int rr=live.state[r].realreg; - /* This will happen if we read a partially dirty register at a - bigger size */ - Dif (willclobber || live.state[r].validsize>=size) - jit_abort("willclobber || live.state[r].validsize>=size"); - Dif (live.nat[rr].nholds!=1) - jit_abort("live.nat[rr].nholds!=1"); - if (size==4 && live.state[r].validsize==2) { - log_isused(bestreg); - log_visused(r); - compemu_raw_mov_l_rm(bestreg, JITPTR live.state[r].mem); - compemu_raw_bswap_32(bestreg); - compemu_raw_zero_extend_16_rr(rr,rr); - compemu_raw_zero_extend_16_rr(bestreg,bestreg); - compemu_raw_bswap_32(bestreg); - compemu_raw_lea_l_rr_indexed(rr, rr, bestreg, 1); - live.state[r].validsize=4; - live.nat[rr].touched=touchcnt++; - return rr; - } - if (live.state[r].validsize==1) { - /* Nothing yet */ - } - evict(r); - } - - if (!willclobber) { - if (live.state[r].status!=UNDEF) { - if (isconst(r)) { -#if X86_TARGET_64BIT - if (r == PC_P || live.state[r].val > (uintptr)0xffffffff) { - /* PC_P and temporary host pointers need the full 64-bit value. */ - raw_mov_q_ri(bestreg, live.state[r].val); - } else -#endif - { - compemu_raw_mov_l_ri(bestreg, live.state[r].val); - } - live.state[r].val=0; - live.state[r].dirtysize=4; - set_status(r,DIRTY); - log_isused(bestreg); - } - else { - log_isreg(bestreg, r); /* This will also load it! */ - live.state[r].dirtysize=0; - set_status(r,CLEAN); - } - } - else { - live.state[r].val=0; - live.state[r].dirtysize=0; - set_status(r,CLEAN); - log_isused(bestreg); - } - live.state[r].validsize=4; - } - else { /* this is the easiest way, but not optimal. FIXME! */ - /* Now it's trickier, but hopefully still OK */ - if (!isconst(r) || size==4) { - live.state[r].validsize=size; - live.state[r].dirtysize=size; - live.state[r].val=0; - set_status(r,DIRTY); - if (size == 4) { - log_clobberreg(r); - log_isused(bestreg); - } - else { - log_visused(r); - log_isused(bestreg); - } - } - else { - if (live.state[r].status!=UNDEF) { -#if X86_TARGET_64BIT - if (r == PC_P || live.state[r].val > (uintptr)0xffffffff) { - raw_mov_q_ri(bestreg, live.state[r].val); - } else -#endif - { - compemu_raw_mov_l_ri(bestreg, live.state[r].val); - } - } - live.state[r].val=0; - live.state[r].validsize=4; - live.state[r].dirtysize=4; - set_status(r,DIRTY); - log_isused(bestreg); - } - } - live.state[r].realreg=bestreg; - live.state[r].realind=live.nat[bestreg].nholds; - live.nat[bestreg].touched=touchcnt++; - live.nat[bestreg].holds[live.nat[bestreg].nholds]=r; - live.nat[bestreg].nholds++; - - return bestreg; -} - -/* -static int alloc_reg(int r, int size, int willclobber) -{ - return alloc_reg_hinted(r,size,willclobber,-1); -} -*/ - -static void unlock2(int r) -{ - Dif (!live.nat[r].locked) - jit_abort("unlock2 %d not locked", r); - live.nat[r].locked--; -} - -static void setlock(int r) -{ - live.nat[r].locked++; -} - - -static void mov_nregs(int d, int s) -{ - int nd=live.nat[d].nholds; - int i; - - if (s==d) - return; - - if (nd>0) - free_nreg(d); - - log_isused(d); - compemu_raw_mov_l_rr(d,s); - - for (i=0;i=size) { - n=live.state[r].realreg; - switch(size) { - case 1: - if (live.nat[n].canbyte || spec>=0) { - answer=n; - } - break; - case 2: - if (live.nat[n].canword || spec>=0) { - answer=n; - } - break; - case 4: - answer=n; - break; - default: abort(); - } - if (answer<0) - evict(r); - } - /* either the value was in memory to start with, or it was evicted and - is in memory now */ - if (answer<0) { - answer=alloc_reg_hinted(r,spec>=0?4:size,0,spec); - } - - if (spec>=0 && spec!=answer) { - /* Too bad */ - mov_nregs(spec,answer); - answer=spec; - } - live.nat[answer].locked++; - live.nat[answer].touched=touchcnt++; - return answer; -} - - - -static int readreg(int r, int size) -{ - return readreg_general(r,size,-1,0); -} - -static int readreg_specific(int r, int size, int spec) -{ - return readreg_general(r,size,spec,0); -} - -static int readreg_offset(int r, int size) -{ - return readreg_general(r,size,-1,1); -} - -/* writereg_general(r, size, spec) - * - * INPUT - * - r : mid-layer register - * - size : requested size (1/2/4) - * - spec : -1 if find or make a register free, otherwise specifies - * the physical register to use in any case - * - * OUTPUT - * - hard (physical, x86 here) register allocated to virtual register r - */ -static inline int writereg_general(int r, int size, int spec) -{ - int n; - int answer=-1; - - record_register(r); - if (size<4) { - remove_offset(r,spec); - } - - make_exclusive(r,size,spec); - if (isinreg(r)) { - int nvsize=size>live.state[r].validsize?size:live.state[r].validsize; - int ndsize=size>live.state[r].dirtysize?size:live.state[r].dirtysize; - n=live.state[r].realreg; - - Dif (live.nat[n].nholds!=1) - jit_abort("live.nat[%d].nholds!=1", n); - switch(size) { - case 1: - if (live.nat[n].canbyte || spec>=0) { - live.state[r].dirtysize=ndsize; - live.state[r].validsize=nvsize; - answer=n; - } - break; - case 2: - if (live.nat[n].canword || spec>=0) { - live.state[r].dirtysize=ndsize; - live.state[r].validsize=nvsize; - answer=n; - } - break; - case 4: - live.state[r].dirtysize=ndsize; - live.state[r].validsize=nvsize; - answer=n; - break; - default: abort(); - } - if (answer<0) - evict(r); - } - /* either the value was in memory to start with, or it was evicted and - is in memory now */ - if (answer<0) { - answer=alloc_reg_hinted(r,size,1,spec); - } - if (spec>=0 && spec!=answer) { - mov_nregs(spec,answer); - answer=spec; - } - if (live.state[r].status==UNDEF) - live.state[r].validsize=4; - live.state[r].dirtysize=size>live.state[r].dirtysize?size:live.state[r].dirtysize; - live.state[r].validsize=size>live.state[r].validsize?size:live.state[r].validsize; - - live.nat[answer].locked++; - live.nat[answer].touched=touchcnt++; - if (size==4) { - live.state[r].val=0; - } - else { - Dif (live.state[r].val) { - jit_abort("Problem with val"); - } - } - set_status(r,DIRTY); - return answer; -} - -static int writereg(int r, int size) -{ - return writereg_general(r,size,-1); -} - -static int writereg_specific(int r, int size, int spec) -{ - return writereg_general(r,size,spec); -} - -static inline int rmw_general(int r, int wsize, int rsize, int spec) -{ - int n; - int answer=-1; - - record_register(r); - if (live.state[r].status==UNDEF) { - jit_log("WARNING: Unexpected read of undefined register %d",r); - } - remove_offset(r,spec); - make_exclusive(r,0,spec); - - Dif (wsize=rsize) { - n=live.state[r].realreg; - Dif (live.nat[n].nholds!=1) - jit_abort("live.nat[%d].nholds!=1", n); - - switch(rsize) { - case 1: - if (live.nat[n].canbyte || spec>=0) { - answer=n; - } - break; - case 2: - if (live.nat[n].canword || spec>=0) { - answer=n; - } - break; - case 4: - answer=n; - break; - default: abort(); - } - if (answer<0) - evict(r); - } - /* either the value was in memory to start with, or it was evicted and - is in memory now */ - if (answer<0) { - answer=alloc_reg_hinted(r,spec>=0?4:rsize,0,spec); - } - - if (spec>=0 && spec!=answer) { - /* Too bad */ - mov_nregs(spec,answer); - answer=spec; - } - if (wsize>live.state[r].dirtysize) - live.state[r].dirtysize=wsize; - if (wsize>live.state[r].validsize) - live.state[r].validsize=wsize; - set_status(r,DIRTY); - - live.nat[answer].locked++; - live.nat[answer].touched=touchcnt++; - - Dif (live.state[r].val) { - jit_abort("Problem with val(rmw)"); - } - return answer; -} - -static int rmw(int r, int wsize, int rsize) -{ - return rmw_general(r,wsize,rsize,-1); -} - -static int rmw_specific(int r, int wsize, int rsize, int spec) -{ - return rmw_general(r,wsize,rsize,spec); -} - - -/* needed for restoring the carry flag on non-P6 cores */ -static void bt_l_ri_noclobber(RR4 r, IMM i) -{ - int size=4; - if (i<16) - size=2; - r=readreg(r,size); - compemu_raw_bt_l_ri(r,i); - unlock2(r); -} - -/******************************************************************** - * FPU register status handling. EMIT TIME! * - ********************************************************************/ - -static void f_tomem(int r) -{ - if (live.fate[r].status==DIRTY) { -#ifdef USE_LONG_DOUBLE - if (use_long_double) { - raw_fmov_ext_mr((uintptr)live.fate[r].mem, live.fate[r].realreg); - } else { -#endif - raw_fmov_mr((uintptr)live.fate[r].mem, live.fate[r].realreg); -#ifdef USE_LONG_DOUBLE - } -#endif - live.fate[r].status=CLEAN; - } -} - -static void f_tomem_drop(int r) -{ - if (live.fate[r].status==DIRTY) { -#ifdef USE_LONG_DOUBLE - if (use_long_double) { - raw_fmov_ext_mr_drop((uintptr)live.fate[r].mem, live.fate[r].realreg); - } else { -#endif - raw_fmov_mr_drop((uintptr)live.fate[r].mem,live.fate[r].realreg); -#ifdef USE_LONG_DOUBLE - } -#endif - live.fate[r].status=INMEM; - } -} - - -static inline int f_isinreg(int r) -{ - return live.fate[r].status==CLEAN || live.fate[r].status==DIRTY; -} - -static void f_evict(int r) -{ - int rr; - - if (!f_isinreg(r)) - return; - rr=live.fate[r].realreg; - if (live.fat[rr].nholds==1) - f_tomem_drop(r); - else - f_tomem(r); - - Dif (live.fat[rr].locked && - live.fat[rr].nholds==1) { - jit_abort("FPU register %d in nreg %d is locked!",r,live.fate[r].realreg); - } - - live.fat[rr].nholds--; - if (live.fat[rr].nholds!=live.fate[r].realind) { /* Was not last */ - int topreg=live.fat[rr].holds[live.fat[rr].nholds]; - int thisind=live.fate[r].realind; - live.fat[rr].holds[thisind]=topreg; - live.fate[topreg].realind=thisind; - } - live.fate[r].status=INMEM; - live.fate[r].realreg=-1; -} - -static inline void f_free_nreg(int r) -{ - int i=live.fat[r].nholds; - - while (i) { - int vr; - - --i; - vr=live.fat[r].holds[i]; - f_evict(vr); - } - Dif (live.fat[r].nholds!=0) { - jit_abort("Failed to free nreg %d, nholds is %d",r,live.fat[r].nholds); - } -} - - -/* Use with care! */ -static inline void f_isclean(int r) -{ - if (!f_isinreg(r)) - return; - live.fate[r].status=CLEAN; -} - -static inline void f_disassociate(int r) -{ - f_isclean(r); - f_evict(r); -} - - - -static int f_alloc_reg(int r, int willclobber) -{ - int bestreg; - uae_s32 when; - int i; - uae_s32 badness; - bestreg=-1; - when=2000000000; - for (i=N_FREGS;i--;) { - badness=live.fat[i].touched; - if (live.fat[i].nholds==0) - badness=0; - - if (!live.fat[i].locked && badness0) { - f_free_nreg(bestreg); - } - if (f_isinreg(r)) { - f_evict(r); - } - - if (!willclobber) { - if (live.fate[r].status!=UNDEF) { -#ifdef USE_LONG_DOUBLE - if (use_long_double) { - raw_fmov_ext_rm(bestreg, (uintptr)live.fate[r].mem); - } else { -#endif - raw_fmov_rm(bestreg,(uintptr)live.fate[r].mem); -#ifdef USE_LONG_DOUBLE - } -#endif - } - live.fate[r].status=CLEAN; - } - else { - live.fate[r].status=DIRTY; - } - live.fate[r].realreg=bestreg; - live.fate[r].realind=live.fat[bestreg].nholds; - live.fat[bestreg].touched=touchcnt++; - live.fat[bestreg].holds[live.fat[bestreg].nholds]=r; - live.fat[bestreg].nholds++; - - return bestreg; -} - -static void f_unlock(int r) -{ - Dif (!live.fat[r].locked) - jit_abort ("unlock %d", r); - live.fat[r].locked--; -} - -static void f_setlock(int r) -{ - live.fat[r].locked++; -} - -static inline int f_readreg(int r) -{ - int n; - int answer=-1; - - if (f_isinreg(r)) { - n=live.fate[r].realreg; - answer=n; - } - /* either the value was in memory to start with, or it was evicted and - is in memory now */ - if (answer<0) - answer=f_alloc_reg(r,0); - - live.fat[answer].locked++; - live.fat[answer].touched=touchcnt++; - return answer; -} - -static inline void f_make_exclusive(int r, int clobber) -{ - freg_status oldstate; - int rr=live.fate[r].realreg; - int nr; - int nind; - int ndirt=0; - int i; - - if (!f_isinreg(r)) - return; - if (live.fat[rr].nholds==1) - return; - for (i=0;i= (uintptr)kickmem_bank.baseaddr && - addr < (uintptr)kickmem_bank.baseaddr + 8 * 65536) { - return 1; - } - if (rtarea_bank.baseaddr && - addr >= (uintptr)rtarea_bank.baseaddr && - addr < (uintptr)rtarea_bank.baseaddr + 65536) { - return 1; - } - return 0; -#else - return ((addr >= (uintptr)ROMBaseHost) && (addr < (uintptr)ROMBaseHost + ROMSize)); -#endif -} - -#if defined(UAE) || defined(FLIGHT_RECORDER) -static void flush_all(void) -{ - int i; - - log_flush(); - for (i=0;i0) - free_nreg(i); - - for (i=0;i0) - f_free_nreg(i); - - live.flags_in_flags=TRASH; /* Note: We assume we already rescued the - flags at the very start of the call_r - functions! */ -} -#endif - -#if defined(CPU_arm) -#include "compemu_midfunc_arm.cpp" - -#if defined(USE_JIT2) -#include "compemu_midfunc_arm2.cpp" -#endif -#endif - -#if defined(CPU_i386) || defined(CPU_x86_64) -#include "compemu_midfunc_x86.cpp" -#endif - - -/******************************************************************** - * Support functions exposed to gencomp. CREATE time * - ********************************************************************/ - -void set_zero(int r, int tmp) -{ - if (setzflg_uses_bsf) - bsf_l_rr(r,r); - else - simulate_bsf(tmp,r); -} - -int kill_rodent(int r) -{ - return KILLTHERAT && - have_rat_stall && - (live.state[r].status==INMEM || - live.state[r].status==CLEAN || - live.state[r].status==ISCONST || - live.state[r].dirtysize==4); -} - -uintptr get_const(int r) -{ - Dif (!isconst(r)) { - jit_abort("Register %d should be constant, but isn't",r); - } - return live.state[r].val; -} - -void sync_m68k_pc(void) -{ - if (m68k_pc_offset) { - add_l_ri(PC_P,m68k_pc_offset); - comp_pc_p+=m68k_pc_offset; - m68k_pc_offset=0; - } -} - -static inline uae_u32 get_virtual_compile_pc(uintptr native_pc) -{ - uae_u32 m68k_pc = (uae_u32)(start_pc + ((char*)native_pc - (char*)start_pc_p)); -#ifdef NATMEM_OFFSET - if (natmem_offset && native_pc >= (uintptr)natmem_offset && - native_pc < (uintptr)natmem_offset + (uintptr)0x100000000ULL) { - m68k_pc = (uae_u32)(native_pc - (uintptr)natmem_offset); - } -#endif - return m68k_pc; -} - -static uintptr compiled_exception_native_pc; -static uae_u32 compiled_exception_opcode; -static bool compiled_exception_state_valid; -static bool compiled_exception_state_emitted; - -static inline void prepare_compiled_exception_state(uintptr native_pc, uae_u32 opcode) -{ - compiled_exception_native_pc = native_pc; - compiled_exception_opcode = opcode; - compiled_exception_state_valid = true; - compiled_exception_state_emitted = false; -} - -static inline void sync_compiled_exception_state(void) -{ - if (!compiled_exception_state_valid || compiled_exception_state_emitted) - return; - - uae_u32 m68k_pc = get_virtual_compile_pc(compiled_exception_native_pc); - raw_mov_l_mi((uintptr)®s.instruction_pc, m68k_pc); - raw_mov_w_mi((uintptr)®s.opcode, compiled_exception_opcode); - raw_mov_w_mi((uintptr)®s.ir, compiled_exception_opcode); - compiled_exception_state_emitted = true; -} - -/* for building exception frames */ -void compemu_exc_make_frame(int format, int sr, int ret, int nr, int tmp) -{ - lea_l_brr(SP_REG, SP_REG, -2); - mov_l_ri(tmp, (format << 12) + (nr * 4)); /* format | vector */ - writeword(SP_REG, tmp, tmp); - - lea_l_brr(SP_REG, SP_REG, -4); - writelong(SP_REG, ret, tmp); - - lea_l_brr(SP_REG, SP_REG, -2); - writeword_clobber(SP_REG, sr, tmp); - remove_offset(SP_REG, -1); - if (isinreg(SP_REG)) - evict(SP_REG); - else - flush_reg(SP_REG); -} - -void compemu_make_sr(int sr, int tmp) -{ - flush_flags(); /* low level */ - flush_reg(FLAGX); - -#if defined (OPTIMIZED_FLAGS) || defined(UAE) - - /* - * x86 EFLAGS: (!SAHF_SETO_PROFITABLE) - * FEDCBA98 76543210 - * ----V--- NZ-----C - * - * <--AH--> <--AL--> (SAHF_SETO_PROFITABLE) - * FEDCBA98 76543210 - * NZxxxxxC xxxxxxxV - * - * arm RFLAGS: - * FEDCBA98 76543210 FEDCBA98 76543210 - * NZCV---- -------- -------- -------- - * - * -> m68k SR: - * --S--III ---XNZVC - * - * Master-Bit and traceflags are ignored here, - * since they are not emulated in JIT code - */ - mov_l_rm(sr, uae_p32(live.state[FLAGTMP].mem)); - mov_l_ri(tmp, FLAGVAL_N|FLAGVAL_Z|FLAGVAL_V|FLAGVAL_C); - and_l(sr, tmp); - mov_l_rr(tmp, sr); - -#if (defined(CPU_i386) && defined(X86_ASSEMBLY)) || (defined(CPU_x86_64) && defined(X86_64_ASSEMBLY)) -#ifndef SAHF_SETO_PROFITABLE - ror_b_ri(sr, FLAGBIT_N - 3); /* move NZ into position; C->4 */ - shrl_w_ri(tmp, FLAGBIT_V - 1); /* move V into position in tmp */ - or_l(sr, tmp); /* or V flag to SR */ - mov_l_rr(tmp, sr); - shrl_b_ri(tmp, (8 - (FLAGBIT_N - 3)) - FLAGBIT_C); /* move C into position in tmp */ - or_l(sr, tmp); /* or C flag to SR */ -#else - ror_w_ri(sr, FLAGBIT_N - 3); /* move NZ in position; V->4, C->12 */ - shrl_w_ri(tmp, (16 - (FLAGBIT_N - 3)) - FLAGBIT_V - 1); /* move V into position in tmp; C->9 */ - or_l(sr, tmp); /* or V flag to SR */ - shrl_w_ri(tmp, FLAGBIT_C + FLAGBIT_V - 1); /* move C into position in tmp */ - or_l(sr, tmp); /* or C flag to SR */ -#endif - mov_l_ri(tmp, 0x0f); - and_l(sr, tmp); - - mov_b_rm(tmp, uae_p32(®flags.x)); - and_l_ri(tmp, FLAGVAL_X); - shll_l_ri(tmp, 4); - or_l(sr, tmp); - -#elif defined(CPU_arm) && defined(ARM_ASSEMBLY) - shrl_l_ri(sr, FLAGBIT_N - 3); /* move NZ into position */ - ror_l_ri(tmp, FLAGBIT_C - 1); /* move C into position in tmp; V->31 */ - and_l_ri(sr, 0xc); - or_l(sr, tmp); /* or C flag to SR */ - shrl_l_ri(tmp, 31); /* move V into position in tmp */ - or_l(sr, tmp); /* or V flag to SR */ - - mov_b_rm(tmp, uae_p32(®flags.x)); - and_l_ri(tmp, FLAGVAL_X); - shrl_l_ri(tmp, FLAGBIT_X - 4); - or_l(sr, tmp); - -#else -#error "unknown CPU" -#endif - -#else - - xor_l(sr, sr); - xor_l(tmp, tmp); - mov_b_rm(tmp, uae_p32(®s.c)); - shll_l_ri(tmp, 0); - or_l(sr, tmp); - mov_b_rm(tmp, uae_p32(®s.v)); - shll_l_ri(tmp, 1); - or_l(sr, tmp); - mov_b_rm(tmp, uae_p32(®s.z)); - shll_l_ri(tmp, 2); - or_l(sr, tmp); - mov_b_rm(tmp, uae_p32(®s.n)); - shll_l_ri(tmp, 3); - or_l(sr, tmp); - -#endif /* OPTIMIZED_FLAGS */ - - mov_b_rm(tmp, uae_p32(®s.s)); - shll_l_ri(tmp, 13); - or_l(sr, tmp); - mov_l_rm(tmp, uae_p32(®s.intmask)); - shll_l_ri(tmp, 8); - or_l(sr, tmp); - and_l_ri(sr, 0x271f); - mov_w_mr(uae_p32(®s.sr), sr); -} - -void compemu_enter_super(int sr) -{ -#if 0 - fprintf(stderr, "enter_super: isinreg=%d rr=%d nholds=%d\n", isinreg(SP_REG), live.state[SP_REG].realreg, isinreg(SP_REG) ? live.nat[live.state[SP_REG].realreg].nholds : -1); -#endif - remove_offset(SP_REG, -1); - if (isinreg(SP_REG)) - evict(SP_REG); - else - flush_reg(SP_REG); - /* - * equivalent to: - * if (!regs.s) - * { - * regs.usp = m68k_areg(regs, 7); - * m68k_areg(regs, 7) = regs.isp; - * regs.s = 1; - * mmu_set_super(1); - * } - */ - test_l_ri(sr, 0x2000); -#if defined(CPU_i386) || defined(CPU_x86_64) - compemu_raw_jnz_b_oponly(); - uae_u8 *branchadd = get_target(); - skip_byte(); -#elif defined(CPU_arm) - compemu_raw_jnz_b_oponly(); - uae_u8 *branchadd = get_target(); - skip_byte(); -#endif - mov_l_mr(JITPTR ®s.usp, SP_REG); - mov_l_rm(SP_REG, uae_p32(®s.isp)); - mov_b_mi(uae_p32(®s.s), 1); -#if defined(CPU_i386) || defined(CPU_x86_64) - *branchadd = JITPTR get_target() - (JITPTR branchadd + 1); -#elif defined(CPU_arm) - *((uae_u32 *)branchadd - 3) = get_target() - (branchadd + 1); -#endif -} - -/******************************************************************** - * Scratch registers management * - ********************************************************************/ - -struct scratch_t { - uae_u32 regs[VREGS]; - fpu_register fregs[VFREGS]; -}; - -static scratch_t scratch; - -/******************************************************************** - * Support functions exposed to newcpu * - ********************************************************************/ - -static inline const char *str_on_off(bool b) -{ - return b ? "on" : "off"; -} - -void compiler_init(void) -{ - static bool initialized = false; - if (initialized) - return; - - flush_icache = flush_icache_none; - -#ifdef UAE - flush_icache = lazy_flush ? flush_icache_lazy : flush_icache_hard; -#else - jit_log(" : enable runtime disassemblers : %s", JITDebug ? "yes" : "no"); - - jit_log(" : compile FPU instructions : %s", !avoid_fpu ? "yes" : "no"); - - // Get size of the translation cache (in KB) - cache_size = bx_options.jit.jitcachesize; - jit_log(" : requested translation cache size : %d KB", cache_size); - - setzflg_uses_bsf = target_check_bsf(); - jit_log(" : target processor has CMOV instructions : %s", have_cmov ? "yes" : "no"); - jit_log(" : target processor can suffer from partial register stalls : %s", have_rat_stall ? "yes" : "no"); - jit_log(" : alignment for loops, jumps are %d, %d", align_loops, align_jumps); -#if defined(CPU_i386) || defined(CPU_x86_64) - jit_log(" : target processor has SSE2 instructions : %s", cpuinfo.x86_has_xmm2 ? "yes" : "no"); - jit_log(" : cache linesize is %lu", (unsigned long)cpuinfo.x86_clflush_size); -#endif - - // Translation cache flush mechanism - lazy_flush = (bx_options.jit.jitlazyflush == 0) ? false : true; - jit_log(" : lazy translation cache invalidation : %s", str_on_off(lazy_flush)); - flush_icache = lazy_flush ? flush_icache_lazy : flush_icache_hard; - - // Compiler features - jit_log(" : register aliasing : %s", str_on_off(1)); - jit_log(" : FP register aliasing : %s", str_on_off(USE_F_ALIAS)); - jit_log(" : lazy constant offsetting : %s", str_on_off(USE_OFFSET)); -#if USE_INLINING - follow_const_jumps = bx_options.jit.jitinline; -#endif - jit_log(" : block inlining : %s", str_on_off(follow_const_jumps)); - jit_log(" : separate blockinfo allocation : %s", str_on_off(USE_SEPARATE_BIA)); - - // Build compiler tables - init_table68k(); - build_comp(); -#endif - - initialized = true; - -#ifdef PROFILE_UNTRANSLATED_INSNS - jit_log(" : gather statistics on untranslated insns count"); -#endif - -#ifdef PROFILE_COMPILE_TIME - jit_log(" : gather statistics on translation time"); - emul_start_time = clock(); -#endif -} - -void compiler_exit(void) -{ -#ifdef PROFILE_COMPILE_TIME - emul_end_time = clock(); -#endif - -#ifdef UAE -#else -#if DEBUG -#if defined(USE_DATA_BUFFER) - jit_log("data_wasted = %ld bytes", data_wasted); -#endif -#endif - - // Deallocate translation cache - if (compiled_code) { - vm_release(compiled_code, cache_size * 1024); - compiled_code = 0; - } - - // Deallocate popallspace - if (popallspace) { - vm_release(popallspace, POPALLSPACE_SIZE); - popallspace = 0; - } -#endif - -#ifdef PROFILE_COMPILE_TIME - jit_log("### Compile Block statistics"); - jit_log("Number of calls to compile_block : %d", compile_count); - uae_u32 emul_time = emul_end_time - emul_start_time; - jit_log("Total emulation time : %.1f sec", double(emul_time)/double(CLOCKS_PER_SEC)); - jit_log("Total compilation time : %.1f sec (%.1f%%)", double(compile_time)/double(CLOCKS_PER_SEC), 100.0*double(compile_time)/double(emul_time)); -#endif - -#ifdef PROFILE_UNTRANSLATED_INSNS - uae_u64 untranslated_count = 0; - for (int i = 0; i < 65536; i++) { - opcode_nums[i] = i; - untranslated_count += raw_cputbl_count[i]; - } - bug("Sorting out untranslated instructions count, total %llu...\n", untranslated_count); - qsort(opcode_nums, 65536, sizeof(uae_u16), untranslated_compfn); - jit_log("Rank Opc Count Name\n"); - for (int i = 0; i < untranslated_top_ten; i++) { - uae_u32 count = raw_cputbl_count[opcode_nums[i]]; - struct instr *dp; - struct mnemolookup *lookup; - if (!count) - break; - dp = table68k + opcode_nums[i]; - for (lookup = lookuptab; lookup->mnemo != (instrmnem)dp->mnemo; lookup++) - ; - bug(_T("%03d: %04x %10u %s\n"), i, opcode_nums[i], count, lookup->name); - } -#endif - -#ifdef RECORD_REGISTER_USAGE - int reg_count_ids[16]; - uint64 tot_reg_count = 0; - for (int i = 0; i < 16; i++) { - reg_count_ids[i] = i; - tot_reg_count += reg_count[i]; - } - qsort(reg_count_ids, 16, sizeof(int), reg_count_compare); - uint64 cum_reg_count = 0; - for (int i = 0; i < 16; i++) { - int r = reg_count_ids[i]; - cum_reg_count += reg_count[r]; - jit_log("%c%d : %16ld %2.1f%% [%2.1f]", r < 8 ? 'D' : 'A', r % 8, - reg_count[r], - 100.0*double(reg_count[r])/double(tot_reg_count), - 100.0*double(cum_reg_count)/double(tot_reg_count)); - } -#endif - - exit_table68k(); -} - -static void init_comp(void) -{ - int i; - uae_s8* cb=can_byte; - uae_s8* cw=can_word; - uae_s8* au=always_used; - -#ifdef RECORD_REGISTER_USAGE - for (i=0;i<16;i++) - reg_count_local[i] = 0; -#endif - - for (i=0;idirect_handler_to_use; -} - -/* This version assumes that it is writing *real* memory, and *will* fail - * if that assumption is wrong! No branches, no second chances, just - * straight go-for-it attitude */ - -static void writemem_real(int address, int source, int size, int tmp, int clobber) -{ - int f=tmp; - -#ifdef NATMEM_OFFSET - if (canbang) { /* Woohoo! go directly at the memory! */ - if (clobber) - f=source; - - switch(size) { - case 1: mov_b_bRr(address,source,MEMBaseDiff); break; - case 2: mov_w_rr(f,source); mid_bswap_16(f); mov_w_bRr(address,f,MEMBaseDiff); break; - case 4: mov_l_rr(f,source); mid_bswap_32(f); mov_l_bRr(address,f,MEMBaseDiff); break; - } - forget_about(tmp); - forget_about(f); - return; - } -#endif - -#ifdef UAE - mov_l_rr(f,address); - shrl_l_ri(f,16); /* The index into the baseaddr table */ - mov_l_rm_indexed(f,uae_p32(baseaddr),f,SIZEOF_VOID_P); /* FIXME: is SIZEOF_VOID_P correct? */ - - if (address==source) { /* IBrowse does this! */ - if (size > 1) { - add_l(f,address); /* f now holds the final address */ - switch (size) { - case 2: mid_bswap_16(source); mov_w_Rr(f,source,0); - mid_bswap_16(source); return; - case 4: mid_bswap_32(source); mov_l_Rr(f,source,0); - mid_bswap_32(source); return; - } - } - } - switch (size) { /* f now holds the offset */ - case 1: mov_b_mrr_indexed(address,f,1,source); break; - case 2: mid_bswap_16(source); mov_w_mrr_indexed(address,f,1,source); - mid_bswap_16(source); break; /* base, index, source */ - case 4: mid_bswap_32(source); mov_l_mrr_indexed(address,f,1,source); - mid_bswap_32(source); break; - } -#endif -} - -#ifdef UAE -static inline void writemem(int address, int source, int offset, int size, int tmp) -{ - int f=tmp; - -#if X86_TARGET_64BIT - /* x86-64: The register allocator only spills/reloads 32-bit values, - so 64-bit pointers (addrbank ptr, function ptr) must NOT be stored - in virtual registers. Instead, compute the 32-bit bank index via - the allocator, do all register setup for the call, then perform - the 64-bit pointer chase with raw instructions after - prepare_for_call_2() when all allocator bookkeeping is done but - hardware register contents are still valid. */ - - /* Step 1: Compute bank index (32-bit, safe in virtual register) */ - mov_l_rr(f, address); - shrl_l_ri(f, 16); - - /* Step 2: Call setup (adapted from call_r_02 internals) */ - clobber_flags(); - remove_all_offsets(); - - int hw_addr = readreg_specific(address, 4, REG_PAR1); - int hw_src = readreg_specific(source, size, REG_PAR2); - int hw_f = readreg(f, 4); - - prepare_for_call_1(); - unlock2(hw_f); - unlock2(hw_addr); - unlock2(hw_src); - prepare_for_call_2(); - - /* Step 3: 64-bit pointer chase with raw instructions. - hw_f still holds the bank index, REG_PAR1/PAR2 hold call args. - Use a scratch register for the mem_banks base address. */ - { - int scratch = (hw_f != R11_INDEX) ? R11_INDEX : R10_INDEX; - MOVQir((uintptr)mem_banks, scratch); - MOVQmr(0, scratch, hw_f, SIZEOF_VOID_P, hw_f); - /* hw_f now holds 64-bit addrbank pointer */ - MOVQmr(offset, hw_f, X86_NOREG, 1, hw_f); - /* hw_f now holds 64-bit function pointer */ - } - - /* Step 4: Call */ - raw_dec_sp(STACK_SHADOW_SPACE); - raw_call_r(hw_f); - raw_inc_sp(STACK_SHADOW_SPACE); - - forget_about(tmp); -#else - mov_l_rr(f,address); - shrl_l_ri(f,16); - mov_l_rm_indexed(f,uae_p32(mem_banks),f,SIZEOF_VOID_P); - mov_l_rR(f,f,offset); - call_r_02(f,address,source,4,size); - forget_about(tmp); -#endif -} -#endif - -void writebyte(int address, int source, int tmp) -{ -#ifdef UAE - if ((special_mem & S_WRITE) || distrust_byte() || jit_use_memory_helpers()) { - sync_compiled_exception_state(); - writemem_special(address, source, 5 * SIZEOF_VOID_P, 1, tmp); - } else -#endif - writemem_real(address,source,1,tmp,0); -} - -static inline void writeword_general(int address, int source, int tmp, - int clobber) -{ -#ifdef UAE - if ((special_mem & S_WRITE) || distrust_word() || jit_use_memory_helpers()) { - sync_compiled_exception_state(); - writemem_special(address, source, 4 * SIZEOF_VOID_P, 2, tmp); - } else -#endif - writemem_real(address,source,2,tmp,clobber); -} - -void writeword_clobber(int address, int source, int tmp) -{ - writeword_general(address,source,tmp,1); -} - -void writeword(int address, int source, int tmp) -{ - writeword_general(address,source,tmp,0); -} - -static inline void writelong_general(int address, int source, int tmp, - int clobber) -{ -#ifdef UAE - if ((special_mem & S_WRITE) || distrust_long() || jit_use_memory_helpers()) { - sync_compiled_exception_state(); - writemem_special(address, source, 3 * SIZEOF_VOID_P, 4, tmp); - } else -#endif - writemem_real(address,source,4,tmp,clobber); -} - -void writelong_clobber(int address, int source, int tmp) -{ - writelong_general(address,source,tmp,1); -} - -void writelong(int address, int source, int tmp) -{ - writelong_general(address,source,tmp,0); -} - - - -/* This version assumes that it is reading *real* memory, and *will* fail - * if that assumption is wrong! No branches, no second chances, just - * straight go-for-it attitude */ - -static void readmem_real(int address, int dest, int size, int tmp) -{ - int f=tmp; - - if (size==4 && address!=dest) - f=dest; - -#ifdef NATMEM_OFFSET - if (canbang) { /* Woohoo! go directly at the memory! */ - switch(size) { - case 1: mov_b_brR(dest,address,MEMBaseDiff); break; - case 2: mov_w_brR(dest,address,MEMBaseDiff); mid_bswap_16(dest); break; - case 4: mov_l_brR(dest,address,MEMBaseDiff); mid_bswap_32(dest); break; - } - forget_about(tmp); - (void) f; - return; - } -#endif - -#ifdef UAE - mov_l_rr(f,address); - shrl_l_ri(f,16); /* The index into the baseaddr table */ - mov_l_rm_indexed(f,uae_p32(baseaddr),f,SIZEOF_VOID_P); /* FIXME: is SIZEOF_VOID_P correct? */ - /* f now holds the offset */ - - switch(size) { - case 1: mov_b_rrm_indexed(dest,address,f,1); break; - case 2: mov_w_rrm_indexed(dest,address,f,1); mid_bswap_16(dest); break; - case 4: mov_l_rrm_indexed(dest,address,f,1); mid_bswap_32(dest); break; - } - forget_about(tmp); -#endif -} - - - -#ifdef UAE -static inline void readmem(int address, int dest, int offset, int size, int tmp) -{ - int f=tmp; - -#if X86_TARGET_64BIT - /* x86-64: Same approach as writemem - keep 64-bit pointers out of - virtual registers. Compute 32-bit bank index via allocator, then - do 64-bit pointer chase with raw instructions after call setup. */ - - /* Step 1: Compute bank index (32-bit, safe in virtual register) */ - mov_l_rr(f, address); - shrl_l_ri(f, 16); - - /* Step 2: Call setup (adapted from call_r_11 internals) */ - clobber_flags(); - remove_all_offsets(); - if (size == 4) { - if (dest != address && dest != f) { - forget_about(dest); - } - } else { - tomem_c(dest); - } - - int hw_addr = readreg_specific(address, 4, REG_PAR1); - int hw_f = readreg(f, 4); - - prepare_for_call_1(); - unlock2(hw_addr); - unlock2(hw_f); - prepare_for_call_2(); - - /* Step 3: 64-bit pointer chase with raw instructions */ - { - int scratch = (hw_f != R11_INDEX) ? R11_INDEX : R10_INDEX; - MOVQir((uintptr)mem_banks, scratch); - MOVQmr(0, scratch, hw_f, SIZEOF_VOID_P, hw_f); - /* hw_f now holds 64-bit addrbank pointer */ - MOVQmr(offset, hw_f, X86_NOREG, 1, hw_f); - /* hw_f now holds 64-bit function pointer */ - } - - /* Step 4: Call */ - raw_dec_sp(STACK_SHADOW_SPACE); - raw_call_r(hw_f); - raw_inc_sp(STACK_SHADOW_SPACE); - - /* Step 5: Record result (same as call_r_11 epilogue) */ - live.nat[REG_RESULT].holds[0] = dest; - live.nat[REG_RESULT].nholds = 1; - live.nat[REG_RESULT].touched = touchcnt++; - - live.state[dest].realreg = REG_RESULT; - live.state[dest].realind = 0; - live.state[dest].val = 0; - live.state[dest].validsize = size; - live.state[dest].dirtysize = size; - set_status(dest, DIRTY); - - forget_about(tmp); -#else - mov_l_rr(f,address); - shrl_l_ri(f,16); - mov_l_rm_indexed(f,uae_p32(mem_banks),f,SIZEOF_VOID_P); - mov_l_rR(f,f,offset); - call_r_11(dest,f,address,size,4); - forget_about(tmp); -#endif -} -#endif - -void readbyte(int address, int dest, int tmp) -{ -#ifdef UAE - if ((special_mem & S_READ) || distrust_byte() || jit_use_memory_helpers()) { - sync_compiled_exception_state(); - readmem_special(address, dest, 2 * SIZEOF_VOID_P, 1, tmp); - } else -#endif - readmem_real(address,dest,1,tmp); -} - -void readword(int address, int dest, int tmp) -{ -#ifdef UAE - if ((special_mem & S_READ) || distrust_word() || jit_use_memory_helpers()) { - sync_compiled_exception_state(); - readmem_special(address, dest, 1 * SIZEOF_VOID_P, 2, tmp); - } else -#endif - readmem_real(address,dest,2,tmp); -} - -void readlong(int address, int dest, int tmp) -{ -#ifdef UAE - if ((special_mem & S_READ) || distrust_long() || jit_use_memory_helpers()) { - sync_compiled_exception_state(); - readmem_special(address, dest, 0 * SIZEOF_VOID_P, 4, tmp); - } else -#endif - readmem_real(address,dest,4,tmp); -} - -void get_n_addr(int address, int dest, int tmp) -{ -#ifdef UAE - if (special_mem || distrust_addr() || jit_use_memory_helpers()) { - /* This one might appear a bit odd... */ - sync_compiled_exception_state(); - readmem_special(address, dest, 6 * SIZEOF_VOID_P, 4, tmp); - return; - } -#endif - -#if X86_TARGET_64BIT -#ifdef NATMEM_OFFSET - if (canbang) { - int hw_address = readreg(address, 4); - int hw_dest = writereg(dest, 4); - compemu_raw_mov_l_rr(hw_dest, hw_address); - LEAQmr(0, R_MEMSTART, hw_dest, 1, hw_dest); - unlock2(hw_dest); - unlock2(hw_address); - forget_about(tmp); - return; - } -#endif -#endif - - // a is the register containing the virtual address - // after the offset had been fetched - int a=tmp; - - // f is the register that will contain the offset - int f=tmp; - - // a == f == tmp if (address == dest) - if (address!=dest) { - a=address; - f=dest; - } - -#ifdef NATMEM_OFFSET - if (canbang) { -#if FIXED_ADDRESSING - lea_l_brr(dest,address,MEMBaseDiff); -#else -# error "Only fixed addressing mode supported" -#endif - forget_about(tmp); - (void) f; - (void) a; - return; - } -#endif - -#ifdef UAE - mov_l_rr(f,address); - mov_l_rr(dest,address); // gb-- nop if dest==address - shrl_l_ri(f,16); - mov_l_rm_indexed(f,uae_p32(baseaddr),f,SIZEOF_VOID_P); /* FIXME: is SIZEOF_VOID_P correct? */ - add_l(dest,f); - forget_about(tmp); -#endif -} - -void get_n_addr_jmp(int address, int dest, int tmp) -{ -#ifdef WINUAE_ARANYM - /* For this, we need to get the same address as the rest of UAE - would --- otherwise we end up translating everything twice */ - get_n_addr(address,dest,tmp); -#else -#ifdef UAE - if (special_mem || distrust_addr() || jit_use_memory_helpers()) { - get_n_addr(address,dest,tmp); - return; - } -#endif -#if X86_TARGET_64BIT - if (canbang && dest == PC_P) { - clobber_flags(); - int hw_address = readreg(address, 4); - int hw_dest = writereg(dest, 4); - compemu_raw_mov_l_rr(hw_dest, hw_address); - LEAQmr(0, R_MEMSTART, hw_dest, 1, hw_dest); - ANDQir((IMM)~1, hw_dest); - unlock2(hw_dest); - unlock2(hw_address); - forget_about(tmp); - return; - } -#endif - int f=tmp; - if (address!=dest) - f=dest; - mov_l_rr(f,address); - shrl_l_ri(f,16); /* The index into the baseaddr bank table */ - mov_l_rm_indexed(dest,uae_p32(baseaddr),f,SIZEOF_VOID_P); /* FIXME: is SIZEOF_VOID_P correct? */ - add_l(dest,address); -#if X86_TARGET_64BIT - if (dest == PC_P) { - int hw_dest = rmw(dest, 4, 4); - ANDQir((IMM)~1, hw_dest); - unlock2(hw_dest); - } else -#endif - and_l_ri (dest, ~1); - forget_about(tmp); -#endif -} - - -/* base is a register, but dp is an actual value. - target is a register, as is tmp */ -void calc_disp_ea_020(int base, uae_u32 dp, int target, int tmp) -{ - int reg = (dp >> 12) & 15; - int regd_shift=(dp >> 9) & 3; - - if (dp & 0x100) { - int ignorebase=(dp&0x80); - int ignorereg=(dp&0x40); - int addbase=0; - int outer=0; - - if ((dp & 0x30) == 0x20) addbase = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - if ((dp & 0x30) == 0x30) addbase = comp_get_ilong((m68k_pc_offset+=4)-4); - - if ((dp & 0x3) == 0x2) outer = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); - if ((dp & 0x3) == 0x3) outer = comp_get_ilong((m68k_pc_offset+=4)-4); - - if ((dp & 0x4) == 0) { /* add regd *before* the get_long */ - if (!ignorereg) { - if ((dp & 0x800) == 0) - sign_extend_16_rr(target,reg); - else - mov_l_rr(target,reg); - shll_l_ri(target,regd_shift); - } - else - mov_l_ri(target,0); - - /* target is now regd */ - if (!ignorebase) - add_l(target,base); - add_l_ri(target,addbase); - if (dp&0x03) readlong(target,target,tmp); - } else { /* do the getlong first, then add regd */ - if (!ignorebase) { - mov_l_rr(target,base); - add_l_ri(target,addbase); - } - else - mov_l_ri(target,addbase); - if (dp&0x03) readlong(target,target,tmp); - - if (!ignorereg) { - if ((dp & 0x800) == 0) - sign_extend_16_rr(tmp,reg); - else - mov_l_rr(tmp,reg); - shll_l_ri(tmp,regd_shift); - /* tmp is now regd */ - add_l(target,tmp); - } - } - add_l_ri(target,outer); - } - else { /* 68000 version */ - if ((dp & 0x800) == 0) { /* Sign extend */ - sign_extend_16_rr(tmp,reg); - lea_l_brr_indexed(target,base,tmp,1< : actual translation cache size : %d KB at %p-%p", cache_size, compiled_code, compiled_code + cache_size*1024); -#if defined(CPU_x86_64) - /* Anchor subsequent jit_vm_acquire() calls at the JIT cache so - * blockinfo pools stay within RIP-relative range of code. */ - vm_acquire_anchor = compiled_code; - - /* Verify JIT cache is within RIP-relative reach of globals */ - { - intptr_t dist = (intptr_t)compiled_code - (intptr_t)®s; - jit_log("code cache at %p, regs at %p, distance=%+lld bytes", - compiled_code, (void *)®s, (long long)dist); - if (llabs(dist) > (intptr_t)0x7F000000) { - jit_log("WARNING: code cache is %+lld bytes from globals -- " - "RIP-relative addressing may fail! Disabling JIT.", - (long long)dist); - vm_release(compiled_code, cache_size * 1024); - compiled_code = 0; - vm_acquire_anchor = NULL; - changed_prefs.cachesize = 0; - currprefs.cachesize = 0; - cache_size = 0; - return; - } - } -#endif -#ifdef USE_DATA_BUFFER - max_compile_start = compiled_code + cache_size*1024 - BYTES_PER_INST - DATA_BUFFER_SIZE; -#else - max_compile_start = compiled_code + cache_size*1024 - BYTES_PER_INST; -#endif - current_compile_p = compiled_code; - current_cache_size = 0; -#if defined(USE_DATA_BUFFER) - reset_data_buffer(); -#endif - } -} - -static void calc_checksum(blockinfo* bi, uae_u32* c1, uae_u32* c2) -{ - uae_u32 k1 = 0; - uae_u32 k2 = 0; - -#if USE_CHECKSUM_INFO - checksum_info *csi = bi->csi; - Dif(!csi) abort(); - while (csi) { - uae_s32 len = csi->length; - uintptr tmp = (uintptr)csi->start_p; -#else - uae_s32 len = bi->len; - uintptr tmp = (uintptr)bi->min_pcp; -#endif - uae_u32* pos; - - len += (tmp & 3); - tmp &= ~((uintptr)3); - pos = (uae_u32 *)tmp; - - if (len >= 0 && len <= MAX_CHECKSUM_LEN) { - while (len > 0) { - k1 += *pos; - k2 ^= *pos; - pos++; - len -= 4; - } - } - -#if USE_CHECKSUM_INFO - csi = csi->next; - } -#endif - - *c1 = k1; - *c2 = k2; -} - -#if 0 -static void show_checksum(CSI_TYPE* csi) -{ - uae_u32 k1=0; - uae_u32 k2=0; - uae_s32 len=CSI_LENGTH(csi); - uae_u32 tmp=(uintptr)CSI_START_P(csi); - uae_u32* pos; - - len+=(tmp&3); - tmp&=(~3); - pos=(uae_u32*)tmp; - - if (len<0 || len>MAX_CHECKSUM_LEN) { - return; - } - else { - while (len>0) { - jit_log("%08x ",*pos); - pos++; - len-=4; - } - jit_log(" bla"); - } -} -#endif - - -int check_for_cache_miss(void) -{ - blockinfo* bi=get_blockinfo_addr(regs.pc_p); - - if (bi) { - int cl=cacheline(regs.pc_p); - if (bi!=cache_tags[cl+1].bi) { - raise_in_cl_list(bi); - return 1; - } - } - return 0; -} - - -static void recompile_block(void) -{ - /* An existing block's countdown code has expired. We need to make - sure that execute_normal doesn't refuse to recompile due to a - perceived cache miss... */ - blockinfo* bi=get_blockinfo_addr(regs.pc_p); - - Dif (!bi) - jit_abort("recompile_block"); - raise_in_cl_list(bi); - execute_normal(); - return; -} -static void cache_miss(void) -{ - blockinfo* bi=get_blockinfo_addr(regs.pc_p); -#if COMP_DEBUG - uae_u32 cl=cacheline(regs.pc_p); - blockinfo* bi2=get_blockinfo(cl); -#endif - - if (!bi) { - execute_normal(); /* Compile this block now */ - return; - } - Dif (!bi2 || bi==bi2) { - jit_abort("Unexplained cache miss %p %p",bi,bi2); - } - raise_in_cl_list(bi); - return; -} - -static int called_check_checksum(blockinfo* bi); - -static inline int block_check_checksum(blockinfo* bi) -{ - uae_u32 c1,c2; - bool isgood; - - if (bi->status!=BI_NEED_CHECK) - return 1; /* This block is in a checked state */ - - if (bi->c1 || bi->c2) - calc_checksum(bi,&c1,&c2); - else { - c1=c2=1; /* Make sure it doesn't match */ - } - - isgood=(c1==bi->c1 && c2==bi->c2); - - if (isgood) { - /* This block is still OK. So we reactivate. Of course, that - means we have to move it into the needs-to-be-flushed list */ - bi->handler_to_use=bi->handler; - set_dhtu(bi,bi->direct_handler); - bi->status=BI_CHECKING; - isgood=called_check_checksum(bi) != 0; - } - if (isgood) { - jit_log2("reactivate %p/%p (%x %x/%x %x)",bi,bi->pc_p, c1,c2,bi->c1,bi->c2); - remove_from_list(bi); - add_to_active(bi); - raise_in_cl_list(bi); - bi->status=BI_ACTIVE; - } - else { - /* This block actually changed. We need to invalidate it, - and set it up to be recompiled */ - jit_log2("discard %p/%p (%x %x/%x %x)",bi,bi->pc_p, c1,c2,bi->c1,bi->c2); - invalidate_block(bi); - raise_in_cl_list(bi); - } - return isgood; -} - -static int called_check_checksum(blockinfo* bi) -{ - int isgood=1; - int i; - - for (i=0;i<2 && isgood;i++) { - if (bi->dep[i].jmp_off) { - isgood=block_check_checksum(bi->dep[i].target); - } - } - return isgood; -} - -static void check_checksum(void) -{ - blockinfo* bi=get_blockinfo_addr(regs.pc_p); - uae_u32 cl=cacheline(regs.pc_p); - blockinfo* bi2=get_blockinfo(cl); - - /* These are not the droids you are looking for... */ - if (!bi) { - /* Whoever is the primary target is in a dormant state, but - calling it was accidental, and we should just compile this - new block */ - execute_normal(); - return; - } - if (bi!=bi2) { - /* The block was hit accidentally, but it does exist. Cache miss */ - cache_miss(); - return; - } - - if (!block_check_checksum(bi)) - execute_normal(); -} - -static inline void match_states(blockinfo* bi) -{ - int i; - smallstate* s=&(bi->env); - - if (bi->status==BI_NEED_CHECK) { - block_check_checksum(bi); - } - if (bi->status==BI_ACTIVE || - bi->status==BI_FINALIZING) { /* Deal with the *promises* the - block makes (about not using - certain vregs) */ - for (i=0;i<16;i++) { - if (s->virt[i]==L_UNNEEDED) { - jit_log2("unneeded reg %d at %p",i,target); - COMPCALL(forget_about)(i); // FIXME - } - } - } - flush(1); - - /* And now deal with the *demands* the block makes */ - for (i=0;inat[i]; - if (v>=0) { - // printf("Loading reg %d into %d at %p\n",v,i,target); - readreg_specific(v,4,i); - // do_load_reg(i,v); - // setlock(i); - } - } - for (i=0;inat[i]; - if (v>=0) { - unlock2(i); - } - } -} - -static inline void create_popalls(void) -{ - int i,r; - - if (popallspace == NULL) { - if ((popallspace = alloc_code(POPALLSPACE_SIZE)) == NULL) { - jit_log("WARNING: Could not allocate popallspace!"); -#ifdef UAE - if (currprefs.cachesize > 0) -#endif - { - jit_abort("Could not allocate popallspace!"); - } -#ifdef UAE - /* This is not fatal if JIT is not used. If JIT is - * turned on, it will crash, but it would have crashed - * anyway. */ - return; -#endif - } - } - vm_protect(popallspace, POPALLSPACE_SIZE, VM_PAGE_READ | VM_PAGE_WRITE); - - int stack_space = STACK_OFFSET; - for (i=0;idirect_pen=(cpuop_func*)get_target(); -#if X86_TARGET_64BIT - raw_mov_q_rm(0, (uintptr)&(bi->pc_p)); - raw_mov_q_mr((uintptr)®s.pc_p, 0); -#else - compemu_raw_mov_l_rm(0, JITPTR &(bi->pc_p)); - compemu_raw_mov_l_mr(JITPTR ®s.pc_p,0); -#endif - compemu_raw_jmp(JITPTR popall_execute_normal); - - align_target(align_jumps); - bi->direct_pcc=(cpuop_func*)get_target(); -#if X86_TARGET_64BIT - raw_mov_q_rm(0, (uintptr)&(bi->pc_p)); - raw_mov_q_mr((uintptr)®s.pc_p, 0); -#else - compemu_raw_mov_l_rm(0, JITPTR &(bi->pc_p)); - compemu_raw_mov_l_mr(JITPTR ®s.pc_p,0); -#endif - compemu_raw_jmp(JITPTR popall_check_checksum); - flush_cpu_icache((void *)current_compile_p, (void *)target); - current_compile_p=get_target(); - - bi->deplist=NULL; - for (i=0;i<2;i++) { - bi->dep[i].prev_p=NULL; - bi->dep[i].next=NULL; - } - bi->env=default_ss; - bi->status=BI_INVALID; - bi->havestate=0; - //bi->env=empty_ss; -} - -#ifdef UAE -void compemu_reset(void) -{ - flush_icache = lazy_flush ? flush_icache_lazy : flush_icache_hard; - set_cache_state(0); -} -#endif - -#ifdef UAE -#else -// OPCODE is in big endian format, use cft_map() beforehand, if needed. -#endif -static inline void reset_compop(int opcode) -{ - compfunctbl[opcode] = NULL; - nfcompfunctbl[opcode] = NULL; -} - -static int read_opcode(const char *p) -{ - int opcode = 0; - for (int i = 0; i < 4; i++) { - int op = p[i]; - switch (op) { - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - opcode = (opcode << 4) | (op - '0'); - break; - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - opcode = (opcode << 4) | ((op - 'a') + 10); - break; - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - opcode = (opcode << 4) | ((op - 'A') + 10); - break; - default: - return -1; - } - } - return opcode; -} - - -#ifdef USE_JIT_FPU -static struct { - const char *name; - bool *const disabled; -} const jit_opcodes[] = { - { "fbcc", &jit_disable.fbcc }, - { "fdbcc", &jit_disable.fdbcc }, - { "fscc", &jit_disable.fscc }, - { "ftrapcc", &jit_disable.ftrapcc }, - { "fsave", &jit_disable.fsave }, - { "frestore", &jit_disable.frestore }, - { "fmove", &jit_disable.fmove }, - { "fmovec", &jit_disable.fmovec }, - { "fmovem", &jit_disable.fmovem }, - { "fmovecr", &jit_disable.fmovecr }, - { "fint", &jit_disable.fint }, - { "fsinh", &jit_disable.fsinh }, - { "fintrz", &jit_disable.fintrz }, - { "fsqrt", &jit_disable.fsqrt }, - { "flognp1", &jit_disable.flognp1 }, - { "fetoxm1", &jit_disable.fetoxm1 }, - { "ftanh", &jit_disable.ftanh }, - { "fatan", &jit_disable.fatan }, - { "fasin", &jit_disable.fasin }, - { "fatanh", &jit_disable.fatanh }, - { "fsin", &jit_disable.fsin }, - { "ftan", &jit_disable.ftan }, - { "fetox", &jit_disable.fetox }, - { "ftwotox", &jit_disable.ftwotox }, - { "ftentox", &jit_disable.ftentox }, - { "flogn", &jit_disable.flogn }, - { "flog10", &jit_disable.flog10 }, - { "flog2", &jit_disable.flog2 }, - { "fabs", &jit_disable.fabs }, - { "fcosh", &jit_disable.fcosh }, - { "fneg", &jit_disable.fneg }, - { "facos", &jit_disable.facos }, - { "fcos", &jit_disable.fcos }, - { "fgetexp", &jit_disable.fgetexp }, - { "fgetman", &jit_disable.fgetman }, - { "fdiv", &jit_disable.fdiv }, - { "fmod", &jit_disable.fmod }, - { "fadd", &jit_disable.fadd }, - { "fmul", &jit_disable.fmul }, - { "fsgldiv", &jit_disable.fsgldiv }, - { "frem", &jit_disable.frem }, - { "fscale", &jit_disable.fscale }, - { "fsglmul", &jit_disable.fsglmul }, - { "fsub", &jit_disable.fsub }, - { "fsincos", &jit_disable.fsincos }, - { "fcmp", &jit_disable.fcmp }, - { "ftst", &jit_disable.ftst }, -}; - -static bool read_fpu_opcode(const char *p, size_t len) -{ - unsigned int i; - - for (i = 0; i < (sizeof(jit_opcodes) / sizeof(jit_opcodes[0])); i++) - { - if (len == strlen(jit_opcodes[i].name) && _strnicmp(jit_opcodes[i].name, p, len) == 0) - { - *jit_opcodes[i].disabled = true; - jit_log(" : disabled %s", jit_opcodes[i].name); - return true; - } - } - return false; -} -#endif - -static bool merge_blacklist2(const char *blacklist) -{ -#ifdef USE_JIT_FPU - for (unsigned int i = 0; i < (sizeof(jit_opcodes) / sizeof(jit_opcodes[0])); i++) - *jit_opcodes[i].disabled = false; -#endif - if (blacklist[0] != '\0') { - const char *p = blacklist; - for (;;) { - size_t len; - if (*p == 0) - return true; - - const char *endp = strchr(p, ','); - if (endp) { - len = endp - p; - } else { - len = uaestrlen(p); - } - - TCHAR *s = au(p); - bool found = false; - for (int i = 0; lookuptab[i].name[0]; i++) { - if (!_tcsnicmp(s, lookuptab[i].name, len) && _tcslen(lookuptab[i].name) == len) { - int mnemo = lookuptab[i].mnemo; - for (int opcode = 0; opcode < 0xf000; opcode++) { - struct instr *table = &table68k[opcode]; - if (table->mnemo == mnemo) { - reset_compop(cft_map(opcode)); - if (currprefs.cachesize) { - jit_log(" : blacklist opcode : %04x", opcode); - } - found = true; - } - } - if (found) { - p += len; - if (*p) - p++; - } - } - } - xfree(s); - if (found) - continue; -#ifdef USE_JIT_FPU - if (read_fpu_opcode(p, len)) { - p += len; - if (*p) - p++; - continue; - } -#endif - int opcode1 = read_opcode(p); - if (opcode1 < 0) - { - bug(" : invalid opcode %s", p); - return false; - } - p += 4; - int opcode2 = opcode1; - if (*p == '-') { - p++; - opcode2 = read_opcode(p); - if (opcode2 < 0) - { - bug(" : invalid opcode %s", p); - return false; - } - p += 4; - } - - if (*p == 0 || *p == ',') { - if (currprefs.cachesize) { - jit_log(" : blacklist opcodes : %04x-%04x", opcode1, opcode2); - } - for (int opcode = opcode1; opcode <= opcode2; opcode++) - reset_compop(cft_map(opcode)); - - if (*(p++) == ',') - continue; - - return true; - } - - return false; - } - } - return true; -} - -static bool merge_blacklist(void) -{ - bool ret; -#ifdef UAE - const char *blacklist = ua(currprefs.jitblacklist); - ret = merge_blacklist2(blacklist); - xfree((void*)blacklist); -#else - const char *blacklist = bx_options.jit.jitblacklist; - ret = merge_blacklist2(blacklist); -#endif - return ret; -} - -void build_comp(void) -{ -#ifdef FSUAE - if (!g_fs_uae_jit_compiler) { - jit_log("JIT: JIT compiler is not enabled"); - return; - } -#endif - int i, j; - unsigned long opcode; - const struct comptbl* tbl=op_smalltbl_0_comp_ff; - const struct comptbl* nftbl=op_smalltbl_0_comp_nf; - int count; -#ifdef WINUAE_ARANYM - unsigned int cpu_level = 4; // 68040 - const struct cputbl *nfctbl = op_smalltbl_0_nf; -#else - unsigned int cpu_level = (currprefs.cpu_model - 68000) / 10; - if (cpu_level > 4) - cpu_level--; -#ifdef NOFLAGS_SUPPORT_GENCOMP - const struct cputbl *nfctbl = uaegetjitcputbl(); -#endif -#endif - // Initialize target CPU (check for features, e.g. CMOV, rat stalls) - raw_init_cpu(); - -#ifdef NATMEM_OFFSET -#ifdef UAE -#ifdef JIT_EXCEPTION_HANDLER - install_exception_handler(); -#endif -#endif -#endif - - jit_log(" : building compiler function tables"); - - for (opcode = 0; opcode < 65536; opcode++) { - reset_compop(opcode); -#ifdef NOFLAGS_SUPPORT_GENCOMP - nfcpufunctbl[opcode] = op_illg; -#endif - prop[opcode].use_flags = FLAG_ALL; - prop[opcode].set_flags = FLAG_ALL; - prop[opcode].cflow = fl_trap; // ILLEGAL instructions do trap - } - - for (i = 0; tbl[i].opcode < 65536; i++) { - int cflow = table68k[tbl[i].opcode].cflow; - if (follow_const_jumps && (tbl[i].specific & COMP_OPCODE_ISCJUMP)) - cflow = fl_const_jump; - else - cflow &= ~fl_const_jump; - prop[cft_map(tbl[i].opcode)].cflow = cflow; - - bool uses_fpu = (tbl[i].specific & COMP_OPCODE_USES_FPU) != 0; - if (uses_fpu && avoid_fpu) - compfunctbl[cft_map(tbl[i].opcode)] = NULL; - else - compfunctbl[cft_map(tbl[i].opcode)] = tbl[i].handler; - } - - int jit_unavail_count = 0; - for (i = 0; nftbl[i].opcode < 65536; i++) { - bool uses_fpu = (tbl[i].specific & COMP_OPCODE_USES_FPU) != 0; - if (uses_fpu && avoid_fpu) - nfcompfunctbl[cft_map(nftbl[i].opcode)] = NULL; - else - nfcompfunctbl[cft_map(nftbl[i].opcode)] = nftbl[i].handler; - for (j = 0; nfctbl[j].handler_ff; j++) { - if (nfctbl[j].opcode == nftbl[i].opcode) { -#ifdef NOFLAGS_SUPPORT_GENCOMP -#ifdef NOFLAGS_SUPPORT_GENCPU - nfcpufunctbl[cft_map(nftbl[i].opcode)] = nfctbl[j].handler_nf; -#else - nfcpufunctbl[cft_map(nftbl[i].opcode)] = nfctbl[j].handler_ff; -#endif -#endif - break; - } - } - if (!nfctbl[j].handler_ff && currprefs.cachesize) { - jit_unavail_count++; - } - } - if (jit_unavail_count > 0) { - jit_log("%d opcodes unavailable for JIT compilation", jit_unavail_count); - } - -#ifdef NOFLAGS_SUPPORT_GENCOMP -#ifdef NOFLAGS_SUPPORT_GENCPU - for (i = 0; nfctbl[i].handler_nf; i++) { - nfcpufunctbl[cft_map(nfctbl[i].opcode)] = nfctbl[i].handler_nf; - } -#else - for (i = 0; nfctbl[i].handler_ff; i++) { - nfcpufunctbl[cft_map(nfctbl[i].opcode)] = nfctbl[i].handler_ff; - } -#endif -#endif - - for (opcode = 0; opcode < 65536; opcode++) { - compop_func *f; - compop_func *nff; -#ifdef NOFLAGS_SUPPORT_GENCOMP - cpuop_func *nfcf; -#endif - int isaddx; - int cflow; - - if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > cpu_level) - continue; - - if (table68k[opcode].handler != -1) { - f = compfunctbl[cft_map(table68k[opcode].handler)]; - nff = nfcompfunctbl[cft_map(table68k[opcode].handler)]; -#ifdef NOFLAGS_SUPPORT_GENCOMP - nfcf = nfcpufunctbl[cft_map(table68k[opcode].handler)]; -#endif - isaddx = prop[cft_map(table68k[opcode].handler)].is_addx; - prop[cft_map(opcode)].is_addx = isaddx; - cflow = prop[cft_map(table68k[opcode].handler)].cflow; - prop[cft_map(opcode)].cflow = cflow; - compfunctbl[cft_map(opcode)] = f; - nfcompfunctbl[cft_map(opcode)] = nff; -#ifdef NOFLAGS_SUPPORT_GENCOMP - Dif (nfcf == op_illg) - abort(); - nfcpufunctbl[cft_map(opcode)] = nfcf; -#endif - } - prop[cft_map(opcode)].set_flags = table68k[opcode].flagdead; - prop[cft_map(opcode)].use_flags = table68k[opcode].flaglive; - /* Unconditional jumps don't evaluate condition codes, so they - * don't actually use any flags themselves */ - if (prop[cft_map(opcode)].cflow & fl_const_jump) - prop[cft_map(opcode)].use_flags = 0; - } -#ifdef NOFLAGS_SUPPORT_GENCOMP -#ifdef NOFLAGS_SUPPORT_GENCPU - for (i = 0; nfctbl[i].handler_nf != NULL; i++) { - if (nfctbl[i].specific) - nfcpufunctbl[cft_map(tbl[i].opcode)] = nfctbl[i].handler_nf; - } -#else - for (i = 0; nfctbl[i].handler_ff != NULL; i++) { - if (nfctbl[i].specific) - nfcpufunctbl[cft_map(tbl[i].opcode)] = nfctbl[i].handler_ff; - } -#endif -#endif - - /* Merge in blacklist */ - if (!merge_blacklist()) - { - jit_log(" : blacklist merge failure!"); - } - - count=0; - for (opcode = 0; opcode < 65536; opcode++) { - if (compfunctbl[cft_map(opcode)]) - count++; - } - jit_log(" : supposedly %d compileable opcodes!",count); - - /* Initialise state */ - create_popalls(); - alloc_cache(); - reset_lists(); - - for (i=0;ipc_p)].handler=(cpuop_func*)popall_execute_normal; - cache_tags[cacheline(bi->pc_p)+1].bi=NULL; - dbi=bi; bi=bi->next; - free_blockinfo(dbi); - } - bi=dormant; - while(bi) { - cache_tags[cacheline(bi->pc_p)].handler=(cpuop_func*)popall_execute_normal; - cache_tags[cacheline(bi->pc_p)+1].bi=NULL; - dbi=bi; bi=bi->next; - free_blockinfo(dbi); - } - - reset_lists(); - if (!compiled_code) - return; - -#if defined(USE_DATA_BUFFER) - reset_data_buffer(); -#endif - - current_compile_p=compiled_code; -#ifdef UAE - set_special(0); /* To get out of compiled code */ -#else - SPCFLAGS_SET( SPCFLAG_JIT_EXEC_RETURN ); /* To get out of compiled code */ -#endif -} - - -/* "Soft flushing" --- instead of actually throwing everything away, - we simply mark everything as "needs to be checked". -*/ - -static inline void flush_icache_lazy(int v) -{ - blockinfo* bi; - blockinfo* bi2; - - if (!active) - return; - - bi=active; - while (bi) { - uae_u32 cl=cacheline(bi->pc_p); - if (bi->status==BI_INVALID || - bi->status==BI_NEED_RECOMP) { - if (bi==cache_tags[cl+1].bi) - cache_tags[cl].handler=(cpuop_func*)popall_execute_normal; - bi->handler_to_use=(cpuop_func*)popall_execute_normal; - set_dhtu(bi,bi->direct_pen); - bi->status=BI_INVALID; - } - else { - if (bi==cache_tags[cl+1].bi) - cache_tags[cl].handler=(cpuop_func*)popall_check_checksum; - bi->handler_to_use=(cpuop_func*)popall_check_checksum; - set_dhtu(bi,bi->direct_pcc); - bi->status=BI_NEED_CHECK; - } - bi2=bi; - bi=bi->next; - } - /* bi2 is now the last entry in the active list */ - bi2->next=dormant; - if (dormant) - dormant->prev_p=&(bi2->next); - - dormant=active; - active->prev_p=&dormant; - active=NULL; -} - - -#if 0 -static void flush_icache_range(uae_u32 start, uae_u32 length) -{ - if (!active) - return; - -#if LAZY_FLUSH_ICACHE_RANGE - uae_u8 *start_p = get_real_address(start); - blockinfo *bi = active; - while (bi) { -#if USE_CHECKSUM_INFO - bool invalidate = false; - for (checksum_info *csi = bi->csi; csi && !invalidate; csi = csi->next) - invalidate = (((start_p - csi->start_p) < csi->length) || - ((csi->start_p - start_p) < length)); -#else - // Assume system is consistent and would invalidate the right range - const bool invalidate = (bi->pc_p - start_p) < length; -#endif - if (invalidate) { - uae_u32 cl = cacheline(bi->pc_p); - if (bi == cache_tags[cl + 1].bi) - cache_tags[cl].handler = (cpuop_func *)popall_execute_normal; - bi->handler_to_use = (cpuop_func *)popall_execute_normal; - set_dhtu(bi, bi->direct_pen); - bi->status = BI_NEED_RECOMP; - } - bi = bi->next; - } - return; -#else - UNUSED(start); - UNUSED(length); -#endif - flush_icache(); -} -#endif - - -int failure; - -#ifdef UAE -#if defined(HAVE_GET_WORD_UNSWAPPED) -#define DO_GET_OPCODE(a) (do_get_mem_word_unswapped((uae_u16*)(a))) -#else -static inline unsigned int get_opcode_cft_map(unsigned int f) -{ - return do_byteswap_16(f); -} -#define DO_GET_OPCODE(a) (get_opcode_cft_map((uae_u16)*(a))) -#endif -#else -#if defined(HAVE_GET_WORD_UNSWAPPED) && !defined(FULLMMU) -# define DO_GET_OPCODE(a) (do_get_mem_word_unswapped((uae_u16 *)(a))) -#else -# define DO_GET_OPCODE(a) (do_get_mem_word((uae_u16 *)(a))) -#endif -#endif - -#ifdef JIT_DEBUG -static uae_u8 *last_regs_pc_p = 0; -static uae_u8 *last_compiled_block_addr = 0; - -void compiler_dumpstate(void) -{ - if (!JITDebug) - return; - - jit_log("### Host addresses"); - jit_log("MEM_BASE : %lx", (unsigned long)MEMBaseDiff); - jit_log("PC_P : %p", ®s.pc_p); - jit_log("SPCFLAGS : %p", ®s.spcflags); - jit_log("D0-D7 : %p-%p", ®s.regs[0], ®s.regs[7]); - jit_log("A0-A7 : %p-%p", ®s.regs[8], ®s.regs[15]); - jit_log(" "); - - jit_log("### M68k processor state"); - m68k_dumpstate(stderr, 0); - jit_log(" "); - - jit_log("### Block in Atari address space"); - jit_log("M68K block : %p", - (void *)(uintptr)last_regs_pc_p); - if (last_regs_pc_p != 0) { - jit_log("Native block : %p (%d bytes)", - (void *)last_compiled_block_addr, - get_blockinfo_addr(last_regs_pc_p)->direct_handler_size); - } - jit_log(" "); -} -#endif - - -#if 0 /* debugging helpers; activate as needed */ -static void print_exc_frame(uae_u32 opcode) -{ - int nr = (opcode & 0x0f) + 32; - if (nr != 0x45 && /* Timer-C */ - nr != 0x1c && /* VBL */ - nr != 0x46) /* ACIA */ - { - memptr sp = m68k_areg(regs, 7); - uae_u16 sr = get_word(sp); - fprintf(stderr, "Exc:%02x SP: %08x USP: %08x SR: %04x PC: %08x Format: %04x", nr, sp, regs.usp, sr, get_long(sp + 2), get_word(sp + 6)); - if (nr >= 32 && nr < 48) - { - fprintf(stderr, " Opcode: $%04x", sr & 0x2000 ? get_word(sp + 8) : get_word(regs.usp)); - } - fprintf(stderr, "\n"); - } -} - -static void push_all_nat(void) -{ - raw_pushfl(); - raw_push_l_r(EAX_INDEX); - raw_push_l_r(ECX_INDEX); - raw_push_l_r(EDX_INDEX); - raw_push_l_r(EBX_INDEX); - raw_push_l_r(EBP_INDEX); - raw_push_l_r(EDI_INDEX); - raw_push_l_r(ESI_INDEX); - raw_push_l_r(R8_INDEX); - raw_push_l_r(R9_INDEX); - raw_push_l_r(R10_INDEX); - raw_push_l_r(R11_INDEX); - raw_push_l_r(R12_INDEX); - raw_push_l_r(R13_INDEX); - raw_push_l_r(R14_INDEX); - raw_push_l_r(R15_INDEX); -} - -static void pop_all_nat(void) -{ - raw_pop_l_r(R15_INDEX); - raw_pop_l_r(R14_INDEX); - raw_pop_l_r(R13_INDEX); - raw_pop_l_r(R12_INDEX); - raw_pop_l_r(R11_INDEX); - raw_pop_l_r(R10_INDEX); - raw_pop_l_r(R9_INDEX); - raw_pop_l_r(R8_INDEX); - raw_pop_l_r(ESI_INDEX); - raw_pop_l_r(EDI_INDEX); - raw_pop_l_r(EBP_INDEX); - raw_pop_l_r(EBX_INDEX); - raw_pop_l_r(EDX_INDEX); - raw_pop_l_r(ECX_INDEX); - raw_pop_l_r(EAX_INDEX); - raw_popfl(); -} -#endif - -#if 0 -static void print_inst(void) -{ - disasm_m68k_block(regs.fault_pc + (uint8 *)MEMBaseDiff, 1); -} -#endif - - -#ifdef UAE -void compile_block(cpu_history *pc_hist, int blocklen, int totcycles) -{ - if (cache_enabled && compiled_code && currprefs.cpu_model >= 68020) { -#else -static void compile_block(cpu_history* pc_hist, int blocklen) -{ - if (cache_enabled && compiled_code) { -#endif -#ifdef PROFILE_COMPILE_TIME - compile_count++; - clock_t start_time = clock(); -#endif -#ifdef JIT_DEBUG - bool disasm_block = false; -#endif - - /* OK, here we need to 'compile' a block */ - int i; - int r; - int was_comp=0; - uae_u8 liveflags[MAXRUN+1]; -#if USE_CHECKSUM_INFO - bool trace_in_rom = isinrom((uintptr)pc_hist[0].location) != 0; - uintptr max_pcp=(uintptr)pc_hist[blocklen - 1].location; - uintptr min_pcp=max_pcp; -#else - uintptr max_pcp=(uintptr)pc_hist[0].location; - uintptr min_pcp=max_pcp; -#endif - uae_u32 cl=cacheline(pc_hist[0].location); - void* specflags=(void*)®s.spcflags; - blockinfo* bi=NULL; - blockinfo* bi2; - int extra_len=0; - - redo_current_block=0; - if (current_compile_p >= MAX_COMPILE_PTR) - flush_icache_hard(3); - - if (!alloc_blockinfos()) { - flush_icache_hard(3); - return; - } - - bi=get_blockinfo_addr_new(pc_hist[0].location,0); - if (!bi) { - flush_icache_hard(3); - return; - } - bi2=get_blockinfo(cl); - - optlev=bi->optlevel; - if (bi->status!=BI_INVALID) { - Dif (bi!=bi2) { - /* I don't think it can happen anymore. Shouldn't, in - any case. So let's make sure... */ - jit_abort("WOOOWOO count=%d, ol=%d %p %p", bi->count,bi->optlevel,bi->handler_to_use, cache_tags[cl].handler); - } - - Dif (bi->count!=-1 && bi->status!=BI_NEED_RECOMP) { - jit_abort("bi->count=%d, bi->status=%d,bi->optlevel=%d",bi->count,bi->status,bi->optlevel); - /* What the heck? We are not supposed to be here! */ - } - } - if (bi->count==-1) { - optlev++; - while (!optcount[optlev]) - optlev++; - bi->count=optcount[optlev]-1; - } - current_block_pc_p= JITPTR pc_hist[0].location; - - remove_deps(bi); /* We are about to create new code */ - bi->optlevel=optlev; - bi->pc_p=(uae_u8*)pc_hist[0].location; -#if USE_CHECKSUM_INFO - free_checksum_info_chain(bi->csi); - bi->csi = NULL; -#endif - - liveflags[blocklen]=FLAG_ALL; /* All flags needed afterwards */ - const bool unsafe_memory_helpers = jit_use_memory_helpers(); - const bool unsafe_compile_fallbacks = jit_use_compile_fallbacks(); - const bool high_natmem_rom_block = - jit_n_addr_unsafe && !jit_n_addr_bank_unsafe && - isinrom((uintptr)pc_hist[0].location) != 0; - bool unsafe_special_mem_block = high_natmem_rom_block; - i=blocklen; - while (i--) { - uae_u16* currpcp=pc_hist[i].location; - uae_u32 op=DO_GET_OPCODE(currpcp); - if ((unsafe_compile_fallbacks || unsafe_memory_helpers) && pc_hist[i].specmem) - unsafe_special_mem_block = true; - -#if USE_CHECKSUM_INFO - trace_in_rom = trace_in_rom && isinrom((uintptr)currpcp); - if (follow_const_jumps && is_const_jump(op)) { - checksum_info *csi = alloc_checksum_info(); - if (!csi) { - invalidate_block(bi); - flush_icache_hard(3); - return; - } - csi->start_p = (uae_u8 *)min_pcp; - csi->length = JITPTR max_pcp - JITPTR min_pcp + LONGEST_68K_INST; - csi->next = bi->csi; - bi->csi = csi; - max_pcp = (uintptr)currpcp; - } - min_pcp = (uintptr)currpcp; -#else - if ((uintptr)currpcpmax_pcp) - max_pcp=(uintptr)currpcp; -#endif - -#ifdef UAE - if (!currprefs.compnf) { - liveflags[i]=FLAG_ALL; - } - else -#endif - { - liveflags[i] = ((liveflags[i+1] & (~prop[op].set_flags))|prop[op].use_flags); - if (prop[op].is_addx && (liveflags[i+1]&FLAG_Z)==0) - liveflags[i]&= ~FLAG_Z; - } - } - -#if USE_CHECKSUM_INFO - checksum_info *csi = alloc_checksum_info(); - if (!csi) { - invalidate_block(bi); - flush_icache_hard(3); - return; - } - csi->start_p = (uae_u8 *)min_pcp; - csi->length = JITPTR max_pcp - JITPTR min_pcp + LONGEST_68K_INST; - csi->next = bi->csi; - bi->csi = csi; -#endif - - bi->needed_flags=liveflags[0]; - - align_target(align_loops); - was_comp=0; - - bi->direct_handler=(cpuop_func*)get_target(); - set_dhtu(bi,bi->direct_handler); - bi->status=BI_COMPILING; - current_block_start_target= JITPTR get_target(); - - log_startblock(); - - if (bi->count>=0) { /* Need to generate countdown code */ -#if X86_TARGET_64BIT - raw_mov_q_mi((uintptr)®s.pc_p, (uintptr)pc_hist[0].location); -#else - compemu_raw_mov_l_mi(JITPTR ®s.pc_p, JITPTR pc_hist[0].location); -#endif - compemu_raw_sub_l_mi(JITPTR &(bi->count),1); - compemu_raw_jl(JITPTR popall_recompile_block); - } - if (optlev==0 || unsafe_special_mem_block) { /* No need to actually translate */ - /* Execute normally without keeping stats */ -#if X86_TARGET_64BIT - raw_mov_q_mi((uintptr)®s.pc_p, (uintptr)pc_hist[0].location); -#else - compemu_raw_mov_l_mi(JITPTR ®s.pc_p, JITPTR pc_hist[0].location); -#endif - compemu_raw_jmp(JITPTR popall_exec_nostats); - } - else { - reg_alloc_run=0; - next_pc_p=0; - taken_pc_p=0; - branch_cc=0; // Only to be initialized. Will be set together with next_pc_p - - comp_pc_p=(uae_u8*)pc_hist[0].location; - init_comp(); - was_comp=1; - -#ifdef USE_CPU_EMUL_SERVICES - compemu_raw_sub_l_mi((uintptr)&emulated_ticks,blocklen); - compemu_raw_jcc_b_oponly(NATIVE_CC_GT); - uae_u8 *branchadd=get_target(); - skip_byte(); - raw_dec_sp(STACK_SHADOW_SPACE); - compemu_raw_call((uintptr)cpu_do_check_ticks); - raw_inc_sp(STACK_SHADOW_SPACE); - *branchadd=get_target()-(branchadd+1); -#endif - -#ifdef JIT_DEBUG - if (JITDebug) { -#if X86_TARGET_64BIT - raw_mov_q_mi((uintptr)&last_regs_pc_p,(uintptr)pc_hist[0].location); - raw_mov_q_mi((uintptr)&last_compiled_block_addr,current_block_start_target); -#else - compemu_raw_mov_l_mi((uintptr)&last_regs_pc_p,(uintptr)pc_hist[0].location); - compemu_raw_mov_l_mi((uintptr)&last_compiled_block_addr,current_block_start_target); -#endif - } -#endif - - for (i=0;i1 && !unsafe_control_flow && !unsafe_flags) { - failure=0; - if (!was_comp) { - comp_pc_p=(uae_u8*)pc_hist[i].location; - init_comp(); - } - was_comp=1; - -#if defined(HAVE_DISASM_NATIVE) && defined(HAVE_DISASM_M68K) -/* debugging helpers; activate as needed */ -#if 1 - disasm_this_inst = false; - const uae_u8 *start_m68k_thisinst = (const uae_u8 *)pc_hist[i].location; - uae_u8 *start_native_thisinst = get_target(); -#endif -#endif - -#ifdef WINUAE_ARANYM - bool isnop = do_get_mem_word(pc_hist[i].location) == 0x4e71 || - ((i + 1) < blocklen && do_get_mem_word(pc_hist[i+1].location) == 0x4e71); - - if (isnop) - compemu_raw_mov_l_mi((uintptr)®s.fault_pc, ((uintptr)(pc_hist[i].location)) - MEMBaseDiff); -#endif - - comptbl[opcode](opcode); - freescratch(); - if (!unsafe_compile_fallbacks && !(liveflags[i+1] & FLAG_CZNV)) { - /* We can forget about flags */ - dont_care_flags(); - } -#if INDIVIDUAL_INST - flush(1); - nop(); - flush(1); - was_comp=0; -#endif -#ifdef WINUAE_ARANYM - /* - * workaround for buserror handling: on a "nop", write registers back - */ - if (isnop) - { - flush(1); - nop(); - was_comp=0; - } -#endif -#if defined(HAVE_DISASM_NATIVE) && defined(HAVE_DISASM_M68K) - -/* debugging helpers; activate as needed */ -#if 0 - disasm_m68k_block(start_m68k_thisinst, 1); - push_all_nat(); - compemu_raw_mov_l_mi(uae_p32(®s.fault_pc), (uintptr)start_m68k_thisinst - MEMBaseDiff); - raw_dec_sp(STACK_SHADOW_SPACE); - compemu_raw_call(uae_p32(print_instn)); - raw_inc_sp(STACK_SHADOW_SPACE); - pop_all_nat(); -#endif - - if (disasm_this_inst) - { - disasm_m68k_block(start_m68k_thisinst, 1); -#if 1 - disasm_native_block(start_native_thisinst, get_target() - start_native_thisinst); -#endif - -#if 0 - push_all_nat(); - - raw_dec_sp(STACK_SHADOW_SPACE); - compemu_raw_mov_l_ri(REG_PAR1, (uae_u32)cft_map(opcode)); - compemu_raw_call((uintptr)print_exc_frame); - raw_inc_sp(STACK_SHADOW_SPACE); - - pop_all_nat(); -#endif - - if (failure) - { - bug("(discarded)"); - target = start_native_thisinst; - } - } -#endif - } - - if (failure) { - if (was_comp) { - flush(1); - was_comp=0; - } - compemu_raw_mov_l_ri(REG_PAR1,(uae_u32)opcode); -#if USE_NORMAL_CALLING_CONVENTION - raw_push_l_r(REG_PAR1); -#endif - { - uintptr native_pc = (uintptr)pc_hist[i].location; - uae_u32 m68k_pc = get_virtual_compile_pc(native_pc); -#if X86_TARGET_64BIT - raw_mov_q_mi((uintptr)®s.pc_p, native_pc); - raw_mov_q_mi((uintptr)®s.pc_oldp, native_pc); -#else - compemu_raw_mov_l_mi(JITPTR ®s.pc_p, JITPTR native_pc); - compemu_raw_mov_l_mi(JITPTR ®s.pc_oldp, JITPTR native_pc); -#endif - compemu_raw_mov_l_mi(JITPTR ®s.pc, m68k_pc); - compemu_raw_mov_l_mi(JITPTR ®s.instruction_pc, m68k_pc); - } - raw_dec_sp(STACK_SHADOW_SPACE); - compemu_raw_call(JITPTR cputbl[opcode]); - raw_inc_sp(STACK_SHADOW_SPACE); -#ifdef PROFILE_UNTRANSLATED_INSNS - // raw_cputbl_count[] is indexed with plain opcode (in m68k order) - compemu_raw_add_l_mi((uintptr)&raw_cputbl_count[cft_map(opcode)],1); -#endif -#if USE_NORMAL_CALLING_CONVENTION - raw_inc_sp(4); -#endif - - if (unsafe_compile_fallbacks && unsafe_control_flow) { -#ifdef UAE - raw_sub_l_mi(uae_p32(&countdown),scaled_cycles(totcycles)); -#endif - compemu_raw_jmp(JITPTR popall_do_nothing); - } - - if (i < blocklen - 1) { - uae_u8* branchadd; - - /* if (SPCFLAGS_TEST(SPCFLAG_ALL)) popall_do_nothing() */ - compemu_raw_mov_l_rm(0, JITPTR specflags); - compemu_raw_test_l_rr(0,0); -#if defined(USE_DATA_BUFFER) - data_check_end(8, 64); // just a pessimistic guess... -#endif - compemu_raw_jz_b_oponly(); - branchadd=get_target(); - skip_byte(); -#ifdef UAE - raw_sub_l_mi(uae_p32(&countdown),scaled_cycles(totcycles)); -#endif - compemu_raw_jmp(JITPTR popall_do_nothing); - *branchadd = JITPTR get_target() - (JITPTR branchadd + 1); - } - } - } -#if 0 /* Disabled: inter-block flag optimization uses single-instruction - lookahead which is insufficient. Can discard flags that later - instructions in the next block depend on, causing visual corruption. - Same issue as ARM64 fix (compemu_support_arm.cpp:3528). */ - if (next_pc_p && taken_pc_p && - was_comp && taken_pc_p==current_block_pc_p) - { - blockinfo* bi1=get_blockinfo_addr_new((void*)next_pc_p,0); - blockinfo* bi2=get_blockinfo_addr_new((void*)taken_pc_p,0); - uae_u8 x=bi1->needed_flags; - - if (x==0xff || 1) { /* To be on the safe side */ - uae_u16* next=(uae_u16*)next_pc_p; - uae_u32 op=DO_GET_OPCODE(next); - - x=FLAG_ALL; - x&=(~prop[op].set_flags); - x|=prop[op].use_flags; - } - - x|=bi2->needed_flags; - if (!(x & FLAG_CZNV)) { - /* We can forget about flags */ - dont_care_flags(); - extra_len+=2; /* The next instruction now is part of this block */ - } - } -#endif - log_flush(); - - if (next_pc_p) { /* A branch was registered */ - uintptr t1=next_pc_p; - uintptr t2=taken_pc_p; - int cc=branch_cc; - - uae_u32* branchadd; - uae_u32* tba; - bigstate tmp; - blockinfo* tbi; - - if (taken_pc_penv))) { - mark_callers_recompile(bi); - } - - big_to_small_state(&live,&(bi->env)); -#endif - -#if USE_CHECKSUM_INFO - remove_from_list(bi); - if (trace_in_rom) { - // No need to checksum that block trace on cache invalidation - free_checksum_info_chain(bi->csi); - bi->csi = NULL; - add_to_dormant(bi); - } - else { - calc_checksum(bi,&(bi->c1),&(bi->c2)); - add_to_active(bi); - } -#else - if (next_pc_p+extra_len>=max_pcp && - next_pc_p+extra_lenlen=max_pcp-min_pcp; - bi->min_pcp=min_pcp; - - remove_from_list(bi); - if (isinrom(min_pcp) && isinrom(max_pcp)) { - add_to_dormant(bi); /* No need to checksum it on cache flush. - Please don't start changing ROMs in - flight! */ - } - else { - calc_checksum(bi,&(bi->c1),&(bi->c2)); - add_to_active(bi); - } -#endif - - current_cache_size += JITPTR get_target() - JITPTR current_compile_p; - -#ifdef JIT_DEBUG - bi->direct_handler_size = get_target() - (uae_u8 *)current_block_start_target; - - if (JITDebug && disasm_block) { - uaecptr block_addr = start_pc + ((char *)pc_hist[0].location - (char *)start_pc_p); - jit_log("M68K block @ 0x%08x (%d insns)", block_addr, blocklen); - uae_u32 block_size = ((uae_u8 *)pc_hist[blocklen - 1].location - (uae_u8 *)pc_hist[0].location) + 1; -#ifdef WINUAE_ARANYM - disasm_m68k_block((const uae_u8 *)pc_hist[0].location, block_size); -#endif - jit_log("Compiled block @ %p", pc_hist[0].location); -#ifdef WINUAE_ARANYM - disasm_native_block((const uae_u8 *)current_block_start_target, bi->direct_handler_size); -#endif - UNUSED(block_addr); - } -#endif - - log_dump(); - align_target(align_jumps); - -#ifdef UAE -#ifdef USE_UDIS86 - UDISFN(current_block_start_target, target) -#endif -#endif - - /* This is the non-direct handler */ - bi->handler= - bi->handler_to_use=(cpuop_func *)get_target(); -#if X86_TARGET_64BIT - /* regs.pc_p is a 64-bit pointer - must compare all 8 bytes. - x86-64 has no CMP [mem], imm64, so load into scratch and CMP. */ - { - int r_tmp = REG_PC_TMP; - raw_mov_q_ri(r_tmp, (uintptr)pc_hist[0].location); - raw_cmp_q_mr((uintptr)®s.pc_p, r_tmp); - } -#else - compemu_raw_cmp_l_mi(JITPTR ®s.pc_p, JITPTR pc_hist[0].location); -#endif - compemu_raw_jnz(JITPTR popall_cache_miss); - comp_pc_p=(uae_u8*)pc_hist[0].location; - - bi->status=BI_FINALIZING; - init_comp(); - match_states(bi); - flush(1); - - compemu_raw_jmp(JITPTR bi->direct_handler); - - flush_cpu_icache((void *)current_block_start_target, (void *)target); - current_compile_p=get_target(); - raise_in_cl_list(bi); -#ifdef UAE - bi->nexthandler=current_compile_p; -#endif - - /* We will flush soon, anyway, so let's do it now */ - if (current_compile_p >= MAX_COMPILE_PTR) - flush_icache_hard(3); - - bi->status=BI_ACTIVE; - if (redo_current_block) - block_need_recompile(bi); - -#ifdef PROFILE_COMPILE_TIME - compile_time += (clock() - start_time); -#endif -#ifdef UAE - /* Account for compilation time */ - do_extra_cycles(totcycles); -#endif - } - -#ifdef USE_CPU_EMUL_SERVICES - /* Account for compilation time */ - cpu_do_check_ticks(); -#endif -} - -#ifdef UAE - /* Slightly different function defined in newcpu.cpp */ -#else -void do_nothing(void) -{ - /* What did you expect this to do? */ -} -#endif - -#ifdef UAE - /* Different implementation in newcpu.cpp */ -#else -void exec_nostats(void) -{ - for (;;) { - uae_u32 opcode = GET_OPCODE; -#ifdef FLIGHT_RECORDER - m68k_record_step(m68k_getpc(), cft_map(opcode)); -#endif - (*cpufunctbl[opcode])(opcode); - cpu_check_ticks(); - if (end_block(opcode) || SPCFLAGS_TEST(SPCFLAG_ALL)) { - return; /* We will deal with the spcflags in the caller */ - } - } -} -#endif - -#ifdef UAE -/* FIXME: check differences against UAE execute_normal (newcpu.cpp) */ -#else -void execute_normal(void) -{ - if (!check_for_cache_miss()) { - cpu_history pc_hist[MAXRUN]; - int blocklen = 0; -#if 0 && FIXED_ADDRESSING - start_pc_p = regs.pc_p; - start_pc = get_virtual_address(regs.pc_p); -#else - start_pc_p = regs.pc_oldp; - start_pc = regs.pc; -#endif - for (;;) { /* Take note: This is the do-it-normal loop */ - pc_hist[blocklen++].location = (uae_u16 *)regs.pc_p; - uae_u32 opcode = GET_OPCODE; -#ifdef FLIGHT_RECORDER - m68k_record_step(m68k_getpc(), cft_map(opcode)); -#endif - (*cpufunctbl[opcode])(opcode); - cpu_check_ticks(); - if (end_block(opcode) || SPCFLAGS_TEST(SPCFLAG_ALL) || blocklen>=MAXRUN) { - compile_block(pc_hist, blocklen); - return; /* We will deal with the spcflags in the caller */ - } - /* No need to check regs.spcflags, because if they were set, - we'd have ended up inside that "if" */ - } - } -} -#endif - -typedef void (*compiled_handler)(void); - -#ifdef UAE -/* FIXME: check differences against UAE m68k_do_compile_execute */ -#else -void m68k_do_compile_execute(void) -{ - for (;;) { - ((compiled_handler)(pushall_call_handler))(); - /* Whenever we return from that, we should check spcflags */ - if (SPCFLAGS_TEST(SPCFLAG_ALL)) { - if (m68k_do_specialties ()) - return; - } - } -} -#endif - -#ifdef UAE -/* FIXME: check differences against UAE m68k_compile_execute */ -#else -void m68k_compile_execute (void) -{ -setjmpagain: - TRY(prb) { - for (;;) { - if (quit_program > 0) { - if (quit_program == 1) { -#ifdef FLIGHT_RECORDER - dump_flight_recorder(); -#endif - break; - } - quit_program = 0; - m68k_reset (); - } - m68k_do_compile_execute(); - } - } - CATCH(prb) { - jit_log("m68k_compile_execute: exception %d pc=%08x (%08x+%p-%p) fault_pc=%08x addr=%08x -> %08x sp=%08x", - int(prb), - m68k_getpc(), - regs.pc, regs.pc_p, regs.pc_oldp, - regs.fault_pc, - regs.mmu_fault_addr, get_long (regs.vbr + 4*prb), - regs.regs[15]); - flush_icache(); - Exception(prb, 0); - goto setjmpagain; - } -} -#endif - -#endif /* JIT */ - -#endif /* CPU_AARCH64 */ diff --git a/jit/compstbl.cpp b/jit/compstbl.cpp index f24b1357..a46da3fc 100644 --- a/jit/compstbl.cpp +++ b/jit/compstbl.cpp @@ -1,3762 +1,7 @@ -#if defined(CPU_AARCH64) || defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#if defined(CPU_arm) || defined(CPU_AARCH64) || defined(__aarch64__) || \ + defined(_M_ARM64) || defined(_M_ARM64EC) #include "arm/compstbl_arm.cpp" -#else -#include "sysconfig.h" -#if defined(JIT) -#include "sysdeps.h" -#include "options.h" -#include "uae/memory.h" -#include "readcpu.h" -#include "newcpu.h" -#include "comptbl.h" -#include "debug.h" -const struct comptbl op_smalltbl_0_comp_ff[] = { -{ op_0_0_comp_ff, 0, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_10_0_comp_ff, 16, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_18_0_comp_ff, 24, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_20_0_comp_ff, 32, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_28_0_comp_ff, 40, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_30_0_comp_ff, 48, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_38_0_comp_ff, 56, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_39_0_comp_ff, 57, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 60, COMP_OPCODE_ISJUMP }, /* ORSR */ -{ op_40_0_comp_ff, 64, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_50_0_comp_ff, 80, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_58_0_comp_ff, 88, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_60_0_comp_ff, 96, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_68_0_comp_ff, 104, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_70_0_comp_ff, 112, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_78_0_comp_ff, 120, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_79_0_comp_ff, 121, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 124, COMP_OPCODE_ISJUMP }, /* ORSR */ -{ op_80_0_comp_ff, 128, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_90_0_comp_ff, 144, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_98_0_comp_ff, 152, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_a0_0_comp_ff, 160, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_a8_0_comp_ff, 168, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_b0_0_comp_ff, 176, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_b8_0_comp_ff, 184, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_b9_0_comp_ff, 185, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 208, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 232, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 240, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 248, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 249, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 250, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 251, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ op_100_0_comp_ff, 256, 0 }, /* BTST */ -{ NULL, 264, COMP_OPCODE_ISJUMP }, /* MVPMR */ -{ op_110_0_comp_ff, 272, 0 }, /* BTST */ -{ op_118_0_comp_ff, 280, 0 }, /* BTST */ -{ op_120_0_comp_ff, 288, 0 }, /* BTST */ -{ op_128_0_comp_ff, 296, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_130_0_comp_ff, 304, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_138_0_comp_ff, 312, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_139_0_comp_ff, 313, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_13a_0_comp_ff, 314, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_13b_0_comp_ff, 315, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_13c_0_comp_ff, 316, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_140_0_comp_ff, 320, 0 }, /* BCHG */ -{ NULL, 328, COMP_OPCODE_ISJUMP }, /* MVPMR */ -{ op_150_0_comp_ff, 336, 0 }, /* BCHG */ -{ op_158_0_comp_ff, 344, 0 }, /* BCHG */ -{ op_160_0_comp_ff, 352, 0 }, /* BCHG */ -{ op_168_0_comp_ff, 360, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_170_0_comp_ff, 368, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_178_0_comp_ff, 376, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_179_0_comp_ff, 377, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_180_0_comp_ff, 384, 0 }, /* BCLR */ -{ NULL, 392, COMP_OPCODE_ISJUMP }, /* MVPRM */ -{ op_190_0_comp_ff, 400, 0 }, /* BCLR */ -{ op_198_0_comp_ff, 408, 0 }, /* BCLR */ -{ op_1a0_0_comp_ff, 416, 0 }, /* BCLR */ -{ op_1a8_0_comp_ff, 424, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_1b0_0_comp_ff, 432, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_1b8_0_comp_ff, 440, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_1b9_0_comp_ff, 441, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_1c0_0_comp_ff, 448, 0 }, /* BSET */ -{ NULL, 456, COMP_OPCODE_ISJUMP }, /* MVPRM */ -{ op_1d0_0_comp_ff, 464, 0 }, /* BSET */ -{ op_1d8_0_comp_ff, 472, 0 }, /* BSET */ -{ op_1e0_0_comp_ff, 480, 0 }, /* BSET */ -{ op_1e8_0_comp_ff, 488, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_1f0_0_comp_ff, 496, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_1f8_0_comp_ff, 504, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_1f9_0_comp_ff, 505, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_200_0_comp_ff, 512, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_210_0_comp_ff, 528, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_218_0_comp_ff, 536, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_220_0_comp_ff, 544, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_228_0_comp_ff, 552, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_230_0_comp_ff, 560, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_238_0_comp_ff, 568, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_239_0_comp_ff, 569, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ NULL, 572, COMP_OPCODE_ISJUMP }, /* ANDSR */ -{ op_240_0_comp_ff, 576, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_250_0_comp_ff, 592, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_258_0_comp_ff, 600, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_260_0_comp_ff, 608, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_268_0_comp_ff, 616, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_270_0_comp_ff, 624, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_278_0_comp_ff, 632, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_279_0_comp_ff, 633, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ NULL, 636, COMP_OPCODE_ISJUMP }, /* ANDSR */ -{ op_280_0_comp_ff, 640, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_290_0_comp_ff, 656, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_298_0_comp_ff, 664, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_2a0_0_comp_ff, 672, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_2a8_0_comp_ff, 680, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_2b0_0_comp_ff, 688, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_2b8_0_comp_ff, 696, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_2b9_0_comp_ff, 697, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ NULL, 720, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 744, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 752, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 760, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 761, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 762, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 763, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ op_400_0_comp_ff, 1024, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_410_0_comp_ff, 1040, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_418_0_comp_ff, 1048, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_420_0_comp_ff, 1056, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_428_0_comp_ff, 1064, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_430_0_comp_ff, 1072, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_438_0_comp_ff, 1080, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_439_0_comp_ff, 1081, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_440_0_comp_ff, 1088, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_450_0_comp_ff, 1104, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_458_0_comp_ff, 1112, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_460_0_comp_ff, 1120, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_468_0_comp_ff, 1128, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_470_0_comp_ff, 1136, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_478_0_comp_ff, 1144, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_479_0_comp_ff, 1145, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_480_0_comp_ff, 1152, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_490_0_comp_ff, 1168, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_498_0_comp_ff, 1176, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_4a0_0_comp_ff, 1184, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_4a8_0_comp_ff, 1192, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_4b0_0_comp_ff, 1200, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_4b8_0_comp_ff, 1208, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_4b9_0_comp_ff, 1209, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ NULL, 1232, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1256, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1264, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1272, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1273, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1274, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1275, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ op_600_0_comp_ff, 1536, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_610_0_comp_ff, 1552, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_618_0_comp_ff, 1560, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_620_0_comp_ff, 1568, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_628_0_comp_ff, 1576, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_630_0_comp_ff, 1584, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_638_0_comp_ff, 1592, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_639_0_comp_ff, 1593, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_640_0_comp_ff, 1600, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_650_0_comp_ff, 1616, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_658_0_comp_ff, 1624, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_660_0_comp_ff, 1632, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_668_0_comp_ff, 1640, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_670_0_comp_ff, 1648, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_678_0_comp_ff, 1656, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_679_0_comp_ff, 1657, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_680_0_comp_ff, 1664, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_690_0_comp_ff, 1680, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_698_0_comp_ff, 1688, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_6a0_0_comp_ff, 1696, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_6a8_0_comp_ff, 1704, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_6b0_0_comp_ff, 1712, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_6b8_0_comp_ff, 1720, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_6b9_0_comp_ff, 1721, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ NULL, 1728, COMP_OPCODE_ISJUMP }, /* RTM */ -{ NULL, 1736, COMP_OPCODE_ISJUMP }, /* RTM */ -{ NULL, 1744, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1768, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1776, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1784, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1785, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1786, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1787, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ op_800_0_comp_ff, 2048, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_810_0_comp_ff, 2064, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_818_0_comp_ff, 2072, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_820_0_comp_ff, 2080, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_828_0_comp_ff, 2088, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_830_0_comp_ff, 2096, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_838_0_comp_ff, 2104, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_839_0_comp_ff, 2105, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_83a_0_comp_ff, 2106, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_83b_0_comp_ff, 2107, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_840_0_comp_ff, 2112, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_850_0_comp_ff, 2128, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_858_0_comp_ff, 2136, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_860_0_comp_ff, 2144, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_868_0_comp_ff, 2152, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_870_0_comp_ff, 2160, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_878_0_comp_ff, 2168, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_879_0_comp_ff, 2169, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_880_0_comp_ff, 2176, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_890_0_comp_ff, 2192, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_898_0_comp_ff, 2200, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8a0_0_comp_ff, 2208, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8a8_0_comp_ff, 2216, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8b0_0_comp_ff, 2224, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8b8_0_comp_ff, 2232, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8b9_0_comp_ff, 2233, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8c0_0_comp_ff, 2240, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8d0_0_comp_ff, 2256, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8d8_0_comp_ff, 2264, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8e0_0_comp_ff, 2272, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8e8_0_comp_ff, 2280, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8f0_0_comp_ff, 2288, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8f8_0_comp_ff, 2296, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8f9_0_comp_ff, 2297, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_a00_0_comp_ff, 2560, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a10_0_comp_ff, 2576, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a18_0_comp_ff, 2584, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a20_0_comp_ff, 2592, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a28_0_comp_ff, 2600, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a30_0_comp_ff, 2608, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a38_0_comp_ff, 2616, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a39_0_comp_ff, 2617, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ NULL, 2620, COMP_OPCODE_ISJUMP }, /* EORSR */ -{ op_a40_0_comp_ff, 2624, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a50_0_comp_ff, 2640, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a58_0_comp_ff, 2648, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a60_0_comp_ff, 2656, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a68_0_comp_ff, 2664, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a70_0_comp_ff, 2672, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a78_0_comp_ff, 2680, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a79_0_comp_ff, 2681, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ NULL, 2684, COMP_OPCODE_ISJUMP }, /* EORSR */ -{ op_a80_0_comp_ff, 2688, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a90_0_comp_ff, 2704, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a98_0_comp_ff, 2712, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_aa0_0_comp_ff, 2720, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_aa8_0_comp_ff, 2728, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_ab0_0_comp_ff, 2736, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_ab8_0_comp_ff, 2744, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_ab9_0_comp_ff, 2745, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ NULL, 2768, 0 }, /* CAS */ -{ NULL, 2776, 0 }, /* CAS */ -{ NULL, 2784, 0 }, /* CAS */ -{ NULL, 2792, 0 }, /* CAS */ -{ NULL, 2800, 0 }, /* CAS */ -{ NULL, 2808, 0 }, /* CAS */ -{ NULL, 2809, 0 }, /* CAS */ -{ op_c00_0_comp_ff, 3072, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c10_0_comp_ff, 3088, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c18_0_comp_ff, 3096, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c20_0_comp_ff, 3104, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c28_0_comp_ff, 3112, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c30_0_comp_ff, 3120, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c38_0_comp_ff, 3128, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c39_0_comp_ff, 3129, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c3a_0_comp_ff, 3130, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c3b_0_comp_ff, 3131, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c40_0_comp_ff, 3136, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c50_0_comp_ff, 3152, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c58_0_comp_ff, 3160, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c60_0_comp_ff, 3168, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c68_0_comp_ff, 3176, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c70_0_comp_ff, 3184, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c78_0_comp_ff, 3192, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c79_0_comp_ff, 3193, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c7a_0_comp_ff, 3194, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c7b_0_comp_ff, 3195, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c80_0_comp_ff, 3200, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c90_0_comp_ff, 3216, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c98_0_comp_ff, 3224, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_ca0_0_comp_ff, 3232, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_ca8_0_comp_ff, 3240, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_cb0_0_comp_ff, 3248, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_cb8_0_comp_ff, 3256, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_cb9_0_comp_ff, 3257, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_cba_0_comp_ff, 3258, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_cbb_0_comp_ff, 3259, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ NULL, 3280, 0 }, /* CAS */ -{ NULL, 3288, 0 }, /* CAS */ -{ NULL, 3296, 0 }, /* CAS */ -{ NULL, 3304, 0 }, /* CAS */ -{ NULL, 3312, 0 }, /* CAS */ -{ NULL, 3320, 0 }, /* CAS */ -{ NULL, 3321, 0 }, /* CAS */ -{ NULL, 3324, 0 }, /* CAS2 */ -{ NULL, 3600, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3608, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3616, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3624, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3632, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3640, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3641, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3664, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3672, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3680, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3688, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3696, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3704, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3705, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3728, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3736, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3744, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3752, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3760, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3768, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3769, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3792, 0 }, /* CAS */ -{ NULL, 3800, 0 }, /* CAS */ -{ NULL, 3808, 0 }, /* CAS */ -{ NULL, 3816, 0 }, /* CAS */ -{ NULL, 3824, 0 }, /* CAS */ -{ NULL, 3832, 0 }, /* CAS */ -{ NULL, 3833, 0 }, /* CAS */ -{ NULL, 3836, 0 }, /* CAS2 */ -{ op_1000_0_comp_ff, 4096, 0 }, /* MOVE */ -{ op_1010_0_comp_ff, 4112, 0 }, /* MOVE */ -{ op_1018_0_comp_ff, 4120, 0 }, /* MOVE */ -{ op_1020_0_comp_ff, 4128, 0 }, /* MOVE */ -{ op_1028_0_comp_ff, 4136, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1030_0_comp_ff, 4144, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1038_0_comp_ff, 4152, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1039_0_comp_ff, 4153, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_103a_0_comp_ff, 4154, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_103b_0_comp_ff, 4155, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_103c_0_comp_ff, 4156, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1080_0_comp_ff, 4224, 0 }, /* MOVE */ -{ op_1090_0_comp_ff, 4240, 0 }, /* MOVE */ -{ op_1098_0_comp_ff, 4248, 0 }, /* MOVE */ -{ op_10a0_0_comp_ff, 4256, 0 }, /* MOVE */ -{ op_10a8_0_comp_ff, 4264, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10b0_0_comp_ff, 4272, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10b8_0_comp_ff, 4280, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10b9_0_comp_ff, 4281, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10ba_0_comp_ff, 4282, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10bb_0_comp_ff, 4283, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10bc_0_comp_ff, 4284, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10c0_0_comp_ff, 4288, 0 }, /* MOVE */ -{ op_10d0_0_comp_ff, 4304, 0 }, /* MOVE */ -{ op_10d8_0_comp_ff, 4312, 0 }, /* MOVE */ -{ op_10e0_0_comp_ff, 4320, 0 }, /* MOVE */ -{ op_10e8_0_comp_ff, 4328, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10f0_0_comp_ff, 4336, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10f8_0_comp_ff, 4344, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10f9_0_comp_ff, 4345, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10fa_0_comp_ff, 4346, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10fb_0_comp_ff, 4347, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10fc_0_comp_ff, 4348, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1100_0_comp_ff, 4352, 0 }, /* MOVE */ -{ op_1110_0_comp_ff, 4368, 0 }, /* MOVE */ -{ op_1118_0_comp_ff, 4376, 0 }, /* MOVE */ -{ op_1120_0_comp_ff, 4384, 0 }, /* MOVE */ -{ op_1128_0_comp_ff, 4392, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1130_0_comp_ff, 4400, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1138_0_comp_ff, 4408, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1139_0_comp_ff, 4409, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_113a_0_comp_ff, 4410, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_113b_0_comp_ff, 4411, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_113c_0_comp_ff, 4412, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1140_0_comp_ff, 4416, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1150_0_comp_ff, 4432, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1158_0_comp_ff, 4440, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1160_0_comp_ff, 4448, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1168_0_comp_ff, 4456, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1170_0_comp_ff, 4464, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1178_0_comp_ff, 4472, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1179_0_comp_ff, 4473, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_117a_0_comp_ff, 4474, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_117b_0_comp_ff, 4475, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_117c_0_comp_ff, 4476, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1180_0_comp_ff, 4480, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1190_0_comp_ff, 4496, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1198_0_comp_ff, 4504, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11a0_0_comp_ff, 4512, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11a8_0_comp_ff, 4520, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11b0_0_comp_ff, 4528, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11b8_0_comp_ff, 4536, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11b9_0_comp_ff, 4537, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11ba_0_comp_ff, 4538, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11bb_0_comp_ff, 4539, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11bc_0_comp_ff, 4540, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11c0_0_comp_ff, 4544, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11d0_0_comp_ff, 4560, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11d8_0_comp_ff, 4568, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11e0_0_comp_ff, 4576, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11e8_0_comp_ff, 4584, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11f0_0_comp_ff, 4592, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11f8_0_comp_ff, 4600, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11f9_0_comp_ff, 4601, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11fa_0_comp_ff, 4602, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11fb_0_comp_ff, 4603, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11fc_0_comp_ff, 4604, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13c0_0_comp_ff, 5056, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13d0_0_comp_ff, 5072, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13d8_0_comp_ff, 5080, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13e0_0_comp_ff, 5088, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13e8_0_comp_ff, 5096, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13f0_0_comp_ff, 5104, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13f8_0_comp_ff, 5112, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13f9_0_comp_ff, 5113, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13fa_0_comp_ff, 5114, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13fb_0_comp_ff, 5115, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13fc_0_comp_ff, 5116, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2000_0_comp_ff, 8192, 0 }, /* MOVE */ -{ op_2008_0_comp_ff, 8200, 0 }, /* MOVE */ -{ op_2010_0_comp_ff, 8208, 0 }, /* MOVE */ -{ op_2018_0_comp_ff, 8216, 0 }, /* MOVE */ -{ op_2020_0_comp_ff, 8224, 0 }, /* MOVE */ -{ op_2028_0_comp_ff, 8232, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2030_0_comp_ff, 8240, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2038_0_comp_ff, 8248, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2039_0_comp_ff, 8249, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_203a_0_comp_ff, 8250, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_203b_0_comp_ff, 8251, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_203c_0_comp_ff, 8252, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2040_0_comp_ff, 8256, 0 }, /* MOVEA */ -{ op_2048_0_comp_ff, 8264, 0 }, /* MOVEA */ -{ op_2050_0_comp_ff, 8272, 0 }, /* MOVEA */ -{ op_2058_0_comp_ff, 8280, 0 }, /* MOVEA */ -{ op_2060_0_comp_ff, 8288, 0 }, /* MOVEA */ -{ op_2068_0_comp_ff, 8296, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_2070_0_comp_ff, 8304, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_2078_0_comp_ff, 8312, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_2079_0_comp_ff, 8313, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_207a_0_comp_ff, 8314, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_207b_0_comp_ff, 8315, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_207c_0_comp_ff, 8316, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_2080_0_comp_ff, 8320, 0 }, /* MOVE */ -{ op_2088_0_comp_ff, 8328, 0 }, /* MOVE */ -{ op_2090_0_comp_ff, 8336, 0 }, /* MOVE */ -{ op_2098_0_comp_ff, 8344, 0 }, /* MOVE */ -{ op_20a0_0_comp_ff, 8352, 0 }, /* MOVE */ -{ op_20a8_0_comp_ff, 8360, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20b0_0_comp_ff, 8368, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20b8_0_comp_ff, 8376, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20b9_0_comp_ff, 8377, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20ba_0_comp_ff, 8378, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20bb_0_comp_ff, 8379, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20bc_0_comp_ff, 8380, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20c0_0_comp_ff, 8384, 0 }, /* MOVE */ -{ op_20c8_0_comp_ff, 8392, 0 }, /* MOVE */ -{ op_20d0_0_comp_ff, 8400, 0 }, /* MOVE */ -{ op_20d8_0_comp_ff, 8408, 0 }, /* MOVE */ -{ op_20e0_0_comp_ff, 8416, 0 }, /* MOVE */ -{ op_20e8_0_comp_ff, 8424, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20f0_0_comp_ff, 8432, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20f8_0_comp_ff, 8440, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20f9_0_comp_ff, 8441, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20fa_0_comp_ff, 8442, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20fb_0_comp_ff, 8443, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20fc_0_comp_ff, 8444, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2100_0_comp_ff, 8448, 0 }, /* MOVE */ -{ op_2108_0_comp_ff, 8456, 0 }, /* MOVE */ -{ op_2110_0_comp_ff, 8464, 0 }, /* MOVE */ -{ op_2118_0_comp_ff, 8472, 0 }, /* MOVE */ -{ op_2120_0_comp_ff, 8480, 0 }, /* MOVE */ -{ op_2128_0_comp_ff, 8488, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2130_0_comp_ff, 8496, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2138_0_comp_ff, 8504, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2139_0_comp_ff, 8505, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_213a_0_comp_ff, 8506, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_213b_0_comp_ff, 8507, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_213c_0_comp_ff, 8508, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2140_0_comp_ff, 8512, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2148_0_comp_ff, 8520, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2150_0_comp_ff, 8528, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2158_0_comp_ff, 8536, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2160_0_comp_ff, 8544, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2168_0_comp_ff, 8552, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2170_0_comp_ff, 8560, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2178_0_comp_ff, 8568, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2179_0_comp_ff, 8569, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_217a_0_comp_ff, 8570, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_217b_0_comp_ff, 8571, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_217c_0_comp_ff, 8572, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2180_0_comp_ff, 8576, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2188_0_comp_ff, 8584, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2190_0_comp_ff, 8592, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2198_0_comp_ff, 8600, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21a0_0_comp_ff, 8608, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21a8_0_comp_ff, 8616, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21b0_0_comp_ff, 8624, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21b8_0_comp_ff, 8632, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21b9_0_comp_ff, 8633, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21ba_0_comp_ff, 8634, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21bb_0_comp_ff, 8635, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21bc_0_comp_ff, 8636, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21c0_0_comp_ff, 8640, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21c8_0_comp_ff, 8648, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21d0_0_comp_ff, 8656, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21d8_0_comp_ff, 8664, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21e0_0_comp_ff, 8672, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21e8_0_comp_ff, 8680, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21f0_0_comp_ff, 8688, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21f8_0_comp_ff, 8696, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21f9_0_comp_ff, 8697, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21fa_0_comp_ff, 8698, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21fb_0_comp_ff, 8699, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21fc_0_comp_ff, 8700, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23c0_0_comp_ff, 9152, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23c8_0_comp_ff, 9160, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23d0_0_comp_ff, 9168, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23d8_0_comp_ff, 9176, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23e0_0_comp_ff, 9184, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23e8_0_comp_ff, 9192, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23f0_0_comp_ff, 9200, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23f8_0_comp_ff, 9208, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23f9_0_comp_ff, 9209, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23fa_0_comp_ff, 9210, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23fb_0_comp_ff, 9211, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23fc_0_comp_ff, 9212, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3000_0_comp_ff, 12288, 0 }, /* MOVE */ -{ op_3008_0_comp_ff, 12296, 0 }, /* MOVE */ -{ op_3010_0_comp_ff, 12304, 0 }, /* MOVE */ -{ op_3018_0_comp_ff, 12312, 0 }, /* MOVE */ -{ op_3020_0_comp_ff, 12320, 0 }, /* MOVE */ -{ op_3028_0_comp_ff, 12328, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3030_0_comp_ff, 12336, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3038_0_comp_ff, 12344, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3039_0_comp_ff, 12345, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_303a_0_comp_ff, 12346, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_303b_0_comp_ff, 12347, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_303c_0_comp_ff, 12348, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3040_0_comp_ff, 12352, 0 }, /* MOVEA */ -{ op_3048_0_comp_ff, 12360, 0 }, /* MOVEA */ -{ op_3050_0_comp_ff, 12368, 0 }, /* MOVEA */ -{ op_3058_0_comp_ff, 12376, 0 }, /* MOVEA */ -{ op_3060_0_comp_ff, 12384, 0 }, /* MOVEA */ -{ op_3068_0_comp_ff, 12392, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_3070_0_comp_ff, 12400, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_3078_0_comp_ff, 12408, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_3079_0_comp_ff, 12409, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_307a_0_comp_ff, 12410, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_307b_0_comp_ff, 12411, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_307c_0_comp_ff, 12412, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_3080_0_comp_ff, 12416, 0 }, /* MOVE */ -{ op_3088_0_comp_ff, 12424, 0 }, /* MOVE */ -{ op_3090_0_comp_ff, 12432, 0 }, /* MOVE */ -{ op_3098_0_comp_ff, 12440, 0 }, /* MOVE */ -{ op_30a0_0_comp_ff, 12448, 0 }, /* MOVE */ -{ op_30a8_0_comp_ff, 12456, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30b0_0_comp_ff, 12464, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30b8_0_comp_ff, 12472, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30b9_0_comp_ff, 12473, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30ba_0_comp_ff, 12474, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30bb_0_comp_ff, 12475, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30bc_0_comp_ff, 12476, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30c0_0_comp_ff, 12480, 0 }, /* MOVE */ -{ op_30c8_0_comp_ff, 12488, 0 }, /* MOVE */ -{ op_30d0_0_comp_ff, 12496, 0 }, /* MOVE */ -{ op_30d8_0_comp_ff, 12504, 0 }, /* MOVE */ -{ op_30e0_0_comp_ff, 12512, 0 }, /* MOVE */ -{ op_30e8_0_comp_ff, 12520, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30f0_0_comp_ff, 12528, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30f8_0_comp_ff, 12536, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30f9_0_comp_ff, 12537, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30fa_0_comp_ff, 12538, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30fb_0_comp_ff, 12539, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30fc_0_comp_ff, 12540, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3100_0_comp_ff, 12544, 0 }, /* MOVE */ -{ op_3108_0_comp_ff, 12552, 0 }, /* MOVE */ -{ op_3110_0_comp_ff, 12560, 0 }, /* MOVE */ -{ op_3118_0_comp_ff, 12568, 0 }, /* MOVE */ -{ op_3120_0_comp_ff, 12576, 0 }, /* MOVE */ -{ op_3128_0_comp_ff, 12584, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3130_0_comp_ff, 12592, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3138_0_comp_ff, 12600, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3139_0_comp_ff, 12601, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_313a_0_comp_ff, 12602, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_313b_0_comp_ff, 12603, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_313c_0_comp_ff, 12604, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3140_0_comp_ff, 12608, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3148_0_comp_ff, 12616, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3150_0_comp_ff, 12624, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3158_0_comp_ff, 12632, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3160_0_comp_ff, 12640, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3168_0_comp_ff, 12648, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3170_0_comp_ff, 12656, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3178_0_comp_ff, 12664, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3179_0_comp_ff, 12665, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_317a_0_comp_ff, 12666, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_317b_0_comp_ff, 12667, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_317c_0_comp_ff, 12668, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3180_0_comp_ff, 12672, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3188_0_comp_ff, 12680, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3190_0_comp_ff, 12688, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3198_0_comp_ff, 12696, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31a0_0_comp_ff, 12704, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31a8_0_comp_ff, 12712, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31b0_0_comp_ff, 12720, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31b8_0_comp_ff, 12728, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31b9_0_comp_ff, 12729, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31ba_0_comp_ff, 12730, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31bb_0_comp_ff, 12731, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31bc_0_comp_ff, 12732, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31c0_0_comp_ff, 12736, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31c8_0_comp_ff, 12744, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31d0_0_comp_ff, 12752, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31d8_0_comp_ff, 12760, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31e0_0_comp_ff, 12768, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31e8_0_comp_ff, 12776, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31f0_0_comp_ff, 12784, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31f8_0_comp_ff, 12792, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31f9_0_comp_ff, 12793, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31fa_0_comp_ff, 12794, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31fb_0_comp_ff, 12795, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31fc_0_comp_ff, 12796, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33c0_0_comp_ff, 13248, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33c8_0_comp_ff, 13256, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33d0_0_comp_ff, 13264, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33d8_0_comp_ff, 13272, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33e0_0_comp_ff, 13280, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33e8_0_comp_ff, 13288, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33f0_0_comp_ff, 13296, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33f8_0_comp_ff, 13304, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33f9_0_comp_ff, 13305, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33fa_0_comp_ff, 13306, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33fb_0_comp_ff, 13307, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33fc_0_comp_ff, 13308, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_4000_0_comp_ff, 16384, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4010_0_comp_ff, 16400, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4018_0_comp_ff, 16408, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4020_0_comp_ff, 16416, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4028_0_comp_ff, 16424, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4030_0_comp_ff, 16432, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4038_0_comp_ff, 16440, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4039_0_comp_ff, 16441, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4040_0_comp_ff, 16448, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4050_0_comp_ff, 16464, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4058_0_comp_ff, 16472, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4060_0_comp_ff, 16480, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4068_0_comp_ff, 16488, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4070_0_comp_ff, 16496, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4078_0_comp_ff, 16504, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4079_0_comp_ff, 16505, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4080_0_comp_ff, 16512, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4090_0_comp_ff, 16528, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4098_0_comp_ff, 16536, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_40a0_0_comp_ff, 16544, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_40a8_0_comp_ff, 16552, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_40b0_0_comp_ff, 16560, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_40b8_0_comp_ff, 16568, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_40b9_0_comp_ff, 16569, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* NEGX */ -{ NULL, 16576, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16592, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16600, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16608, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16616, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16624, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16632, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16633, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16640, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16656, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16664, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16672, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16680, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16688, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16696, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16697, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16698, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16699, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16700, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16768, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16784, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16792, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16800, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16808, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16816, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16824, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16825, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16826, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16827, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16828, COMP_OPCODE_ISJUMP }, /* CHK */ -{ op_41d0_0_comp_ff, 16848, 0 }, /* LEA */ -{ op_41e8_0_comp_ff, 16872, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_41f0_0_comp_ff, 16880, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_41f8_0_comp_ff, 16888, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_41f9_0_comp_ff, 16889, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_41fa_0_comp_ff, 16890, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_41fb_0_comp_ff, 16891, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_4200_0_comp_ff, 16896, 0 }, /* CLR */ -{ op_4210_0_comp_ff, 16912, 0 }, /* CLR */ -{ op_4218_0_comp_ff, 16920, 0 }, /* CLR */ -{ op_4220_0_comp_ff, 16928, 0 }, /* CLR */ -{ op_4228_0_comp_ff, 16936, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4230_0_comp_ff, 16944, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4238_0_comp_ff, 16952, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4239_0_comp_ff, 16953, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4240_0_comp_ff, 16960, 0 }, /* CLR */ -{ op_4250_0_comp_ff, 16976, 0 }, /* CLR */ -{ op_4258_0_comp_ff, 16984, 0 }, /* CLR */ -{ op_4260_0_comp_ff, 16992, 0 }, /* CLR */ -{ op_4268_0_comp_ff, 17000, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4270_0_comp_ff, 17008, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4278_0_comp_ff, 17016, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4279_0_comp_ff, 17017, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4280_0_comp_ff, 17024, 0 }, /* CLR */ -{ op_4290_0_comp_ff, 17040, 0 }, /* CLR */ -{ op_4298_0_comp_ff, 17048, 0 }, /* CLR */ -{ op_42a0_0_comp_ff, 17056, 0 }, /* CLR */ -{ op_42a8_0_comp_ff, 17064, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_42b0_0_comp_ff, 17072, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_42b8_0_comp_ff, 17080, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_42b9_0_comp_ff, 17081, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ NULL, 17088, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17104, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17112, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17120, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17128, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17136, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17144, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17145, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ op_4400_0_comp_ff, 17408, 0 }, /* NEG */ -{ op_4410_0_comp_ff, 17424, 0 }, /* NEG */ -{ op_4418_0_comp_ff, 17432, 0 }, /* NEG */ -{ op_4420_0_comp_ff, 17440, 0 }, /* NEG */ -{ op_4428_0_comp_ff, 17448, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4430_0_comp_ff, 17456, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4438_0_comp_ff, 17464, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4439_0_comp_ff, 17465, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4440_0_comp_ff, 17472, 0 }, /* NEG */ -{ op_4450_0_comp_ff, 17488, 0 }, /* NEG */ -{ op_4458_0_comp_ff, 17496, 0 }, /* NEG */ -{ op_4460_0_comp_ff, 17504, 0 }, /* NEG */ -{ op_4468_0_comp_ff, 17512, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4470_0_comp_ff, 17520, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4478_0_comp_ff, 17528, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4479_0_comp_ff, 17529, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4480_0_comp_ff, 17536, 0 }, /* NEG */ -{ op_4490_0_comp_ff, 17552, 0 }, /* NEG */ -{ op_4498_0_comp_ff, 17560, 0 }, /* NEG */ -{ op_44a0_0_comp_ff, 17568, 0 }, /* NEG */ -{ op_44a8_0_comp_ff, 17576, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_44b0_0_comp_ff, 17584, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_44b8_0_comp_ff, 17592, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_44b9_0_comp_ff, 17593, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ NULL, 17600, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17616, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17624, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17632, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17640, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17648, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17656, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17657, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17658, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17659, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17660, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ op_4600_0_comp_ff, 17920, 0 }, /* NOT */ -{ op_4610_0_comp_ff, 17936, 0 }, /* NOT */ -{ op_4618_0_comp_ff, 17944, 0 }, /* NOT */ -{ op_4620_0_comp_ff, 17952, 0 }, /* NOT */ -{ op_4628_0_comp_ff, 17960, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4630_0_comp_ff, 17968, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4638_0_comp_ff, 17976, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4639_0_comp_ff, 17977, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4640_0_comp_ff, 17984, 0 }, /* NOT */ -{ op_4650_0_comp_ff, 18000, 0 }, /* NOT */ -{ op_4658_0_comp_ff, 18008, 0 }, /* NOT */ -{ op_4660_0_comp_ff, 18016, 0 }, /* NOT */ -{ op_4668_0_comp_ff, 18024, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4670_0_comp_ff, 18032, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4678_0_comp_ff, 18040, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4679_0_comp_ff, 18041, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4680_0_comp_ff, 18048, 0 }, /* NOT */ -{ op_4690_0_comp_ff, 18064, 0 }, /* NOT */ -{ op_4698_0_comp_ff, 18072, 0 }, /* NOT */ -{ op_46a0_0_comp_ff, 18080, 0 }, /* NOT */ -{ op_46a8_0_comp_ff, 18088, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_46b0_0_comp_ff, 18096, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_46b8_0_comp_ff, 18104, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_46b9_0_comp_ff, 18105, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ NULL, 18112, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18128, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18136, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18144, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18152, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18160, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18168, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18169, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18170, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18171, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18172, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18432, 0 }, /* NBCD */ -{ op_4808_0_comp_ff, 18440, COMP_OPCODE_LONG_OPCODE }, /* LINK */ -{ NULL, 18448, 0 }, /* NBCD */ -{ NULL, 18456, 0 }, /* NBCD */ -{ NULL, 18464, 0 }, /* NBCD */ -{ NULL, 18472, 0 }, /* NBCD */ -{ NULL, 18480, 0 }, /* NBCD */ -{ NULL, 18488, 0 }, /* NBCD */ -{ NULL, 18489, 0 }, /* NBCD */ -{ op_4840_0_comp_ff, 18496, 0 }, /* SWAP */ -{ NULL, 18504, COMP_OPCODE_ISJUMP }, /* BKPT */ -{ op_4850_0_comp_ff, 18512, 0 }, /* PEA */ -{ op_4868_0_comp_ff, 18536, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_4870_0_comp_ff, 18544, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_4878_0_comp_ff, 18552, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_4879_0_comp_ff, 18553, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_487a_0_comp_ff, 18554, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_487b_0_comp_ff, 18555, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_4880_0_comp_ff, 18560, 0 }, /* EXT */ -{ op_4890_0_comp_ff, 18576, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48a0_0_comp_ff, 18592, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48a8_0_comp_ff, 18600, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48b0_0_comp_ff, 18608, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48b8_0_comp_ff, 18616, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48b9_0_comp_ff, 18617, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48c0_0_comp_ff, 18624, 0 }, /* EXT */ -{ op_48d0_0_comp_ff, 18640, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48e0_0_comp_ff, 18656, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48e8_0_comp_ff, 18664, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48f0_0_comp_ff, 18672, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48f8_0_comp_ff, 18680, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48f9_0_comp_ff, 18681, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_49c0_0_comp_ff, 18880, 0 }, /* EXT */ -{ op_4a00_0_comp_ff, 18944, 0 }, /* TST */ -{ op_4a10_0_comp_ff, 18960, 0 }, /* TST */ -{ op_4a18_0_comp_ff, 18968, 0 }, /* TST */ -{ op_4a20_0_comp_ff, 18976, 0 }, /* TST */ -{ op_4a28_0_comp_ff, 18984, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a30_0_comp_ff, 18992, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a38_0_comp_ff, 19000, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a39_0_comp_ff, 19001, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a3a_0_comp_ff, 19002, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a3b_0_comp_ff, 19003, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a3c_0_comp_ff, 19004, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a40_0_comp_ff, 19008, 0 }, /* TST */ -{ op_4a48_0_comp_ff, 19016, 0 }, /* TST */ -{ op_4a50_0_comp_ff, 19024, 0 }, /* TST */ -{ op_4a58_0_comp_ff, 19032, 0 }, /* TST */ -{ op_4a60_0_comp_ff, 19040, 0 }, /* TST */ -{ op_4a68_0_comp_ff, 19048, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a70_0_comp_ff, 19056, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a78_0_comp_ff, 19064, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a79_0_comp_ff, 19065, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a7a_0_comp_ff, 19066, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a7b_0_comp_ff, 19067, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a7c_0_comp_ff, 19068, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a80_0_comp_ff, 19072, 0 }, /* TST */ -{ op_4a88_0_comp_ff, 19080, 0 }, /* TST */ -{ op_4a90_0_comp_ff, 19088, 0 }, /* TST */ -{ op_4a98_0_comp_ff, 19096, 0 }, /* TST */ -{ op_4aa0_0_comp_ff, 19104, 0 }, /* TST */ -{ op_4aa8_0_comp_ff, 19112, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4ab0_0_comp_ff, 19120, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4ab8_0_comp_ff, 19128, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4ab9_0_comp_ff, 19129, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4aba_0_comp_ff, 19130, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4abb_0_comp_ff, 19131, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4abc_0_comp_ff, 19132, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ NULL, 19136, 0 }, /* TAS */ -{ NULL, 19144, COMP_OPCODE_ISJUMP }, /* HALT */ -{ NULL, 19148, COMP_OPCODE_ISJUMP }, /* PULSE */ -{ NULL, 19152, 0 }, /* TAS */ -{ NULL, 19160, 0 }, /* TAS */ -{ NULL, 19168, 0 }, /* TAS */ -{ NULL, 19176, 0 }, /* TAS */ -{ NULL, 19184, 0 }, /* TAS */ -{ NULL, 19192, 0 }, /* TAS */ -{ NULL, 19193, 0 }, /* TAS */ -{ NULL, 19456, 0 }, /* MULL */ -{ NULL, 19472, 0 }, /* MULL */ -{ NULL, 19480, 0 }, /* MULL */ -{ NULL, 19488, 0 }, /* MULL */ -{ NULL, 19496, 0 }, /* MULL */ -{ NULL, 19504, 0 }, /* MULL */ -{ NULL, 19512, 0 }, /* MULL */ -{ NULL, 19513, 0 }, /* MULL */ -{ NULL, 19514, 0 }, /* MULL */ -{ NULL, 19515, 0 }, /* MULL */ -{ NULL, 19516, 0 }, /* MULL */ -{ NULL, 19520, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19536, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19544, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19552, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19560, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19568, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19576, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19577, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19578, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19579, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19580, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ op_4c90_0_comp_ff, 19600, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4c98_0_comp_ff, 19608, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4ca8_0_comp_ff, 19624, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cb0_0_comp_ff, 19632, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cb8_0_comp_ff, 19640, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cb9_0_comp_ff, 19641, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cba_0_comp_ff, 19642, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cbb_0_comp_ff, 19643, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cd0_0_comp_ff, 19664, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cd8_0_comp_ff, 19672, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4ce8_0_comp_ff, 19688, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cf0_0_comp_ff, 19696, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cf8_0_comp_ff, 19704, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cf9_0_comp_ff, 19705, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cfa_0_comp_ff, 19706, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cfb_0_comp_ff, 19707, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ NULL, 20032, COMP_OPCODE_ISJUMP }, /* TRAP */ -{ op_4e50_0_comp_ff, 20048, COMP_OPCODE_LONG_OPCODE }, /* LINK */ -{ op_4e58_0_comp_ff, 20056, 0 }, /* UNLK */ -{ NULL, 20064, COMP_OPCODE_ISJUMP }, /* MVR2USP */ -{ NULL, 20072, COMP_OPCODE_ISJUMP }, /* MVUSP2R */ -{ NULL, 20080, COMP_OPCODE_ISJUMP }, /* RESET */ -{ op_4e71_0_comp_ff, 20081, 0 }, /* NOP */ -{ NULL, 20082, COMP_OPCODE_ISJUMP }, /* STOP */ -{ NULL, 20083, COMP_OPCODE_ISJUMP }, /* RTE */ -{ op_4e74_0_comp_ff, 20084, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* RTD */ -{ op_4e75_0_comp_ff, 20085, COMP_OPCODE_ISJUMP }, /* RTS */ -{ NULL, 20086, COMP_OPCODE_ISJUMP }, /* TRAPV */ -{ NULL, 20087, COMP_OPCODE_ISJUMP }, /* RTR */ -{ NULL, 20090, COMP_OPCODE_ISJUMP }, /* MOVEC2 */ -{ NULL, 20091, COMP_OPCODE_ISJUMP }, /* MOVE2C */ -{ op_4e90_0_comp_ff, 20112, COMP_OPCODE_ISJUMP }, /* JSR */ -{ op_4ea8_0_comp_ff, 20136, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4eb0_0_comp_ff, 20144, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4eb8_0_comp_ff, 20152, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4eb9_0_comp_ff, 20153, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4eba_0_comp_ff, 20154, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4ebb_0_comp_ff, 20155, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4ed0_0_comp_ff, 20176, COMP_OPCODE_ISJUMP }, /* JMP */ -{ op_4ee8_0_comp_ff, 20200, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_4ef0_0_comp_ff, 20208, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_4ef8_0_comp_ff, 20216, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_4ef9_0_comp_ff, 20217, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_4efa_0_comp_ff, 20218, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_4efb_0_comp_ff, 20219, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_5000_0_comp_ff, 20480, 0 }, /* ADD */ -{ op_5010_0_comp_ff, 20496, 0 }, /* ADD */ -{ op_5018_0_comp_ff, 20504, 0 }, /* ADD */ -{ op_5020_0_comp_ff, 20512, 0 }, /* ADD */ -{ op_5028_0_comp_ff, 20520, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5030_0_comp_ff, 20528, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5038_0_comp_ff, 20536, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5039_0_comp_ff, 20537, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5040_0_comp_ff, 20544, 0 }, /* ADD */ -{ op_5048_0_comp_ff, 20552, 0 }, /* ADDA */ -{ op_5050_0_comp_ff, 20560, 0 }, /* ADD */ -{ op_5058_0_comp_ff, 20568, 0 }, /* ADD */ -{ op_5060_0_comp_ff, 20576, 0 }, /* ADD */ -{ op_5068_0_comp_ff, 20584, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5070_0_comp_ff, 20592, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5078_0_comp_ff, 20600, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5079_0_comp_ff, 20601, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5080_0_comp_ff, 20608, 0 }, /* ADD */ -{ op_5088_0_comp_ff, 20616, 0 }, /* ADDA */ -{ op_5090_0_comp_ff, 20624, 0 }, /* ADD */ -{ op_5098_0_comp_ff, 20632, 0 }, /* ADD */ -{ op_50a0_0_comp_ff, 20640, 0 }, /* ADD */ -{ op_50a8_0_comp_ff, 20648, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_50b0_0_comp_ff, 20656, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_50b8_0_comp_ff, 20664, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_50b9_0_comp_ff, 20665, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_50c0_0_comp_ff, 20672, 0 }, /* Scc */ -{ op_50c8_0_comp_ff, 20680, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_50d0_0_comp_ff, 20688, 0 }, /* Scc */ -{ op_50d8_0_comp_ff, 20696, 0 }, /* Scc */ -{ op_50e0_0_comp_ff, 20704, 0 }, /* Scc */ -{ op_50e8_0_comp_ff, 20712, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_50f0_0_comp_ff, 20720, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_50f8_0_comp_ff, 20728, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_50f9_0_comp_ff, 20729, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 20730, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 20731, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 20732, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5100_0_comp_ff, 20736, 0 }, /* SUB */ -{ op_5110_0_comp_ff, 20752, 0 }, /* SUB */ -{ op_5118_0_comp_ff, 20760, 0 }, /* SUB */ -{ op_5120_0_comp_ff, 20768, 0 }, /* SUB */ -{ op_5128_0_comp_ff, 20776, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5130_0_comp_ff, 20784, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5138_0_comp_ff, 20792, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5139_0_comp_ff, 20793, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5140_0_comp_ff, 20800, 0 }, /* SUB */ -{ op_5148_0_comp_ff, 20808, 0 }, /* SUBA */ -{ op_5150_0_comp_ff, 20816, 0 }, /* SUB */ -{ op_5158_0_comp_ff, 20824, 0 }, /* SUB */ -{ op_5160_0_comp_ff, 20832, 0 }, /* SUB */ -{ op_5168_0_comp_ff, 20840, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5170_0_comp_ff, 20848, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5178_0_comp_ff, 20856, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5179_0_comp_ff, 20857, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5180_0_comp_ff, 20864, 0 }, /* SUB */ -{ op_5188_0_comp_ff, 20872, 0 }, /* SUBA */ -{ op_5190_0_comp_ff, 20880, 0 }, /* SUB */ -{ op_5198_0_comp_ff, 20888, 0 }, /* SUB */ -{ op_51a0_0_comp_ff, 20896, 0 }, /* SUB */ -{ op_51a8_0_comp_ff, 20904, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_51b0_0_comp_ff, 20912, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_51b8_0_comp_ff, 20920, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_51b9_0_comp_ff, 20921, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_51c0_0_comp_ff, 20928, 0 }, /* Scc */ -{ op_51c8_0_comp_ff, 20936, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_51d0_0_comp_ff, 20944, 0 }, /* Scc */ -{ op_51d8_0_comp_ff, 20952, 0 }, /* Scc */ -{ op_51e0_0_comp_ff, 20960, 0 }, /* Scc */ -{ op_51e8_0_comp_ff, 20968, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_51f0_0_comp_ff, 20976, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_51f8_0_comp_ff, 20984, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_51f9_0_comp_ff, 20985, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 20986, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 20987, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 20988, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_52c0_0_comp_ff, 21184, 0 }, /* Scc */ -{ op_52c8_0_comp_ff, 21192, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_52d0_0_comp_ff, 21200, 0 }, /* Scc */ -{ op_52d8_0_comp_ff, 21208, 0 }, /* Scc */ -{ op_52e0_0_comp_ff, 21216, 0 }, /* Scc */ -{ op_52e8_0_comp_ff, 21224, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_52f0_0_comp_ff, 21232, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_52f8_0_comp_ff, 21240, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_52f9_0_comp_ff, 21241, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 21242, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21243, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21244, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_53c0_0_comp_ff, 21440, 0 }, /* Scc */ -{ op_53c8_0_comp_ff, 21448, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_53d0_0_comp_ff, 21456, 0 }, /* Scc */ -{ op_53d8_0_comp_ff, 21464, 0 }, /* Scc */ -{ op_53e0_0_comp_ff, 21472, 0 }, /* Scc */ -{ op_53e8_0_comp_ff, 21480, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_53f0_0_comp_ff, 21488, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_53f8_0_comp_ff, 21496, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_53f9_0_comp_ff, 21497, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 21498, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21499, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21500, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_54c0_0_comp_ff, 21696, 0 }, /* Scc */ -{ op_54c8_0_comp_ff, 21704, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_54d0_0_comp_ff, 21712, 0 }, /* Scc */ -{ op_54d8_0_comp_ff, 21720, 0 }, /* Scc */ -{ op_54e0_0_comp_ff, 21728, 0 }, /* Scc */ -{ op_54e8_0_comp_ff, 21736, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_54f0_0_comp_ff, 21744, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_54f8_0_comp_ff, 21752, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_54f9_0_comp_ff, 21753, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 21754, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21755, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21756, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_55c0_0_comp_ff, 21952, 0 }, /* Scc */ -{ op_55c8_0_comp_ff, 21960, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_55d0_0_comp_ff, 21968, 0 }, /* Scc */ -{ op_55d8_0_comp_ff, 21976, 0 }, /* Scc */ -{ op_55e0_0_comp_ff, 21984, 0 }, /* Scc */ -{ op_55e8_0_comp_ff, 21992, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_55f0_0_comp_ff, 22000, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_55f8_0_comp_ff, 22008, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_55f9_0_comp_ff, 22009, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22010, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22011, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22012, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_56c0_0_comp_ff, 22208, 0 }, /* Scc */ -{ op_56c8_0_comp_ff, 22216, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_56d0_0_comp_ff, 22224, 0 }, /* Scc */ -{ op_56d8_0_comp_ff, 22232, 0 }, /* Scc */ -{ op_56e0_0_comp_ff, 22240, 0 }, /* Scc */ -{ op_56e8_0_comp_ff, 22248, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_56f0_0_comp_ff, 22256, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_56f8_0_comp_ff, 22264, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_56f9_0_comp_ff, 22265, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22266, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22267, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22268, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_57c0_0_comp_ff, 22464, 0 }, /* Scc */ -{ op_57c8_0_comp_ff, 22472, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_57d0_0_comp_ff, 22480, 0 }, /* Scc */ -{ op_57d8_0_comp_ff, 22488, 0 }, /* Scc */ -{ op_57e0_0_comp_ff, 22496, 0 }, /* Scc */ -{ op_57e8_0_comp_ff, 22504, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_57f0_0_comp_ff, 22512, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_57f8_0_comp_ff, 22520, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_57f9_0_comp_ff, 22521, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22522, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22523, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22524, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22720, 0 }, /* Scc */ -{ NULL, 22728, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ NULL, 22736, 0 }, /* Scc */ -{ NULL, 22744, 0 }, /* Scc */ -{ NULL, 22752, 0 }, /* Scc */ -{ NULL, 22760, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22768, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22776, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22777, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22778, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22779, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22780, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22976, 0 }, /* Scc */ -{ NULL, 22984, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ NULL, 22992, 0 }, /* Scc */ -{ NULL, 23000, 0 }, /* Scc */ -{ NULL, 23008, 0 }, /* Scc */ -{ NULL, 23016, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23024, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23032, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23033, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23034, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23035, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23036, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5ac0_0_comp_ff, 23232, 0 }, /* Scc */ -{ op_5ac8_0_comp_ff, 23240, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5ad0_0_comp_ff, 23248, 0 }, /* Scc */ -{ op_5ad8_0_comp_ff, 23256, 0 }, /* Scc */ -{ op_5ae0_0_comp_ff, 23264, 0 }, /* Scc */ -{ op_5ae8_0_comp_ff, 23272, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5af0_0_comp_ff, 23280, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5af8_0_comp_ff, 23288, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5af9_0_comp_ff, 23289, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23290, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23291, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23292, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5bc0_0_comp_ff, 23488, 0 }, /* Scc */ -{ op_5bc8_0_comp_ff, 23496, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5bd0_0_comp_ff, 23504, 0 }, /* Scc */ -{ op_5bd8_0_comp_ff, 23512, 0 }, /* Scc */ -{ op_5be0_0_comp_ff, 23520, 0 }, /* Scc */ -{ op_5be8_0_comp_ff, 23528, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5bf0_0_comp_ff, 23536, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5bf8_0_comp_ff, 23544, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5bf9_0_comp_ff, 23545, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23546, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23547, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23548, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5cc0_0_comp_ff, 23744, 0 }, /* Scc */ -{ op_5cc8_0_comp_ff, 23752, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5cd0_0_comp_ff, 23760, 0 }, /* Scc */ -{ op_5cd8_0_comp_ff, 23768, 0 }, /* Scc */ -{ op_5ce0_0_comp_ff, 23776, 0 }, /* Scc */ -{ op_5ce8_0_comp_ff, 23784, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5cf0_0_comp_ff, 23792, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5cf8_0_comp_ff, 23800, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5cf9_0_comp_ff, 23801, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23802, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23803, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23804, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5dc0_0_comp_ff, 24000, 0 }, /* Scc */ -{ op_5dc8_0_comp_ff, 24008, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5dd0_0_comp_ff, 24016, 0 }, /* Scc */ -{ op_5dd8_0_comp_ff, 24024, 0 }, /* Scc */ -{ op_5de0_0_comp_ff, 24032, 0 }, /* Scc */ -{ op_5de8_0_comp_ff, 24040, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5df0_0_comp_ff, 24048, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5df8_0_comp_ff, 24056, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5df9_0_comp_ff, 24057, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 24058, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24059, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24060, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5ec0_0_comp_ff, 24256, 0 }, /* Scc */ -{ op_5ec8_0_comp_ff, 24264, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5ed0_0_comp_ff, 24272, 0 }, /* Scc */ -{ op_5ed8_0_comp_ff, 24280, 0 }, /* Scc */ -{ op_5ee0_0_comp_ff, 24288, 0 }, /* Scc */ -{ op_5ee8_0_comp_ff, 24296, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ef0_0_comp_ff, 24304, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ef8_0_comp_ff, 24312, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ef9_0_comp_ff, 24313, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 24314, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24315, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24316, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5fc0_0_comp_ff, 24512, 0 }, /* Scc */ -{ op_5fc8_0_comp_ff, 24520, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5fd0_0_comp_ff, 24528, 0 }, /* Scc */ -{ op_5fd8_0_comp_ff, 24536, 0 }, /* Scc */ -{ op_5fe0_0_comp_ff, 24544, 0 }, /* Scc */ -{ op_5fe8_0_comp_ff, 24552, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ff0_0_comp_ff, 24560, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ff8_0_comp_ff, 24568, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ff9_0_comp_ff, 24569, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 24570, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24571, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24572, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_6000_0_comp_ff, 24576, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISCJUMP }, /* Bcc */ -{ op_6001_0_comp_ff, 24577, COMP_OPCODE_ISCJUMP }, /* Bcc */ -{ op_60ff_0_comp_ff, 24831, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISCJUMP }, /* Bcc */ -{ op_6100_0_comp_ff, 24832, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISCJUMP }, /* BSR */ -{ op_6101_0_comp_ff, 24833, COMP_OPCODE_ISCJUMP }, /* BSR */ -{ op_61ff_0_comp_ff, 25087, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISCJUMP }, /* BSR */ -{ op_6200_0_comp_ff, 25088, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6201_0_comp_ff, 25089, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_62ff_0_comp_ff, 25343, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6300_0_comp_ff, 25344, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6301_0_comp_ff, 25345, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_63ff_0_comp_ff, 25599, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6400_0_comp_ff, 25600, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6401_0_comp_ff, 25601, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_64ff_0_comp_ff, 25855, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6500_0_comp_ff, 25856, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6501_0_comp_ff, 25857, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_65ff_0_comp_ff, 26111, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6600_0_comp_ff, 26112, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6601_0_comp_ff, 26113, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_66ff_0_comp_ff, 26367, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6700_0_comp_ff, 26368, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6701_0_comp_ff, 26369, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_67ff_0_comp_ff, 26623, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ NULL, 26624, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ NULL, 26625, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ NULL, 26879, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ NULL, 26880, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ NULL, 26881, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ NULL, 27135, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6a00_0_comp_ff, 27136, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6a01_0_comp_ff, 27137, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6aff_0_comp_ff, 27391, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6b00_0_comp_ff, 27392, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6b01_0_comp_ff, 27393, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6bff_0_comp_ff, 27647, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6c00_0_comp_ff, 27648, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6c01_0_comp_ff, 27649, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6cff_0_comp_ff, 27903, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6d00_0_comp_ff, 27904, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6d01_0_comp_ff, 27905, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6dff_0_comp_ff, 28159, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6e00_0_comp_ff, 28160, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6e01_0_comp_ff, 28161, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6eff_0_comp_ff, 28415, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6f00_0_comp_ff, 28416, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6f01_0_comp_ff, 28417, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6fff_0_comp_ff, 28671, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_7000_0_comp_ff, 28672, 0 }, /* MOVE */ -{ op_8000_0_comp_ff, 32768, 0 }, /* OR */ -{ op_8010_0_comp_ff, 32784, 0 }, /* OR */ -{ op_8018_0_comp_ff, 32792, 0 }, /* OR */ -{ op_8020_0_comp_ff, 32800, 0 }, /* OR */ -{ op_8028_0_comp_ff, 32808, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8030_0_comp_ff, 32816, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8038_0_comp_ff, 32824, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8039_0_comp_ff, 32825, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_803a_0_comp_ff, 32826, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_803b_0_comp_ff, 32827, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_803c_0_comp_ff, 32828, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8040_0_comp_ff, 32832, 0 }, /* OR */ -{ op_8050_0_comp_ff, 32848, 0 }, /* OR */ -{ op_8058_0_comp_ff, 32856, 0 }, /* OR */ -{ op_8060_0_comp_ff, 32864, 0 }, /* OR */ -{ op_8068_0_comp_ff, 32872, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8070_0_comp_ff, 32880, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8078_0_comp_ff, 32888, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8079_0_comp_ff, 32889, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_807a_0_comp_ff, 32890, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_807b_0_comp_ff, 32891, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_807c_0_comp_ff, 32892, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8080_0_comp_ff, 32896, 0 }, /* OR */ -{ op_8090_0_comp_ff, 32912, 0 }, /* OR */ -{ op_8098_0_comp_ff, 32920, 0 }, /* OR */ -{ op_80a0_0_comp_ff, 32928, 0 }, /* OR */ -{ op_80a8_0_comp_ff, 32936, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80b0_0_comp_ff, 32944, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80b8_0_comp_ff, 32952, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80b9_0_comp_ff, 32953, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80ba_0_comp_ff, 32954, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80bb_0_comp_ff, 32955, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80bc_0_comp_ff, 32956, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 32960, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 32976, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 32984, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 32992, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33000, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33008, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33016, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33017, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33018, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33019, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33020, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33024, 0 }, /* SBCD */ -{ NULL, 33032, 0 }, /* SBCD */ -{ op_8110_0_comp_ff, 33040, 0 }, /* OR */ -{ op_8118_0_comp_ff, 33048, 0 }, /* OR */ -{ op_8120_0_comp_ff, 33056, 0 }, /* OR */ -{ op_8128_0_comp_ff, 33064, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8130_0_comp_ff, 33072, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8138_0_comp_ff, 33080, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8139_0_comp_ff, 33081, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 33088, 0 }, /* PACK */ -{ NULL, 33096, 0 }, /* PACK */ -{ op_8150_0_comp_ff, 33104, 0 }, /* OR */ -{ op_8158_0_comp_ff, 33112, 0 }, /* OR */ -{ op_8160_0_comp_ff, 33120, 0 }, /* OR */ -{ op_8168_0_comp_ff, 33128, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8170_0_comp_ff, 33136, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8178_0_comp_ff, 33144, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8179_0_comp_ff, 33145, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 33152, 0 }, /* UNPK */ -{ NULL, 33160, 0 }, /* UNPK */ -{ op_8190_0_comp_ff, 33168, 0 }, /* OR */ -{ op_8198_0_comp_ff, 33176, 0 }, /* OR */ -{ op_81a0_0_comp_ff, 33184, 0 }, /* OR */ -{ op_81a8_0_comp_ff, 33192, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_81b0_0_comp_ff, 33200, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_81b8_0_comp_ff, 33208, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_81b9_0_comp_ff, 33209, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 33216, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33232, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33240, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33248, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33256, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33264, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33272, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33273, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33274, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33275, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33276, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ op_9000_0_comp_ff, 36864, 0 }, /* SUB */ -{ op_9010_0_comp_ff, 36880, 0 }, /* SUB */ -{ op_9018_0_comp_ff, 36888, 0 }, /* SUB */ -{ op_9020_0_comp_ff, 36896, 0 }, /* SUB */ -{ op_9028_0_comp_ff, 36904, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9030_0_comp_ff, 36912, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9038_0_comp_ff, 36920, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9039_0_comp_ff, 36921, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_903a_0_comp_ff, 36922, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_903b_0_comp_ff, 36923, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_903c_0_comp_ff, 36924, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9040_0_comp_ff, 36928, 0 }, /* SUB */ -{ op_9048_0_comp_ff, 36936, 0 }, /* SUB */ -{ op_9050_0_comp_ff, 36944, 0 }, /* SUB */ -{ op_9058_0_comp_ff, 36952, 0 }, /* SUB */ -{ op_9060_0_comp_ff, 36960, 0 }, /* SUB */ -{ op_9068_0_comp_ff, 36968, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9070_0_comp_ff, 36976, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9078_0_comp_ff, 36984, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9079_0_comp_ff, 36985, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_907a_0_comp_ff, 36986, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_907b_0_comp_ff, 36987, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_907c_0_comp_ff, 36988, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9080_0_comp_ff, 36992, 0 }, /* SUB */ -{ op_9088_0_comp_ff, 37000, 0 }, /* SUB */ -{ op_9090_0_comp_ff, 37008, 0 }, /* SUB */ -{ op_9098_0_comp_ff, 37016, 0 }, /* SUB */ -{ op_90a0_0_comp_ff, 37024, 0 }, /* SUB */ -{ op_90a8_0_comp_ff, 37032, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90b0_0_comp_ff, 37040, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90b8_0_comp_ff, 37048, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90b9_0_comp_ff, 37049, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90ba_0_comp_ff, 37050, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90bb_0_comp_ff, 37051, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90bc_0_comp_ff, 37052, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90c0_0_comp_ff, 37056, 0 }, /* SUBA */ -{ op_90c8_0_comp_ff, 37064, 0 }, /* SUBA */ -{ op_90d0_0_comp_ff, 37072, 0 }, /* SUBA */ -{ op_90d8_0_comp_ff, 37080, 0 }, /* SUBA */ -{ op_90e0_0_comp_ff, 37088, 0 }, /* SUBA */ -{ op_90e8_0_comp_ff, 37096, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90f0_0_comp_ff, 37104, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90f8_0_comp_ff, 37112, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90f9_0_comp_ff, 37113, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90fa_0_comp_ff, 37114, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90fb_0_comp_ff, 37115, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90fc_0_comp_ff, 37116, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_9100_0_comp_ff, 37120, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9108_0_comp_ff, 37128, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9110_0_comp_ff, 37136, 0 }, /* SUB */ -{ op_9118_0_comp_ff, 37144, 0 }, /* SUB */ -{ op_9120_0_comp_ff, 37152, 0 }, /* SUB */ -{ op_9128_0_comp_ff, 37160, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9130_0_comp_ff, 37168, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9138_0_comp_ff, 37176, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9139_0_comp_ff, 37177, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9140_0_comp_ff, 37184, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9148_0_comp_ff, 37192, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9150_0_comp_ff, 37200, 0 }, /* SUB */ -{ op_9158_0_comp_ff, 37208, 0 }, /* SUB */ -{ op_9160_0_comp_ff, 37216, 0 }, /* SUB */ -{ op_9168_0_comp_ff, 37224, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9170_0_comp_ff, 37232, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9178_0_comp_ff, 37240, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9179_0_comp_ff, 37241, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9180_0_comp_ff, 37248, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9188_0_comp_ff, 37256, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9190_0_comp_ff, 37264, 0 }, /* SUB */ -{ op_9198_0_comp_ff, 37272, 0 }, /* SUB */ -{ op_91a0_0_comp_ff, 37280, 0 }, /* SUB */ -{ op_91a8_0_comp_ff, 37288, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_91b0_0_comp_ff, 37296, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_91b8_0_comp_ff, 37304, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_91b9_0_comp_ff, 37305, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_91c0_0_comp_ff, 37312, 0 }, /* SUBA */ -{ op_91c8_0_comp_ff, 37320, 0 }, /* SUBA */ -{ op_91d0_0_comp_ff, 37328, 0 }, /* SUBA */ -{ op_91d8_0_comp_ff, 37336, 0 }, /* SUBA */ -{ op_91e0_0_comp_ff, 37344, 0 }, /* SUBA */ -{ op_91e8_0_comp_ff, 37352, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91f0_0_comp_ff, 37360, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91f8_0_comp_ff, 37368, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91f9_0_comp_ff, 37369, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91fa_0_comp_ff, 37370, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91fb_0_comp_ff, 37371, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91fc_0_comp_ff, 37372, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_b000_0_comp_ff, 45056, 0 }, /* CMP */ -{ op_b010_0_comp_ff, 45072, 0 }, /* CMP */ -{ op_b018_0_comp_ff, 45080, 0 }, /* CMP */ -{ op_b020_0_comp_ff, 45088, 0 }, /* CMP */ -{ op_b028_0_comp_ff, 45096, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b030_0_comp_ff, 45104, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b038_0_comp_ff, 45112, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b039_0_comp_ff, 45113, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b03a_0_comp_ff, 45114, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b03b_0_comp_ff, 45115, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b03c_0_comp_ff, 45116, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b040_0_comp_ff, 45120, 0 }, /* CMP */ -{ op_b048_0_comp_ff, 45128, 0 }, /* CMP */ -{ op_b050_0_comp_ff, 45136, 0 }, /* CMP */ -{ op_b058_0_comp_ff, 45144, 0 }, /* CMP */ -{ op_b060_0_comp_ff, 45152, 0 }, /* CMP */ -{ op_b068_0_comp_ff, 45160, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b070_0_comp_ff, 45168, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b078_0_comp_ff, 45176, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b079_0_comp_ff, 45177, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b07a_0_comp_ff, 45178, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b07b_0_comp_ff, 45179, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b07c_0_comp_ff, 45180, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b080_0_comp_ff, 45184, 0 }, /* CMP */ -{ op_b088_0_comp_ff, 45192, 0 }, /* CMP */ -{ op_b090_0_comp_ff, 45200, 0 }, /* CMP */ -{ op_b098_0_comp_ff, 45208, 0 }, /* CMP */ -{ op_b0a0_0_comp_ff, 45216, 0 }, /* CMP */ -{ op_b0a8_0_comp_ff, 45224, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0b0_0_comp_ff, 45232, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0b8_0_comp_ff, 45240, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0b9_0_comp_ff, 45241, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0ba_0_comp_ff, 45242, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0bb_0_comp_ff, 45243, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0bc_0_comp_ff, 45244, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0c0_0_comp_ff, 45248, 0 }, /* CMPA */ -{ op_b0c8_0_comp_ff, 45256, 0 }, /* CMPA */ -{ op_b0d0_0_comp_ff, 45264, 0 }, /* CMPA */ -{ op_b0d8_0_comp_ff, 45272, 0 }, /* CMPA */ -{ op_b0e0_0_comp_ff, 45280, 0 }, /* CMPA */ -{ op_b0e8_0_comp_ff, 45288, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0f0_0_comp_ff, 45296, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0f8_0_comp_ff, 45304, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0f9_0_comp_ff, 45305, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0fa_0_comp_ff, 45306, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0fb_0_comp_ff, 45307, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0fc_0_comp_ff, 45308, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b100_0_comp_ff, 45312, 0 }, /* EOR */ -{ op_b108_0_comp_ff, 45320, 0 }, /* CMPM */ -{ op_b110_0_comp_ff, 45328, 0 }, /* EOR */ -{ op_b118_0_comp_ff, 45336, 0 }, /* EOR */ -{ op_b120_0_comp_ff, 45344, 0 }, /* EOR */ -{ op_b128_0_comp_ff, 45352, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b130_0_comp_ff, 45360, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b138_0_comp_ff, 45368, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b139_0_comp_ff, 45369, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b140_0_comp_ff, 45376, 0 }, /* EOR */ -{ op_b148_0_comp_ff, 45384, 0 }, /* CMPM */ -{ op_b150_0_comp_ff, 45392, 0 }, /* EOR */ -{ op_b158_0_comp_ff, 45400, 0 }, /* EOR */ -{ op_b160_0_comp_ff, 45408, 0 }, /* EOR */ -{ op_b168_0_comp_ff, 45416, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b170_0_comp_ff, 45424, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b178_0_comp_ff, 45432, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b179_0_comp_ff, 45433, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b180_0_comp_ff, 45440, 0 }, /* EOR */ -{ op_b188_0_comp_ff, 45448, 0 }, /* CMPM */ -{ op_b190_0_comp_ff, 45456, 0 }, /* EOR */ -{ op_b198_0_comp_ff, 45464, 0 }, /* EOR */ -{ op_b1a0_0_comp_ff, 45472, 0 }, /* EOR */ -{ op_b1a8_0_comp_ff, 45480, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b1b0_0_comp_ff, 45488, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b1b8_0_comp_ff, 45496, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b1b9_0_comp_ff, 45497, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b1c0_0_comp_ff, 45504, 0 }, /* CMPA */ -{ op_b1c8_0_comp_ff, 45512, 0 }, /* CMPA */ -{ op_b1d0_0_comp_ff, 45520, 0 }, /* CMPA */ -{ op_b1d8_0_comp_ff, 45528, 0 }, /* CMPA */ -{ op_b1e0_0_comp_ff, 45536, 0 }, /* CMPA */ -{ op_b1e8_0_comp_ff, 45544, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1f0_0_comp_ff, 45552, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1f8_0_comp_ff, 45560, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1f9_0_comp_ff, 45561, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1fa_0_comp_ff, 45562, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1fb_0_comp_ff, 45563, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1fc_0_comp_ff, 45564, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_c000_0_comp_ff, 49152, 0 }, /* AND */ -{ op_c010_0_comp_ff, 49168, 0 }, /* AND */ -{ op_c018_0_comp_ff, 49176, 0 }, /* AND */ -{ op_c020_0_comp_ff, 49184, 0 }, /* AND */ -{ op_c028_0_comp_ff, 49192, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c030_0_comp_ff, 49200, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c038_0_comp_ff, 49208, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c039_0_comp_ff, 49209, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c03a_0_comp_ff, 49210, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c03b_0_comp_ff, 49211, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c03c_0_comp_ff, 49212, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c040_0_comp_ff, 49216, 0 }, /* AND */ -{ op_c050_0_comp_ff, 49232, 0 }, /* AND */ -{ op_c058_0_comp_ff, 49240, 0 }, /* AND */ -{ op_c060_0_comp_ff, 49248, 0 }, /* AND */ -{ op_c068_0_comp_ff, 49256, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c070_0_comp_ff, 49264, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c078_0_comp_ff, 49272, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c079_0_comp_ff, 49273, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c07a_0_comp_ff, 49274, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c07b_0_comp_ff, 49275, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c07c_0_comp_ff, 49276, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c080_0_comp_ff, 49280, 0 }, /* AND */ -{ op_c090_0_comp_ff, 49296, 0 }, /* AND */ -{ op_c098_0_comp_ff, 49304, 0 }, /* AND */ -{ op_c0a0_0_comp_ff, 49312, 0 }, /* AND */ -{ op_c0a8_0_comp_ff, 49320, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0b0_0_comp_ff, 49328, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0b8_0_comp_ff, 49336, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0b9_0_comp_ff, 49337, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0ba_0_comp_ff, 49338, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0bb_0_comp_ff, 49339, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0bc_0_comp_ff, 49340, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0c0_0_comp_ff, 49344, 0 }, /* MULU */ -{ op_c0d0_0_comp_ff, 49360, 0 }, /* MULU */ -{ op_c0d8_0_comp_ff, 49368, 0 }, /* MULU */ -{ op_c0e0_0_comp_ff, 49376, 0 }, /* MULU */ -{ op_c0e8_0_comp_ff, 49384, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0f0_0_comp_ff, 49392, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0f8_0_comp_ff, 49400, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0f9_0_comp_ff, 49401, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0fa_0_comp_ff, 49402, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0fb_0_comp_ff, 49403, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0fc_0_comp_ff, 49404, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ NULL, 49408, 0 }, /* ABCD */ -{ NULL, 49416, 0 }, /* ABCD */ -{ op_c110_0_comp_ff, 49424, 0 }, /* AND */ -{ op_c118_0_comp_ff, 49432, 0 }, /* AND */ -{ op_c120_0_comp_ff, 49440, 0 }, /* AND */ -{ op_c128_0_comp_ff, 49448, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c130_0_comp_ff, 49456, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c138_0_comp_ff, 49464, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c139_0_comp_ff, 49465, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c140_0_comp_ff, 49472, 0 }, /* EXG */ -{ op_c148_0_comp_ff, 49480, 0 }, /* EXG */ -{ op_c150_0_comp_ff, 49488, 0 }, /* AND */ -{ op_c158_0_comp_ff, 49496, 0 }, /* AND */ -{ op_c160_0_comp_ff, 49504, 0 }, /* AND */ -{ op_c168_0_comp_ff, 49512, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c170_0_comp_ff, 49520, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c178_0_comp_ff, 49528, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c179_0_comp_ff, 49529, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c188_0_comp_ff, 49544, 0 }, /* EXG */ -{ op_c190_0_comp_ff, 49552, 0 }, /* AND */ -{ op_c198_0_comp_ff, 49560, 0 }, /* AND */ -{ op_c1a0_0_comp_ff, 49568, 0 }, /* AND */ -{ op_c1a8_0_comp_ff, 49576, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c1b0_0_comp_ff, 49584, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c1b8_0_comp_ff, 49592, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c1b9_0_comp_ff, 49593, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c1c0_0_comp_ff, 49600, 0 }, /* MULS */ -{ op_c1d0_0_comp_ff, 49616, 0 }, /* MULS */ -{ op_c1d8_0_comp_ff, 49624, 0 }, /* MULS */ -{ op_c1e0_0_comp_ff, 49632, 0 }, /* MULS */ -{ op_c1e8_0_comp_ff, 49640, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1f0_0_comp_ff, 49648, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1f8_0_comp_ff, 49656, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1f9_0_comp_ff, 49657, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1fa_0_comp_ff, 49658, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1fb_0_comp_ff, 49659, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1fc_0_comp_ff, 49660, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_d000_0_comp_ff, 53248, 0 }, /* ADD */ -{ op_d010_0_comp_ff, 53264, 0 }, /* ADD */ -{ op_d018_0_comp_ff, 53272, 0 }, /* ADD */ -{ op_d020_0_comp_ff, 53280, 0 }, /* ADD */ -{ op_d028_0_comp_ff, 53288, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d030_0_comp_ff, 53296, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d038_0_comp_ff, 53304, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d039_0_comp_ff, 53305, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d03a_0_comp_ff, 53306, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d03b_0_comp_ff, 53307, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d03c_0_comp_ff, 53308, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d040_0_comp_ff, 53312, 0 }, /* ADD */ -{ op_d048_0_comp_ff, 53320, 0 }, /* ADD */ -{ op_d050_0_comp_ff, 53328, 0 }, /* ADD */ -{ op_d058_0_comp_ff, 53336, 0 }, /* ADD */ -{ op_d060_0_comp_ff, 53344, 0 }, /* ADD */ -{ op_d068_0_comp_ff, 53352, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d070_0_comp_ff, 53360, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d078_0_comp_ff, 53368, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d079_0_comp_ff, 53369, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d07a_0_comp_ff, 53370, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d07b_0_comp_ff, 53371, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d07c_0_comp_ff, 53372, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d080_0_comp_ff, 53376, 0 }, /* ADD */ -{ op_d088_0_comp_ff, 53384, 0 }, /* ADD */ -{ op_d090_0_comp_ff, 53392, 0 }, /* ADD */ -{ op_d098_0_comp_ff, 53400, 0 }, /* ADD */ -{ op_d0a0_0_comp_ff, 53408, 0 }, /* ADD */ -{ op_d0a8_0_comp_ff, 53416, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0b0_0_comp_ff, 53424, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0b8_0_comp_ff, 53432, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0b9_0_comp_ff, 53433, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0ba_0_comp_ff, 53434, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0bb_0_comp_ff, 53435, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0bc_0_comp_ff, 53436, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0c0_0_comp_ff, 53440, 0 }, /* ADDA */ -{ op_d0c8_0_comp_ff, 53448, 0 }, /* ADDA */ -{ op_d0d0_0_comp_ff, 53456, 0 }, /* ADDA */ -{ op_d0d8_0_comp_ff, 53464, 0 }, /* ADDA */ -{ op_d0e0_0_comp_ff, 53472, 0 }, /* ADDA */ -{ op_d0e8_0_comp_ff, 53480, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0f0_0_comp_ff, 53488, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0f8_0_comp_ff, 53496, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0f9_0_comp_ff, 53497, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0fa_0_comp_ff, 53498, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0fb_0_comp_ff, 53499, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0fc_0_comp_ff, 53500, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d100_0_comp_ff, 53504, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d108_0_comp_ff, 53512, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d110_0_comp_ff, 53520, 0 }, /* ADD */ -{ op_d118_0_comp_ff, 53528, 0 }, /* ADD */ -{ op_d120_0_comp_ff, 53536, 0 }, /* ADD */ -{ op_d128_0_comp_ff, 53544, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d130_0_comp_ff, 53552, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d138_0_comp_ff, 53560, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d139_0_comp_ff, 53561, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d140_0_comp_ff, 53568, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d148_0_comp_ff, 53576, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d150_0_comp_ff, 53584, 0 }, /* ADD */ -{ op_d158_0_comp_ff, 53592, 0 }, /* ADD */ -{ op_d160_0_comp_ff, 53600, 0 }, /* ADD */ -{ op_d168_0_comp_ff, 53608, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d170_0_comp_ff, 53616, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d178_0_comp_ff, 53624, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d179_0_comp_ff, 53625, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d180_0_comp_ff, 53632, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d188_0_comp_ff, 53640, COMP_OPCODE_CMOV|COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d190_0_comp_ff, 53648, 0 }, /* ADD */ -{ op_d198_0_comp_ff, 53656, 0 }, /* ADD */ -{ op_d1a0_0_comp_ff, 53664, 0 }, /* ADD */ -{ op_d1a8_0_comp_ff, 53672, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d1b0_0_comp_ff, 53680, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d1b8_0_comp_ff, 53688, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d1b9_0_comp_ff, 53689, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d1c0_0_comp_ff, 53696, 0 }, /* ADDA */ -{ op_d1c8_0_comp_ff, 53704, 0 }, /* ADDA */ -{ op_d1d0_0_comp_ff, 53712, 0 }, /* ADDA */ -{ op_d1d8_0_comp_ff, 53720, 0 }, /* ADDA */ -{ op_d1e0_0_comp_ff, 53728, 0 }, /* ADDA */ -{ op_d1e8_0_comp_ff, 53736, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1f0_0_comp_ff, 53744, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1f8_0_comp_ff, 53752, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1f9_0_comp_ff, 53753, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1fa_0_comp_ff, 53754, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1fb_0_comp_ff, 53755, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1fc_0_comp_ff, 53756, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_e000_0_comp_ff, 57344, 0 }, /* ASR */ -{ op_e008_0_comp_ff, 57352, 0 }, /* LSR */ -{ NULL, 57360, 0 }, /* ROXR */ -{ op_e018_0_comp_ff, 57368, 0 }, /* ROR */ -{ op_e020_0_comp_ff, 57376, COMP_OPCODE_CMOV }, /* ASR */ -{ op_e028_0_comp_ff, 57384, COMP_OPCODE_CMOV }, /* LSR */ -{ NULL, 57392, 0 }, /* ROXR */ -{ op_e038_0_comp_ff, 57400, 0 }, /* ROR */ -{ op_e040_0_comp_ff, 57408, 0 }, /* ASR */ -{ op_e048_0_comp_ff, 57416, 0 }, /* LSR */ -{ NULL, 57424, 0 }, /* ROXR */ -{ op_e058_0_comp_ff, 57432, 0 }, /* ROR */ -{ op_e060_0_comp_ff, 57440, COMP_OPCODE_CMOV }, /* ASR */ -{ op_e068_0_comp_ff, 57448, COMP_OPCODE_CMOV }, /* LSR */ -{ NULL, 57456, 0 }, /* ROXR */ -{ op_e078_0_comp_ff, 57464, 0 }, /* ROR */ -{ op_e080_0_comp_ff, 57472, 0 }, /* ASR */ -{ op_e088_0_comp_ff, 57480, 0 }, /* LSR */ -{ NULL, 57488, 0 }, /* ROXR */ -{ op_e098_0_comp_ff, 57496, 0 }, /* ROR */ -{ op_e0a0_0_comp_ff, 57504, COMP_OPCODE_CMOV }, /* ASR */ -{ op_e0a8_0_comp_ff, 57512, COMP_OPCODE_CMOV }, /* LSR */ -{ NULL, 57520, 0 }, /* ROXR */ -{ op_e0b8_0_comp_ff, 57528, 0 }, /* ROR */ -{ NULL, 57552, 0 }, /* ASRW */ -{ NULL, 57560, 0 }, /* ASRW */ -{ NULL, 57568, 0 }, /* ASRW */ -{ NULL, 57576, 0 }, /* ASRW */ -{ NULL, 57584, 0 }, /* ASRW */ -{ NULL, 57592, 0 }, /* ASRW */ -{ NULL, 57593, 0 }, /* ASRW */ -{ op_e100_0_comp_ff, 57600, 0 }, /* ASL */ -{ op_e108_0_comp_ff, 57608, 0 }, /* LSL */ -{ NULL, 57616, 0 }, /* ROXL */ -{ op_e118_0_comp_ff, 57624, 0 }, /* ROL */ -{ op_e120_0_comp_ff, 57632, COMP_OPCODE_CMOV }, /* ASL */ -{ op_e128_0_comp_ff, 57640, COMP_OPCODE_CMOV }, /* LSL */ -{ NULL, 57648, 0 }, /* ROXL */ -{ op_e138_0_comp_ff, 57656, 0 }, /* ROL */ -{ op_e140_0_comp_ff, 57664, 0 }, /* ASL */ -{ op_e148_0_comp_ff, 57672, 0 }, /* LSL */ -{ NULL, 57680, 0 }, /* ROXL */ -{ op_e158_0_comp_ff, 57688, 0 }, /* ROL */ -{ op_e160_0_comp_ff, 57696, COMP_OPCODE_CMOV }, /* ASL */ -{ op_e168_0_comp_ff, 57704, COMP_OPCODE_CMOV }, /* LSL */ -{ NULL, 57712, 0 }, /* ROXL */ -{ op_e178_0_comp_ff, 57720, 0 }, /* ROL */ -{ op_e180_0_comp_ff, 57728, 0 }, /* ASL */ -{ op_e188_0_comp_ff, 57736, 0 }, /* LSL */ -{ NULL, 57744, 0 }, /* ROXL */ -{ op_e198_0_comp_ff, 57752, 0 }, /* ROL */ -{ op_e1a0_0_comp_ff, 57760, COMP_OPCODE_CMOV }, /* ASL */ -{ op_e1a8_0_comp_ff, 57768, COMP_OPCODE_CMOV }, /* LSL */ -{ NULL, 57776, 0 }, /* ROXL */ -{ op_e1b8_0_comp_ff, 57784, 0 }, /* ROL */ -{ NULL, 57808, 0 }, /* ASLW */ -{ NULL, 57816, 0 }, /* ASLW */ -{ NULL, 57824, 0 }, /* ASLW */ -{ NULL, 57832, 0 }, /* ASLW */ -{ NULL, 57840, 0 }, /* ASLW */ -{ NULL, 57848, 0 }, /* ASLW */ -{ NULL, 57849, 0 }, /* ASLW */ -{ NULL, 58064, 0 }, /* LSRW */ -{ NULL, 58072, 0 }, /* LSRW */ -{ NULL, 58080, 0 }, /* LSRW */ -{ NULL, 58088, 0 }, /* LSRW */ -{ NULL, 58096, 0 }, /* LSRW */ -{ NULL, 58104, 0 }, /* LSRW */ -{ NULL, 58105, 0 }, /* LSRW */ -{ NULL, 58320, 0 }, /* LSLW */ -{ NULL, 58328, 0 }, /* LSLW */ -{ NULL, 58336, 0 }, /* LSLW */ -{ NULL, 58344, 0 }, /* LSLW */ -{ NULL, 58352, 0 }, /* LSLW */ -{ NULL, 58360, 0 }, /* LSLW */ -{ NULL, 58361, 0 }, /* LSLW */ -{ NULL, 58576, 0 }, /* ROXRW */ -{ NULL, 58584, 0 }, /* ROXRW */ -{ NULL, 58592, 0 }, /* ROXRW */ -{ NULL, 58600, 0 }, /* ROXRW */ -{ NULL, 58608, 0 }, /* ROXRW */ -{ NULL, 58616, 0 }, /* ROXRW */ -{ NULL, 58617, 0 }, /* ROXRW */ -{ NULL, 58832, 0 }, /* ROXLW */ -{ NULL, 58840, 0 }, /* ROXLW */ -{ NULL, 58848, 0 }, /* ROXLW */ -{ NULL, 58856, 0 }, /* ROXLW */ -{ NULL, 58864, 0 }, /* ROXLW */ -{ NULL, 58872, 0 }, /* ROXLW */ -{ NULL, 58873, 0 }, /* ROXLW */ -{ NULL, 59088, 0 }, /* RORW */ -{ NULL, 59096, 0 }, /* RORW */ -{ NULL, 59104, 0 }, /* RORW */ -{ NULL, 59112, 0 }, /* RORW */ -{ NULL, 59120, 0 }, /* RORW */ -{ NULL, 59128, 0 }, /* RORW */ -{ NULL, 59129, 0 }, /* RORW */ -{ NULL, 59344, 0 }, /* ROLW */ -{ NULL, 59352, 0 }, /* ROLW */ -{ NULL, 59360, 0 }, /* ROLW */ -{ NULL, 59368, 0 }, /* ROLW */ -{ NULL, 59376, 0 }, /* ROLW */ -{ NULL, 59384, 0 }, /* ROLW */ -{ NULL, 59385, 0 }, /* ROLW */ -{ NULL, 59584, 0 }, /* BFTST */ -{ NULL, 59600, 0 }, /* BFTST */ -{ NULL, 59624, 0 }, /* BFTST */ -{ NULL, 59632, 0 }, /* BFTST */ -{ NULL, 59640, 0 }, /* BFTST */ -{ NULL, 59641, 0 }, /* BFTST */ -{ NULL, 59642, 0 }, /* BFTST */ -{ NULL, 59643, 0 }, /* BFTST */ -{ NULL, 59840, 0 }, /* BFEXTU */ -{ NULL, 59856, 0 }, /* BFEXTU */ -{ NULL, 59880, 0 }, /* BFEXTU */ -{ NULL, 59888, 0 }, /* BFEXTU */ -{ NULL, 59896, 0 }, /* BFEXTU */ -{ NULL, 59897, 0 }, /* BFEXTU */ -{ NULL, 59898, 0 }, /* BFEXTU */ -{ NULL, 59899, 0 }, /* BFEXTU */ -{ NULL, 60096, 0 }, /* BFCHG */ -{ NULL, 60112, 0 }, /* BFCHG */ -{ NULL, 60136, 0 }, /* BFCHG */ -{ NULL, 60144, 0 }, /* BFCHG */ -{ NULL, 60152, 0 }, /* BFCHG */ -{ NULL, 60153, 0 }, /* BFCHG */ -{ NULL, 60352, 0 }, /* BFEXTS */ -{ NULL, 60368, 0 }, /* BFEXTS */ -{ NULL, 60392, 0 }, /* BFEXTS */ -{ NULL, 60400, 0 }, /* BFEXTS */ -{ NULL, 60408, 0 }, /* BFEXTS */ -{ NULL, 60409, 0 }, /* BFEXTS */ -{ NULL, 60410, 0 }, /* BFEXTS */ -{ NULL, 60411, 0 }, /* BFEXTS */ -{ NULL, 60608, 0 }, /* BFCLR */ -{ NULL, 60624, 0 }, /* BFCLR */ -{ NULL, 60648, 0 }, /* BFCLR */ -{ NULL, 60656, 0 }, /* BFCLR */ -{ NULL, 60664, 0 }, /* BFCLR */ -{ NULL, 60665, 0 }, /* BFCLR */ -{ NULL, 60864, 0 }, /* BFFFO */ -{ NULL, 60880, 0 }, /* BFFFO */ -{ NULL, 60904, 0 }, /* BFFFO */ -{ NULL, 60912, 0 }, /* BFFFO */ -{ NULL, 60920, 0 }, /* BFFFO */ -{ NULL, 60921, 0 }, /* BFFFO */ -{ NULL, 60922, 0 }, /* BFFFO */ -{ NULL, 60923, 0 }, /* BFFFO */ -{ NULL, 61120, 0 }, /* BFSET */ -{ NULL, 61136, 0 }, /* BFSET */ -{ NULL, 61160, 0 }, /* BFSET */ -{ NULL, 61168, 0 }, /* BFSET */ -{ NULL, 61176, 0 }, /* BFSET */ -{ NULL, 61177, 0 }, /* BFSET */ -{ NULL, 61376, 0 }, /* BFINS */ -{ NULL, 61392, 0 }, /* BFINS */ -{ NULL, 61416, 0 }, /* BFINS */ -{ NULL, 61424, 0 }, /* BFINS */ -{ NULL, 61432, 0 }, /* BFINS */ -{ NULL, 61433, 0 }, /* BFINS */ -{ NULL, 61440, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61448, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61456, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61464, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61472, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61480, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61488, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61496, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61497, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ op_f200_0_comp_ff, 61952, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f208_0_comp_ff, 61960, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f210_0_comp_ff, 61968, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f218_0_comp_ff, 61976, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f220_0_comp_ff, 61984, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f228_0_comp_ff, 61992, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f230_0_comp_ff, 62000, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f238_0_comp_ff, 62008, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f239_0_comp_ff, 62009, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f23a_0_comp_ff, 62010, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f23b_0_comp_ff, 62011, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f23c_0_comp_ff, 62012, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f240_0_comp_ff, 62016, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ NULL, 62024, COMP_OPCODE_ISJUMP|COMP_OPCODE_USES_FPU }, /* FDBcc */ -{ op_f250_0_comp_ff, 62032, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f258_0_comp_ff, 62040, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f260_0_comp_ff, 62048, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f268_0_comp_ff, 62056, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f270_0_comp_ff, 62064, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f278_0_comp_ff, 62072, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f279_0_comp_ff, 62073, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ NULL, 62074, COMP_OPCODE_ISJUMP|COMP_OPCODE_USES_FPU }, /* FTRAPcc */ -{ NULL, 62075, COMP_OPCODE_ISJUMP|COMP_OPCODE_USES_FPU }, /* FTRAPcc */ -{ NULL, 62076, COMP_OPCODE_ISJUMP|COMP_OPCODE_USES_FPU }, /* FTRAPcc */ -{ op_f280_0_comp_ff, 62080, COMP_OPCODE_ISJUMP|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FBcc */ -{ op_f2c0_0_comp_ff, 62144, COMP_OPCODE_ISJUMP|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FBcc */ -{ NULL, 62224, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62240, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62248, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62256, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62264, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62265, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62288, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62296, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62312, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62320, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62328, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62329, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62330, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62331, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62472, COMP_OPCODE_ISJUMP }, /* CINVL */ -{ NULL, 62480, COMP_OPCODE_ISJUMP }, /* CINVP */ -{ NULL, 62488, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62489, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62490, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62491, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62492, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62493, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62494, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62495, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62504, COMP_OPCODE_ISJUMP }, /* CPUSHL */ -{ NULL, 62512, COMP_OPCODE_ISJUMP }, /* CPUSHP */ -{ NULL, 62520, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62521, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62522, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62523, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62524, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62525, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62526, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62527, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62720, COMP_OPCODE_ISJUMP }, /* PFLUSHN */ -{ NULL, 62728, COMP_OPCODE_ISJUMP }, /* PFLUSH */ -{ NULL, 62736, COMP_OPCODE_ISJUMP }, /* PFLUSHAN */ -{ NULL, 62744, COMP_OPCODE_ISJUMP }, /* PFLUSHA */ -{ NULL, 62792, COMP_OPCODE_ISJUMP }, /* PTESTW */ -{ NULL, 62824, COMP_OPCODE_ISJUMP }, /* PTESTR */ -{ NULL, 62856, COMP_OPCODE_ISJUMP }, /* PLPAW */ -{ NULL, 62920, COMP_OPCODE_ISJUMP }, /* PLPAR */ -{ op_f600_0_comp_ff, 62976, COMP_OPCODE_LONG_OPCODE }, /* MOVE16 */ -{ op_f608_0_comp_ff, 62984, COMP_OPCODE_LONG_OPCODE }, /* MOVE16 */ -{ op_f610_0_comp_ff, 62992, COMP_OPCODE_LONG_OPCODE }, /* MOVE16 */ -{ op_f618_0_comp_ff, 63000, COMP_OPCODE_LONG_OPCODE }, /* MOVE16 */ -{ op_f620_0_comp_ff, 63008, COMP_OPCODE_LONG_OPCODE }, /* MOVE16 */ -{ NULL, 63488, COMP_OPCODE_ISJUMP }, /* LPSTOP */ -{ 0, 65536, 0 }}; -const struct comptbl op_smalltbl_0_comp_nf[] = { -{ op_0_0_comp_nf, 0, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_10_0_comp_nf, 16, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_18_0_comp_nf, 24, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_20_0_comp_nf, 32, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_28_0_comp_nf, 40, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_30_0_comp_nf, 48, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_38_0_comp_nf, 56, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_39_0_comp_nf, 57, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 60, COMP_OPCODE_ISJUMP }, /* ORSR */ -{ op_40_0_comp_nf, 64, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_50_0_comp_nf, 80, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_58_0_comp_nf, 88, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_60_0_comp_nf, 96, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_68_0_comp_nf, 104, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_70_0_comp_nf, 112, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_78_0_comp_nf, 120, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_79_0_comp_nf, 121, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 124, COMP_OPCODE_ISJUMP }, /* ORSR */ -{ op_80_0_comp_nf, 128, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_90_0_comp_nf, 144, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_98_0_comp_nf, 152, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_a0_0_comp_nf, 160, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_a8_0_comp_nf, 168, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_b0_0_comp_nf, 176, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_b8_0_comp_nf, 184, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_b9_0_comp_nf, 185, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 208, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 232, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 240, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 248, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 249, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 250, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 251, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ op_100_0_comp_nf, 256, 0 }, /* BTST */ -{ NULL, 264, COMP_OPCODE_ISJUMP }, /* MVPMR */ -{ op_110_0_comp_nf, 272, 0 }, /* BTST */ -{ op_118_0_comp_nf, 280, 0 }, /* BTST */ -{ op_120_0_comp_nf, 288, 0 }, /* BTST */ -{ op_128_0_comp_nf, 296, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_130_0_comp_nf, 304, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_138_0_comp_nf, 312, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_139_0_comp_nf, 313, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_13a_0_comp_nf, 314, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_13b_0_comp_nf, 315, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_13c_0_comp_nf, 316, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_140_0_comp_nf, 320, 0 }, /* BCHG */ -{ NULL, 328, COMP_OPCODE_ISJUMP }, /* MVPMR */ -{ op_150_0_comp_nf, 336, 0 }, /* BCHG */ -{ op_158_0_comp_nf, 344, 0 }, /* BCHG */ -{ op_160_0_comp_nf, 352, 0 }, /* BCHG */ -{ op_168_0_comp_nf, 360, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_170_0_comp_nf, 368, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_178_0_comp_nf, 376, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_179_0_comp_nf, 377, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_180_0_comp_nf, 384, 0 }, /* BCLR */ -{ NULL, 392, COMP_OPCODE_ISJUMP }, /* MVPRM */ -{ op_190_0_comp_nf, 400, 0 }, /* BCLR */ -{ op_198_0_comp_nf, 408, 0 }, /* BCLR */ -{ op_1a0_0_comp_nf, 416, 0 }, /* BCLR */ -{ op_1a8_0_comp_nf, 424, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_1b0_0_comp_nf, 432, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_1b8_0_comp_nf, 440, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_1b9_0_comp_nf, 441, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_1c0_0_comp_nf, 448, 0 }, /* BSET */ -{ NULL, 456, COMP_OPCODE_ISJUMP }, /* MVPRM */ -{ op_1d0_0_comp_nf, 464, 0 }, /* BSET */ -{ op_1d8_0_comp_nf, 472, 0 }, /* BSET */ -{ op_1e0_0_comp_nf, 480, 0 }, /* BSET */ -{ op_1e8_0_comp_nf, 488, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_1f0_0_comp_nf, 496, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_1f8_0_comp_nf, 504, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_1f9_0_comp_nf, 505, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_200_0_comp_nf, 512, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_210_0_comp_nf, 528, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_218_0_comp_nf, 536, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_220_0_comp_nf, 544, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_228_0_comp_nf, 552, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_230_0_comp_nf, 560, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_238_0_comp_nf, 568, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_239_0_comp_nf, 569, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ NULL, 572, COMP_OPCODE_ISJUMP }, /* ANDSR */ -{ op_240_0_comp_nf, 576, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_250_0_comp_nf, 592, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_258_0_comp_nf, 600, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_260_0_comp_nf, 608, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_268_0_comp_nf, 616, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_270_0_comp_nf, 624, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_278_0_comp_nf, 632, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_279_0_comp_nf, 633, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ NULL, 636, COMP_OPCODE_ISJUMP }, /* ANDSR */ -{ op_280_0_comp_nf, 640, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_290_0_comp_nf, 656, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_298_0_comp_nf, 664, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_2a0_0_comp_nf, 672, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_2a8_0_comp_nf, 680, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_2b0_0_comp_nf, 688, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_2b8_0_comp_nf, 696, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_2b9_0_comp_nf, 697, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ NULL, 720, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 744, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 752, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 760, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 761, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 762, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 763, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ op_400_0_comp_nf, 1024, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_410_0_comp_nf, 1040, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_418_0_comp_nf, 1048, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_420_0_comp_nf, 1056, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_428_0_comp_nf, 1064, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_430_0_comp_nf, 1072, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_438_0_comp_nf, 1080, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_439_0_comp_nf, 1081, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_440_0_comp_nf, 1088, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_450_0_comp_nf, 1104, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_458_0_comp_nf, 1112, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_460_0_comp_nf, 1120, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_468_0_comp_nf, 1128, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_470_0_comp_nf, 1136, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_478_0_comp_nf, 1144, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_479_0_comp_nf, 1145, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_480_0_comp_nf, 1152, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_490_0_comp_nf, 1168, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_498_0_comp_nf, 1176, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_4a0_0_comp_nf, 1184, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_4a8_0_comp_nf, 1192, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_4b0_0_comp_nf, 1200, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_4b8_0_comp_nf, 1208, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_4b9_0_comp_nf, 1209, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ NULL, 1232, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1256, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1264, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1272, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1273, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1274, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ NULL, 1275, COMP_OPCODE_ISJUMP }, /* CHK2 */ -{ op_600_0_comp_nf, 1536, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_610_0_comp_nf, 1552, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_618_0_comp_nf, 1560, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_620_0_comp_nf, 1568, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_628_0_comp_nf, 1576, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_630_0_comp_nf, 1584, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_638_0_comp_nf, 1592, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_639_0_comp_nf, 1593, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_640_0_comp_nf, 1600, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_650_0_comp_nf, 1616, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_658_0_comp_nf, 1624, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_660_0_comp_nf, 1632, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_668_0_comp_nf, 1640, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_670_0_comp_nf, 1648, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_678_0_comp_nf, 1656, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_679_0_comp_nf, 1657, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_680_0_comp_nf, 1664, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_690_0_comp_nf, 1680, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_698_0_comp_nf, 1688, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_6a0_0_comp_nf, 1696, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_6a8_0_comp_nf, 1704, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_6b0_0_comp_nf, 1712, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_6b8_0_comp_nf, 1720, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_6b9_0_comp_nf, 1721, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ NULL, 1728, COMP_OPCODE_ISJUMP }, /* RTM */ -{ NULL, 1736, COMP_OPCODE_ISJUMP }, /* RTM */ -{ NULL, 1744, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1768, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1776, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1784, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1785, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1786, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ NULL, 1787, COMP_OPCODE_ISJUMP }, /* CALLM */ -{ op_800_0_comp_nf, 2048, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_810_0_comp_nf, 2064, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_818_0_comp_nf, 2072, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_820_0_comp_nf, 2080, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_828_0_comp_nf, 2088, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_830_0_comp_nf, 2096, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_838_0_comp_nf, 2104, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_839_0_comp_nf, 2105, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_83a_0_comp_nf, 2106, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_83b_0_comp_nf, 2107, COMP_OPCODE_LONG_OPCODE }, /* BTST */ -{ op_840_0_comp_nf, 2112, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_850_0_comp_nf, 2128, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_858_0_comp_nf, 2136, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_860_0_comp_nf, 2144, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_868_0_comp_nf, 2152, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_870_0_comp_nf, 2160, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_878_0_comp_nf, 2168, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_879_0_comp_nf, 2169, COMP_OPCODE_LONG_OPCODE }, /* BCHG */ -{ op_880_0_comp_nf, 2176, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_890_0_comp_nf, 2192, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_898_0_comp_nf, 2200, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8a0_0_comp_nf, 2208, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8a8_0_comp_nf, 2216, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8b0_0_comp_nf, 2224, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8b8_0_comp_nf, 2232, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8b9_0_comp_nf, 2233, COMP_OPCODE_LONG_OPCODE }, /* BCLR */ -{ op_8c0_0_comp_nf, 2240, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8d0_0_comp_nf, 2256, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8d8_0_comp_nf, 2264, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8e0_0_comp_nf, 2272, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8e8_0_comp_nf, 2280, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8f0_0_comp_nf, 2288, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8f8_0_comp_nf, 2296, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_8f9_0_comp_nf, 2297, COMP_OPCODE_LONG_OPCODE }, /* BSET */ -{ op_a00_0_comp_nf, 2560, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a10_0_comp_nf, 2576, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a18_0_comp_nf, 2584, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a20_0_comp_nf, 2592, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a28_0_comp_nf, 2600, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a30_0_comp_nf, 2608, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a38_0_comp_nf, 2616, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a39_0_comp_nf, 2617, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ NULL, 2620, COMP_OPCODE_ISJUMP }, /* EORSR */ -{ op_a40_0_comp_nf, 2624, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a50_0_comp_nf, 2640, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a58_0_comp_nf, 2648, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a60_0_comp_nf, 2656, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a68_0_comp_nf, 2664, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a70_0_comp_nf, 2672, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a78_0_comp_nf, 2680, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a79_0_comp_nf, 2681, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ NULL, 2684, COMP_OPCODE_ISJUMP }, /* EORSR */ -{ op_a80_0_comp_nf, 2688, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a90_0_comp_nf, 2704, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_a98_0_comp_nf, 2712, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_aa0_0_comp_nf, 2720, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_aa8_0_comp_nf, 2728, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_ab0_0_comp_nf, 2736, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_ab8_0_comp_nf, 2744, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_ab9_0_comp_nf, 2745, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ NULL, 2768, 0 }, /* CAS */ -{ NULL, 2776, 0 }, /* CAS */ -{ NULL, 2784, 0 }, /* CAS */ -{ NULL, 2792, 0 }, /* CAS */ -{ NULL, 2800, 0 }, /* CAS */ -{ NULL, 2808, 0 }, /* CAS */ -{ NULL, 2809, 0 }, /* CAS */ -{ op_c00_0_comp_nf, 3072, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c10_0_comp_nf, 3088, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c18_0_comp_nf, 3096, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c20_0_comp_nf, 3104, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c28_0_comp_nf, 3112, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c30_0_comp_nf, 3120, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c38_0_comp_nf, 3128, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c39_0_comp_nf, 3129, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c3a_0_comp_nf, 3130, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c3b_0_comp_nf, 3131, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c40_0_comp_nf, 3136, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c50_0_comp_nf, 3152, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c58_0_comp_nf, 3160, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c60_0_comp_nf, 3168, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c68_0_comp_nf, 3176, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c70_0_comp_nf, 3184, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c78_0_comp_nf, 3192, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c79_0_comp_nf, 3193, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c7a_0_comp_nf, 3194, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c7b_0_comp_nf, 3195, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c80_0_comp_nf, 3200, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c90_0_comp_nf, 3216, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_c98_0_comp_nf, 3224, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_ca0_0_comp_nf, 3232, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_ca8_0_comp_nf, 3240, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_cb0_0_comp_nf, 3248, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_cb8_0_comp_nf, 3256, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_cb9_0_comp_nf, 3257, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_cba_0_comp_nf, 3258, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_cbb_0_comp_nf, 3259, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ NULL, 3280, 0 }, /* CAS */ -{ NULL, 3288, 0 }, /* CAS */ -{ NULL, 3296, 0 }, /* CAS */ -{ NULL, 3304, 0 }, /* CAS */ -{ NULL, 3312, 0 }, /* CAS */ -{ NULL, 3320, 0 }, /* CAS */ -{ NULL, 3321, 0 }, /* CAS */ -{ NULL, 3324, 0 }, /* CAS2 */ -{ NULL, 3600, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3608, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3616, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3624, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3632, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3640, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3641, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3664, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3672, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3680, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3688, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3696, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3704, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3705, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3728, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3736, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3744, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3752, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3760, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3768, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3769, COMP_OPCODE_ISJUMP }, /* MOVES */ -{ NULL, 3792, 0 }, /* CAS */ -{ NULL, 3800, 0 }, /* CAS */ -{ NULL, 3808, 0 }, /* CAS */ -{ NULL, 3816, 0 }, /* CAS */ -{ NULL, 3824, 0 }, /* CAS */ -{ NULL, 3832, 0 }, /* CAS */ -{ NULL, 3833, 0 }, /* CAS */ -{ NULL, 3836, 0 }, /* CAS2 */ -{ op_1000_0_comp_nf, 4096, 0 }, /* MOVE */ -{ op_1010_0_comp_nf, 4112, 0 }, /* MOVE */ -{ op_1018_0_comp_nf, 4120, 0 }, /* MOVE */ -{ op_1020_0_comp_nf, 4128, 0 }, /* MOVE */ -{ op_1028_0_comp_nf, 4136, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1030_0_comp_nf, 4144, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1038_0_comp_nf, 4152, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1039_0_comp_nf, 4153, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_103a_0_comp_nf, 4154, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_103b_0_comp_nf, 4155, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_103c_0_comp_nf, 4156, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1080_0_comp_nf, 4224, 0 }, /* MOVE */ -{ op_1090_0_comp_nf, 4240, 0 }, /* MOVE */ -{ op_1098_0_comp_nf, 4248, 0 }, /* MOVE */ -{ op_10a0_0_comp_nf, 4256, 0 }, /* MOVE */ -{ op_10a8_0_comp_nf, 4264, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10b0_0_comp_nf, 4272, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10b8_0_comp_nf, 4280, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10b9_0_comp_nf, 4281, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10ba_0_comp_nf, 4282, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10bb_0_comp_nf, 4283, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10bc_0_comp_nf, 4284, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10c0_0_comp_nf, 4288, 0 }, /* MOVE */ -{ op_10d0_0_comp_nf, 4304, 0 }, /* MOVE */ -{ op_10d8_0_comp_nf, 4312, 0 }, /* MOVE */ -{ op_10e0_0_comp_nf, 4320, 0 }, /* MOVE */ -{ op_10e8_0_comp_nf, 4328, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10f0_0_comp_nf, 4336, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10f8_0_comp_nf, 4344, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10f9_0_comp_nf, 4345, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10fa_0_comp_nf, 4346, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10fb_0_comp_nf, 4347, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_10fc_0_comp_nf, 4348, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1100_0_comp_nf, 4352, 0 }, /* MOVE */ -{ op_1110_0_comp_nf, 4368, 0 }, /* MOVE */ -{ op_1118_0_comp_nf, 4376, 0 }, /* MOVE */ -{ op_1120_0_comp_nf, 4384, 0 }, /* MOVE */ -{ op_1128_0_comp_nf, 4392, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1130_0_comp_nf, 4400, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1138_0_comp_nf, 4408, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1139_0_comp_nf, 4409, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_113a_0_comp_nf, 4410, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_113b_0_comp_nf, 4411, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_113c_0_comp_nf, 4412, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1140_0_comp_nf, 4416, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1150_0_comp_nf, 4432, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1158_0_comp_nf, 4440, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1160_0_comp_nf, 4448, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1168_0_comp_nf, 4456, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1170_0_comp_nf, 4464, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1178_0_comp_nf, 4472, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1179_0_comp_nf, 4473, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_117a_0_comp_nf, 4474, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_117b_0_comp_nf, 4475, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_117c_0_comp_nf, 4476, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1180_0_comp_nf, 4480, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1190_0_comp_nf, 4496, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_1198_0_comp_nf, 4504, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11a0_0_comp_nf, 4512, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11a8_0_comp_nf, 4520, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11b0_0_comp_nf, 4528, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11b8_0_comp_nf, 4536, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11b9_0_comp_nf, 4537, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11ba_0_comp_nf, 4538, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11bb_0_comp_nf, 4539, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11bc_0_comp_nf, 4540, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11c0_0_comp_nf, 4544, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11d0_0_comp_nf, 4560, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11d8_0_comp_nf, 4568, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11e0_0_comp_nf, 4576, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11e8_0_comp_nf, 4584, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11f0_0_comp_nf, 4592, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11f8_0_comp_nf, 4600, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11f9_0_comp_nf, 4601, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11fa_0_comp_nf, 4602, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11fb_0_comp_nf, 4603, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_11fc_0_comp_nf, 4604, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13c0_0_comp_nf, 5056, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13d0_0_comp_nf, 5072, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13d8_0_comp_nf, 5080, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13e0_0_comp_nf, 5088, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13e8_0_comp_nf, 5096, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13f0_0_comp_nf, 5104, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13f8_0_comp_nf, 5112, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13f9_0_comp_nf, 5113, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13fa_0_comp_nf, 5114, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13fb_0_comp_nf, 5115, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_13fc_0_comp_nf, 5116, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2000_0_comp_nf, 8192, 0 }, /* MOVE */ -{ op_2008_0_comp_nf, 8200, 0 }, /* MOVE */ -{ op_2010_0_comp_nf, 8208, 0 }, /* MOVE */ -{ op_2018_0_comp_nf, 8216, 0 }, /* MOVE */ -{ op_2020_0_comp_nf, 8224, 0 }, /* MOVE */ -{ op_2028_0_comp_nf, 8232, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2030_0_comp_nf, 8240, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2038_0_comp_nf, 8248, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2039_0_comp_nf, 8249, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_203a_0_comp_nf, 8250, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_203b_0_comp_nf, 8251, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_203c_0_comp_nf, 8252, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2040_0_comp_nf, 8256, 0 }, /* MOVEA */ -{ op_2048_0_comp_nf, 8264, 0 }, /* MOVEA */ -{ op_2050_0_comp_nf, 8272, 0 }, /* MOVEA */ -{ op_2058_0_comp_nf, 8280, 0 }, /* MOVEA */ -{ op_2060_0_comp_nf, 8288, 0 }, /* MOVEA */ -{ op_2068_0_comp_nf, 8296, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_2070_0_comp_nf, 8304, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_2078_0_comp_nf, 8312, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_2079_0_comp_nf, 8313, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_207a_0_comp_nf, 8314, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_207b_0_comp_nf, 8315, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_207c_0_comp_nf, 8316, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_2080_0_comp_nf, 8320, 0 }, /* MOVE */ -{ op_2088_0_comp_nf, 8328, 0 }, /* MOVE */ -{ op_2090_0_comp_nf, 8336, 0 }, /* MOVE */ -{ op_2098_0_comp_nf, 8344, 0 }, /* MOVE */ -{ op_20a0_0_comp_nf, 8352, 0 }, /* MOVE */ -{ op_20a8_0_comp_nf, 8360, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20b0_0_comp_nf, 8368, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20b8_0_comp_nf, 8376, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20b9_0_comp_nf, 8377, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20ba_0_comp_nf, 8378, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20bb_0_comp_nf, 8379, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20bc_0_comp_nf, 8380, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20c0_0_comp_nf, 8384, 0 }, /* MOVE */ -{ op_20c8_0_comp_nf, 8392, 0 }, /* MOVE */ -{ op_20d0_0_comp_nf, 8400, 0 }, /* MOVE */ -{ op_20d8_0_comp_nf, 8408, 0 }, /* MOVE */ -{ op_20e0_0_comp_nf, 8416, 0 }, /* MOVE */ -{ op_20e8_0_comp_nf, 8424, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20f0_0_comp_nf, 8432, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20f8_0_comp_nf, 8440, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20f9_0_comp_nf, 8441, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20fa_0_comp_nf, 8442, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20fb_0_comp_nf, 8443, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_20fc_0_comp_nf, 8444, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2100_0_comp_nf, 8448, 0 }, /* MOVE */ -{ op_2108_0_comp_nf, 8456, 0 }, /* MOVE */ -{ op_2110_0_comp_nf, 8464, 0 }, /* MOVE */ -{ op_2118_0_comp_nf, 8472, 0 }, /* MOVE */ -{ op_2120_0_comp_nf, 8480, 0 }, /* MOVE */ -{ op_2128_0_comp_nf, 8488, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2130_0_comp_nf, 8496, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2138_0_comp_nf, 8504, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2139_0_comp_nf, 8505, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_213a_0_comp_nf, 8506, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_213b_0_comp_nf, 8507, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_213c_0_comp_nf, 8508, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2140_0_comp_nf, 8512, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2148_0_comp_nf, 8520, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2150_0_comp_nf, 8528, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2158_0_comp_nf, 8536, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2160_0_comp_nf, 8544, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2168_0_comp_nf, 8552, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2170_0_comp_nf, 8560, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2178_0_comp_nf, 8568, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2179_0_comp_nf, 8569, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_217a_0_comp_nf, 8570, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_217b_0_comp_nf, 8571, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_217c_0_comp_nf, 8572, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2180_0_comp_nf, 8576, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2188_0_comp_nf, 8584, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2190_0_comp_nf, 8592, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_2198_0_comp_nf, 8600, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21a0_0_comp_nf, 8608, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21a8_0_comp_nf, 8616, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21b0_0_comp_nf, 8624, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21b8_0_comp_nf, 8632, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21b9_0_comp_nf, 8633, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21ba_0_comp_nf, 8634, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21bb_0_comp_nf, 8635, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21bc_0_comp_nf, 8636, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21c0_0_comp_nf, 8640, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21c8_0_comp_nf, 8648, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21d0_0_comp_nf, 8656, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21d8_0_comp_nf, 8664, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21e0_0_comp_nf, 8672, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21e8_0_comp_nf, 8680, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21f0_0_comp_nf, 8688, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21f8_0_comp_nf, 8696, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21f9_0_comp_nf, 8697, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21fa_0_comp_nf, 8698, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21fb_0_comp_nf, 8699, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_21fc_0_comp_nf, 8700, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23c0_0_comp_nf, 9152, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23c8_0_comp_nf, 9160, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23d0_0_comp_nf, 9168, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23d8_0_comp_nf, 9176, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23e0_0_comp_nf, 9184, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23e8_0_comp_nf, 9192, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23f0_0_comp_nf, 9200, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23f8_0_comp_nf, 9208, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23f9_0_comp_nf, 9209, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23fa_0_comp_nf, 9210, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23fb_0_comp_nf, 9211, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_23fc_0_comp_nf, 9212, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3000_0_comp_nf, 12288, 0 }, /* MOVE */ -{ op_3008_0_comp_nf, 12296, 0 }, /* MOVE */ -{ op_3010_0_comp_nf, 12304, 0 }, /* MOVE */ -{ op_3018_0_comp_nf, 12312, 0 }, /* MOVE */ -{ op_3020_0_comp_nf, 12320, 0 }, /* MOVE */ -{ op_3028_0_comp_nf, 12328, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3030_0_comp_nf, 12336, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3038_0_comp_nf, 12344, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3039_0_comp_nf, 12345, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_303a_0_comp_nf, 12346, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_303b_0_comp_nf, 12347, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_303c_0_comp_nf, 12348, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3040_0_comp_nf, 12352, 0 }, /* MOVEA */ -{ op_3048_0_comp_nf, 12360, 0 }, /* MOVEA */ -{ op_3050_0_comp_nf, 12368, 0 }, /* MOVEA */ -{ op_3058_0_comp_nf, 12376, 0 }, /* MOVEA */ -{ op_3060_0_comp_nf, 12384, 0 }, /* MOVEA */ -{ op_3068_0_comp_nf, 12392, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_3070_0_comp_nf, 12400, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_3078_0_comp_nf, 12408, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_3079_0_comp_nf, 12409, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_307a_0_comp_nf, 12410, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_307b_0_comp_nf, 12411, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_307c_0_comp_nf, 12412, COMP_OPCODE_LONG_OPCODE }, /* MOVEA */ -{ op_3080_0_comp_nf, 12416, 0 }, /* MOVE */ -{ op_3088_0_comp_nf, 12424, 0 }, /* MOVE */ -{ op_3090_0_comp_nf, 12432, 0 }, /* MOVE */ -{ op_3098_0_comp_nf, 12440, 0 }, /* MOVE */ -{ op_30a0_0_comp_nf, 12448, 0 }, /* MOVE */ -{ op_30a8_0_comp_nf, 12456, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30b0_0_comp_nf, 12464, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30b8_0_comp_nf, 12472, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30b9_0_comp_nf, 12473, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30ba_0_comp_nf, 12474, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30bb_0_comp_nf, 12475, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30bc_0_comp_nf, 12476, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30c0_0_comp_nf, 12480, 0 }, /* MOVE */ -{ op_30c8_0_comp_nf, 12488, 0 }, /* MOVE */ -{ op_30d0_0_comp_nf, 12496, 0 }, /* MOVE */ -{ op_30d8_0_comp_nf, 12504, 0 }, /* MOVE */ -{ op_30e0_0_comp_nf, 12512, 0 }, /* MOVE */ -{ op_30e8_0_comp_nf, 12520, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30f0_0_comp_nf, 12528, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30f8_0_comp_nf, 12536, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30f9_0_comp_nf, 12537, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30fa_0_comp_nf, 12538, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30fb_0_comp_nf, 12539, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_30fc_0_comp_nf, 12540, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3100_0_comp_nf, 12544, 0 }, /* MOVE */ -{ op_3108_0_comp_nf, 12552, 0 }, /* MOVE */ -{ op_3110_0_comp_nf, 12560, 0 }, /* MOVE */ -{ op_3118_0_comp_nf, 12568, 0 }, /* MOVE */ -{ op_3120_0_comp_nf, 12576, 0 }, /* MOVE */ -{ op_3128_0_comp_nf, 12584, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3130_0_comp_nf, 12592, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3138_0_comp_nf, 12600, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3139_0_comp_nf, 12601, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_313a_0_comp_nf, 12602, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_313b_0_comp_nf, 12603, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_313c_0_comp_nf, 12604, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3140_0_comp_nf, 12608, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3148_0_comp_nf, 12616, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3150_0_comp_nf, 12624, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3158_0_comp_nf, 12632, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3160_0_comp_nf, 12640, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3168_0_comp_nf, 12648, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3170_0_comp_nf, 12656, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3178_0_comp_nf, 12664, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3179_0_comp_nf, 12665, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_317a_0_comp_nf, 12666, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_317b_0_comp_nf, 12667, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_317c_0_comp_nf, 12668, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3180_0_comp_nf, 12672, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3188_0_comp_nf, 12680, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3190_0_comp_nf, 12688, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_3198_0_comp_nf, 12696, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31a0_0_comp_nf, 12704, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31a8_0_comp_nf, 12712, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31b0_0_comp_nf, 12720, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31b8_0_comp_nf, 12728, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31b9_0_comp_nf, 12729, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31ba_0_comp_nf, 12730, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31bb_0_comp_nf, 12731, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31bc_0_comp_nf, 12732, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31c0_0_comp_nf, 12736, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31c8_0_comp_nf, 12744, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31d0_0_comp_nf, 12752, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31d8_0_comp_nf, 12760, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31e0_0_comp_nf, 12768, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31e8_0_comp_nf, 12776, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31f0_0_comp_nf, 12784, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31f8_0_comp_nf, 12792, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31f9_0_comp_nf, 12793, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31fa_0_comp_nf, 12794, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31fb_0_comp_nf, 12795, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_31fc_0_comp_nf, 12796, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33c0_0_comp_nf, 13248, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33c8_0_comp_nf, 13256, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33d0_0_comp_nf, 13264, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33d8_0_comp_nf, 13272, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33e0_0_comp_nf, 13280, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33e8_0_comp_nf, 13288, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33f0_0_comp_nf, 13296, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33f8_0_comp_nf, 13304, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33f9_0_comp_nf, 13305, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33fa_0_comp_nf, 13306, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33fb_0_comp_nf, 13307, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_33fc_0_comp_nf, 13308, COMP_OPCODE_LONG_OPCODE }, /* MOVE */ -{ op_4000_0_comp_nf, 16384, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4010_0_comp_nf, 16400, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4018_0_comp_nf, 16408, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4020_0_comp_nf, 16416, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4028_0_comp_nf, 16424, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4030_0_comp_nf, 16432, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4038_0_comp_nf, 16440, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4039_0_comp_nf, 16441, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4040_0_comp_nf, 16448, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4050_0_comp_nf, 16464, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4058_0_comp_nf, 16472, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4060_0_comp_nf, 16480, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4068_0_comp_nf, 16488, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4070_0_comp_nf, 16496, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4078_0_comp_nf, 16504, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4079_0_comp_nf, 16505, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4080_0_comp_nf, 16512, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4090_0_comp_nf, 16528, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_4098_0_comp_nf, 16536, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_40a0_0_comp_nf, 16544, COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_40a8_0_comp_nf, 16552, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_40b0_0_comp_nf, 16560, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_40b8_0_comp_nf, 16568, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ op_40b9_0_comp_nf, 16569, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISADDX }, /* NEGX */ -{ NULL, 16576, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16592, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16600, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16608, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16616, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16624, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16632, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16633, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 16640, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16656, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16664, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16672, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16680, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16688, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16696, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16697, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16698, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16699, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16700, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16768, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16784, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16792, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16800, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16808, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16816, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16824, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16825, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16826, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16827, COMP_OPCODE_ISJUMP }, /* CHK */ -{ NULL, 16828, COMP_OPCODE_ISJUMP }, /* CHK */ -{ op_41d0_0_comp_nf, 16848, 0 }, /* LEA */ -{ op_41e8_0_comp_nf, 16872, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_41f0_0_comp_nf, 16880, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_41f8_0_comp_nf, 16888, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_41f9_0_comp_nf, 16889, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_41fa_0_comp_nf, 16890, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_41fb_0_comp_nf, 16891, COMP_OPCODE_LONG_OPCODE }, /* LEA */ -{ op_4200_0_comp_nf, 16896, 0 }, /* CLR */ -{ op_4210_0_comp_nf, 16912, 0 }, /* CLR */ -{ op_4218_0_comp_nf, 16920, 0 }, /* CLR */ -{ op_4220_0_comp_nf, 16928, 0 }, /* CLR */ -{ op_4228_0_comp_nf, 16936, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4230_0_comp_nf, 16944, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4238_0_comp_nf, 16952, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4239_0_comp_nf, 16953, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4240_0_comp_nf, 16960, 0 }, /* CLR */ -{ op_4250_0_comp_nf, 16976, 0 }, /* CLR */ -{ op_4258_0_comp_nf, 16984, 0 }, /* CLR */ -{ op_4260_0_comp_nf, 16992, 0 }, /* CLR */ -{ op_4268_0_comp_nf, 17000, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4270_0_comp_nf, 17008, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4278_0_comp_nf, 17016, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4279_0_comp_nf, 17017, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_4280_0_comp_nf, 17024, 0 }, /* CLR */ -{ op_4290_0_comp_nf, 17040, 0 }, /* CLR */ -{ op_4298_0_comp_nf, 17048, 0 }, /* CLR */ -{ op_42a0_0_comp_nf, 17056, 0 }, /* CLR */ -{ op_42a8_0_comp_nf, 17064, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_42b0_0_comp_nf, 17072, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_42b8_0_comp_nf, 17080, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ op_42b9_0_comp_nf, 17081, COMP_OPCODE_LONG_OPCODE }, /* CLR */ -{ NULL, 17088, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17104, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17112, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17120, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17128, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17136, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17144, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ NULL, 17145, COMP_OPCODE_ISJUMP }, /* MVSR2 */ -{ op_4400_0_comp_nf, 17408, 0 }, /* NEG */ -{ op_4410_0_comp_nf, 17424, 0 }, /* NEG */ -{ op_4418_0_comp_nf, 17432, 0 }, /* NEG */ -{ op_4420_0_comp_nf, 17440, 0 }, /* NEG */ -{ op_4428_0_comp_nf, 17448, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4430_0_comp_nf, 17456, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4438_0_comp_nf, 17464, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4439_0_comp_nf, 17465, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4440_0_comp_nf, 17472, 0 }, /* NEG */ -{ op_4450_0_comp_nf, 17488, 0 }, /* NEG */ -{ op_4458_0_comp_nf, 17496, 0 }, /* NEG */ -{ op_4460_0_comp_nf, 17504, 0 }, /* NEG */ -{ op_4468_0_comp_nf, 17512, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4470_0_comp_nf, 17520, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4478_0_comp_nf, 17528, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4479_0_comp_nf, 17529, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_4480_0_comp_nf, 17536, 0 }, /* NEG */ -{ op_4490_0_comp_nf, 17552, 0 }, /* NEG */ -{ op_4498_0_comp_nf, 17560, 0 }, /* NEG */ -{ op_44a0_0_comp_nf, 17568, 0 }, /* NEG */ -{ op_44a8_0_comp_nf, 17576, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_44b0_0_comp_nf, 17584, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_44b8_0_comp_nf, 17592, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ op_44b9_0_comp_nf, 17593, COMP_OPCODE_LONG_OPCODE }, /* NEG */ -{ NULL, 17600, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17616, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17624, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17632, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17640, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17648, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17656, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17657, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17658, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17659, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 17660, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ op_4600_0_comp_nf, 17920, 0 }, /* NOT */ -{ op_4610_0_comp_nf, 17936, 0 }, /* NOT */ -{ op_4618_0_comp_nf, 17944, 0 }, /* NOT */ -{ op_4620_0_comp_nf, 17952, 0 }, /* NOT */ -{ op_4628_0_comp_nf, 17960, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4630_0_comp_nf, 17968, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4638_0_comp_nf, 17976, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4639_0_comp_nf, 17977, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4640_0_comp_nf, 17984, 0 }, /* NOT */ -{ op_4650_0_comp_nf, 18000, 0 }, /* NOT */ -{ op_4658_0_comp_nf, 18008, 0 }, /* NOT */ -{ op_4660_0_comp_nf, 18016, 0 }, /* NOT */ -{ op_4668_0_comp_nf, 18024, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4670_0_comp_nf, 18032, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4678_0_comp_nf, 18040, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4679_0_comp_nf, 18041, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_4680_0_comp_nf, 18048, 0 }, /* NOT */ -{ op_4690_0_comp_nf, 18064, 0 }, /* NOT */ -{ op_4698_0_comp_nf, 18072, 0 }, /* NOT */ -{ op_46a0_0_comp_nf, 18080, 0 }, /* NOT */ -{ op_46a8_0_comp_nf, 18088, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_46b0_0_comp_nf, 18096, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_46b8_0_comp_nf, 18104, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ op_46b9_0_comp_nf, 18105, COMP_OPCODE_LONG_OPCODE }, /* NOT */ -{ NULL, 18112, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18128, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18136, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18144, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18152, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18160, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18168, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18169, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18170, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18171, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18172, COMP_OPCODE_ISJUMP }, /* MV2SR */ -{ NULL, 18432, 0 }, /* NBCD */ -{ op_4808_0_comp_nf, 18440, COMP_OPCODE_LONG_OPCODE }, /* LINK */ -{ NULL, 18448, 0 }, /* NBCD */ -{ NULL, 18456, 0 }, /* NBCD */ -{ NULL, 18464, 0 }, /* NBCD */ -{ NULL, 18472, 0 }, /* NBCD */ -{ NULL, 18480, 0 }, /* NBCD */ -{ NULL, 18488, 0 }, /* NBCD */ -{ NULL, 18489, 0 }, /* NBCD */ -{ op_4840_0_comp_nf, 18496, 0 }, /* SWAP */ -{ NULL, 18504, COMP_OPCODE_ISJUMP }, /* BKPT */ -{ op_4850_0_comp_nf, 18512, 0 }, /* PEA */ -{ op_4868_0_comp_nf, 18536, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_4870_0_comp_nf, 18544, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_4878_0_comp_nf, 18552, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_4879_0_comp_nf, 18553, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_487a_0_comp_nf, 18554, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_487b_0_comp_nf, 18555, COMP_OPCODE_LONG_OPCODE }, /* PEA */ -{ op_4880_0_comp_nf, 18560, 0 }, /* EXT */ -{ op_4890_0_comp_nf, 18576, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48a0_0_comp_nf, 18592, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48a8_0_comp_nf, 18600, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48b0_0_comp_nf, 18608, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48b8_0_comp_nf, 18616, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48b9_0_comp_nf, 18617, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48c0_0_comp_nf, 18624, 0 }, /* EXT */ -{ op_48d0_0_comp_nf, 18640, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48e0_0_comp_nf, 18656, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48e8_0_comp_nf, 18664, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48f0_0_comp_nf, 18672, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48f8_0_comp_nf, 18680, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_48f9_0_comp_nf, 18681, COMP_OPCODE_LONG_OPCODE }, /* MVMLE */ -{ op_49c0_0_comp_nf, 18880, 0 }, /* EXT */ -{ op_4a00_0_comp_nf, 18944, 0 }, /* TST */ -{ op_4a10_0_comp_nf, 18960, 0 }, /* TST */ -{ op_4a18_0_comp_nf, 18968, 0 }, /* TST */ -{ op_4a20_0_comp_nf, 18976, 0 }, /* TST */ -{ op_4a28_0_comp_nf, 18984, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a30_0_comp_nf, 18992, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a38_0_comp_nf, 19000, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a39_0_comp_nf, 19001, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a3a_0_comp_nf, 19002, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a3b_0_comp_nf, 19003, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a3c_0_comp_nf, 19004, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a40_0_comp_nf, 19008, 0 }, /* TST */ -{ op_4a48_0_comp_nf, 19016, 0 }, /* TST */ -{ op_4a50_0_comp_nf, 19024, 0 }, /* TST */ -{ op_4a58_0_comp_nf, 19032, 0 }, /* TST */ -{ op_4a60_0_comp_nf, 19040, 0 }, /* TST */ -{ op_4a68_0_comp_nf, 19048, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a70_0_comp_nf, 19056, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a78_0_comp_nf, 19064, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a79_0_comp_nf, 19065, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a7a_0_comp_nf, 19066, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a7b_0_comp_nf, 19067, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a7c_0_comp_nf, 19068, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4a80_0_comp_nf, 19072, 0 }, /* TST */ -{ op_4a88_0_comp_nf, 19080, 0 }, /* TST */ -{ op_4a90_0_comp_nf, 19088, 0 }, /* TST */ -{ op_4a98_0_comp_nf, 19096, 0 }, /* TST */ -{ op_4aa0_0_comp_nf, 19104, 0 }, /* TST */ -{ op_4aa8_0_comp_nf, 19112, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4ab0_0_comp_nf, 19120, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4ab8_0_comp_nf, 19128, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4ab9_0_comp_nf, 19129, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4aba_0_comp_nf, 19130, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4abb_0_comp_nf, 19131, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ op_4abc_0_comp_nf, 19132, COMP_OPCODE_LONG_OPCODE }, /* TST */ -{ NULL, 19136, 0 }, /* TAS */ -{ NULL, 19144, COMP_OPCODE_ISJUMP }, /* HALT */ -{ NULL, 19148, COMP_OPCODE_ISJUMP }, /* PULSE */ -{ NULL, 19152, 0 }, /* TAS */ -{ NULL, 19160, 0 }, /* TAS */ -{ NULL, 19168, 0 }, /* TAS */ -{ NULL, 19176, 0 }, /* TAS */ -{ NULL, 19184, 0 }, /* TAS */ -{ NULL, 19192, 0 }, /* TAS */ -{ NULL, 19193, 0 }, /* TAS */ -{ op_4c00_0_comp_nf, 19456, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ op_4c10_0_comp_nf, 19472, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ op_4c18_0_comp_nf, 19480, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ op_4c20_0_comp_nf, 19488, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ op_4c28_0_comp_nf, 19496, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ op_4c30_0_comp_nf, 19504, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ op_4c38_0_comp_nf, 19512, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ op_4c39_0_comp_nf, 19513, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ op_4c3a_0_comp_nf, 19514, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ op_4c3b_0_comp_nf, 19515, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ op_4c3c_0_comp_nf, 19516, COMP_OPCODE_LONG_OPCODE }, /* MULL */ -{ NULL, 19520, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19536, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19544, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19552, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19560, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19568, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19576, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19577, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19578, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19579, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ NULL, 19580, COMP_OPCODE_ISJUMP }, /* DIVL */ -{ op_4c90_0_comp_nf, 19600, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4c98_0_comp_nf, 19608, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4ca8_0_comp_nf, 19624, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cb0_0_comp_nf, 19632, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cb8_0_comp_nf, 19640, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cb9_0_comp_nf, 19641, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cba_0_comp_nf, 19642, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cbb_0_comp_nf, 19643, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cd0_0_comp_nf, 19664, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cd8_0_comp_nf, 19672, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4ce8_0_comp_nf, 19688, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cf0_0_comp_nf, 19696, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cf8_0_comp_nf, 19704, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cf9_0_comp_nf, 19705, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cfa_0_comp_nf, 19706, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ op_4cfb_0_comp_nf, 19707, COMP_OPCODE_LONG_OPCODE }, /* MVMEL */ -{ NULL, 20032, COMP_OPCODE_ISJUMP }, /* TRAP */ -{ op_4e50_0_comp_nf, 20048, COMP_OPCODE_LONG_OPCODE }, /* LINK */ -{ op_4e58_0_comp_nf, 20056, 0 }, /* UNLK */ -{ NULL, 20064, COMP_OPCODE_ISJUMP }, /* MVR2USP */ -{ NULL, 20072, COMP_OPCODE_ISJUMP }, /* MVUSP2R */ -{ NULL, 20080, COMP_OPCODE_ISJUMP }, /* RESET */ -{ op_4e71_0_comp_nf, 20081, 0 }, /* NOP */ -{ NULL, 20082, COMP_OPCODE_ISJUMP }, /* STOP */ -{ NULL, 20083, COMP_OPCODE_ISJUMP }, /* RTE */ -{ op_4e74_0_comp_nf, 20084, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* RTD */ -{ op_4e75_0_comp_nf, 20085, COMP_OPCODE_ISJUMP }, /* RTS */ -{ NULL, 20086, COMP_OPCODE_ISJUMP }, /* TRAPV */ -{ NULL, 20087, COMP_OPCODE_ISJUMP }, /* RTR */ -{ NULL, 20090, COMP_OPCODE_ISJUMP }, /* MOVEC2 */ -{ NULL, 20091, COMP_OPCODE_ISJUMP }, /* MOVE2C */ -{ op_4e90_0_comp_nf, 20112, COMP_OPCODE_ISJUMP }, /* JSR */ -{ op_4ea8_0_comp_nf, 20136, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4eb0_0_comp_nf, 20144, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4eb8_0_comp_nf, 20152, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4eb9_0_comp_nf, 20153, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4eba_0_comp_nf, 20154, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4ebb_0_comp_nf, 20155, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JSR */ -{ op_4ed0_0_comp_nf, 20176, COMP_OPCODE_ISJUMP }, /* JMP */ -{ op_4ee8_0_comp_nf, 20200, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_4ef0_0_comp_nf, 20208, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_4ef8_0_comp_nf, 20216, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_4ef9_0_comp_nf, 20217, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_4efa_0_comp_nf, 20218, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_4efb_0_comp_nf, 20219, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* JMP */ -{ op_5000_0_comp_nf, 20480, 0 }, /* ADD */ -{ op_5010_0_comp_nf, 20496, 0 }, /* ADD */ -{ op_5018_0_comp_nf, 20504, 0 }, /* ADD */ -{ op_5020_0_comp_nf, 20512, 0 }, /* ADD */ -{ op_5028_0_comp_nf, 20520, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5030_0_comp_nf, 20528, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5038_0_comp_nf, 20536, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5039_0_comp_nf, 20537, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5040_0_comp_nf, 20544, 0 }, /* ADD */ -{ op_5048_0_comp_nf, 20552, 0 }, /* ADDA */ -{ op_5050_0_comp_nf, 20560, 0 }, /* ADD */ -{ op_5058_0_comp_nf, 20568, 0 }, /* ADD */ -{ op_5060_0_comp_nf, 20576, 0 }, /* ADD */ -{ op_5068_0_comp_nf, 20584, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5070_0_comp_nf, 20592, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5078_0_comp_nf, 20600, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5079_0_comp_nf, 20601, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_5080_0_comp_nf, 20608, 0 }, /* ADD */ -{ op_5088_0_comp_nf, 20616, 0 }, /* ADDA */ -{ op_5090_0_comp_nf, 20624, 0 }, /* ADD */ -{ op_5098_0_comp_nf, 20632, 0 }, /* ADD */ -{ op_50a0_0_comp_nf, 20640, 0 }, /* ADD */ -{ op_50a8_0_comp_nf, 20648, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_50b0_0_comp_nf, 20656, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_50b8_0_comp_nf, 20664, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_50b9_0_comp_nf, 20665, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_50c0_0_comp_nf, 20672, 0 }, /* Scc */ -{ op_50c8_0_comp_nf, 20680, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_50d0_0_comp_nf, 20688, 0 }, /* Scc */ -{ op_50d8_0_comp_nf, 20696, 0 }, /* Scc */ -{ op_50e0_0_comp_nf, 20704, 0 }, /* Scc */ -{ op_50e8_0_comp_nf, 20712, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_50f0_0_comp_nf, 20720, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_50f8_0_comp_nf, 20728, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_50f9_0_comp_nf, 20729, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 20730, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 20731, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 20732, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5100_0_comp_nf, 20736, 0 }, /* SUB */ -{ op_5110_0_comp_nf, 20752, 0 }, /* SUB */ -{ op_5118_0_comp_nf, 20760, 0 }, /* SUB */ -{ op_5120_0_comp_nf, 20768, 0 }, /* SUB */ -{ op_5128_0_comp_nf, 20776, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5130_0_comp_nf, 20784, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5138_0_comp_nf, 20792, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5139_0_comp_nf, 20793, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5140_0_comp_nf, 20800, 0 }, /* SUB */ -{ op_5148_0_comp_nf, 20808, 0 }, /* SUBA */ -{ op_5150_0_comp_nf, 20816, 0 }, /* SUB */ -{ op_5158_0_comp_nf, 20824, 0 }, /* SUB */ -{ op_5160_0_comp_nf, 20832, 0 }, /* SUB */ -{ op_5168_0_comp_nf, 20840, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5170_0_comp_nf, 20848, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5178_0_comp_nf, 20856, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5179_0_comp_nf, 20857, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_5180_0_comp_nf, 20864, 0 }, /* SUB */ -{ op_5188_0_comp_nf, 20872, 0 }, /* SUBA */ -{ op_5190_0_comp_nf, 20880, 0 }, /* SUB */ -{ op_5198_0_comp_nf, 20888, 0 }, /* SUB */ -{ op_51a0_0_comp_nf, 20896, 0 }, /* SUB */ -{ op_51a8_0_comp_nf, 20904, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_51b0_0_comp_nf, 20912, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_51b8_0_comp_nf, 20920, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_51b9_0_comp_nf, 20921, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_51c0_0_comp_nf, 20928, 0 }, /* Scc */ -{ op_51c8_0_comp_nf, 20936, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_51d0_0_comp_nf, 20944, 0 }, /* Scc */ -{ op_51d8_0_comp_nf, 20952, 0 }, /* Scc */ -{ op_51e0_0_comp_nf, 20960, 0 }, /* Scc */ -{ op_51e8_0_comp_nf, 20968, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_51f0_0_comp_nf, 20976, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_51f8_0_comp_nf, 20984, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_51f9_0_comp_nf, 20985, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 20986, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 20987, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 20988, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_52c0_0_comp_nf, 21184, 0 }, /* Scc */ -{ op_52c8_0_comp_nf, 21192, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_52d0_0_comp_nf, 21200, 0 }, /* Scc */ -{ op_52d8_0_comp_nf, 21208, 0 }, /* Scc */ -{ op_52e0_0_comp_nf, 21216, 0 }, /* Scc */ -{ op_52e8_0_comp_nf, 21224, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_52f0_0_comp_nf, 21232, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_52f8_0_comp_nf, 21240, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_52f9_0_comp_nf, 21241, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 21242, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21243, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21244, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_53c0_0_comp_nf, 21440, 0 }, /* Scc */ -{ op_53c8_0_comp_nf, 21448, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_53d0_0_comp_nf, 21456, 0 }, /* Scc */ -{ op_53d8_0_comp_nf, 21464, 0 }, /* Scc */ -{ op_53e0_0_comp_nf, 21472, 0 }, /* Scc */ -{ op_53e8_0_comp_nf, 21480, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_53f0_0_comp_nf, 21488, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_53f8_0_comp_nf, 21496, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_53f9_0_comp_nf, 21497, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 21498, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21499, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21500, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_54c0_0_comp_nf, 21696, 0 }, /* Scc */ -{ op_54c8_0_comp_nf, 21704, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_54d0_0_comp_nf, 21712, 0 }, /* Scc */ -{ op_54d8_0_comp_nf, 21720, 0 }, /* Scc */ -{ op_54e0_0_comp_nf, 21728, 0 }, /* Scc */ -{ op_54e8_0_comp_nf, 21736, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_54f0_0_comp_nf, 21744, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_54f8_0_comp_nf, 21752, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_54f9_0_comp_nf, 21753, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 21754, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21755, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 21756, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_55c0_0_comp_nf, 21952, 0 }, /* Scc */ -{ op_55c8_0_comp_nf, 21960, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_55d0_0_comp_nf, 21968, 0 }, /* Scc */ -{ op_55d8_0_comp_nf, 21976, 0 }, /* Scc */ -{ op_55e0_0_comp_nf, 21984, 0 }, /* Scc */ -{ op_55e8_0_comp_nf, 21992, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_55f0_0_comp_nf, 22000, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_55f8_0_comp_nf, 22008, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_55f9_0_comp_nf, 22009, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22010, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22011, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22012, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_56c0_0_comp_nf, 22208, 0 }, /* Scc */ -{ op_56c8_0_comp_nf, 22216, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_56d0_0_comp_nf, 22224, 0 }, /* Scc */ -{ op_56d8_0_comp_nf, 22232, 0 }, /* Scc */ -{ op_56e0_0_comp_nf, 22240, 0 }, /* Scc */ -{ op_56e8_0_comp_nf, 22248, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_56f0_0_comp_nf, 22256, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_56f8_0_comp_nf, 22264, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_56f9_0_comp_nf, 22265, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22266, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22267, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22268, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_57c0_0_comp_nf, 22464, 0 }, /* Scc */ -{ op_57c8_0_comp_nf, 22472, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_57d0_0_comp_nf, 22480, 0 }, /* Scc */ -{ op_57d8_0_comp_nf, 22488, 0 }, /* Scc */ -{ op_57e0_0_comp_nf, 22496, 0 }, /* Scc */ -{ op_57e8_0_comp_nf, 22504, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_57f0_0_comp_nf, 22512, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_57f8_0_comp_nf, 22520, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_57f9_0_comp_nf, 22521, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22522, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22523, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22524, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22720, 0 }, /* Scc */ -{ NULL, 22728, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ NULL, 22736, 0 }, /* Scc */ -{ NULL, 22744, 0 }, /* Scc */ -{ NULL, 22752, 0 }, /* Scc */ -{ NULL, 22760, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22768, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22776, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22777, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 22778, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22779, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22780, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 22976, 0 }, /* Scc */ -{ NULL, 22984, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ NULL, 22992, 0 }, /* Scc */ -{ NULL, 23000, 0 }, /* Scc */ -{ NULL, 23008, 0 }, /* Scc */ -{ NULL, 23016, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23024, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23032, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23033, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23034, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23035, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23036, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5ac0_0_comp_nf, 23232, 0 }, /* Scc */ -{ op_5ac8_0_comp_nf, 23240, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5ad0_0_comp_nf, 23248, 0 }, /* Scc */ -{ op_5ad8_0_comp_nf, 23256, 0 }, /* Scc */ -{ op_5ae0_0_comp_nf, 23264, 0 }, /* Scc */ -{ op_5ae8_0_comp_nf, 23272, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5af0_0_comp_nf, 23280, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5af8_0_comp_nf, 23288, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5af9_0_comp_nf, 23289, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23290, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23291, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23292, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5bc0_0_comp_nf, 23488, 0 }, /* Scc */ -{ op_5bc8_0_comp_nf, 23496, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5bd0_0_comp_nf, 23504, 0 }, /* Scc */ -{ op_5bd8_0_comp_nf, 23512, 0 }, /* Scc */ -{ op_5be0_0_comp_nf, 23520, 0 }, /* Scc */ -{ op_5be8_0_comp_nf, 23528, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5bf0_0_comp_nf, 23536, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5bf8_0_comp_nf, 23544, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5bf9_0_comp_nf, 23545, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23546, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23547, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23548, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5cc0_0_comp_nf, 23744, 0 }, /* Scc */ -{ op_5cc8_0_comp_nf, 23752, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5cd0_0_comp_nf, 23760, 0 }, /* Scc */ -{ op_5cd8_0_comp_nf, 23768, 0 }, /* Scc */ -{ op_5ce0_0_comp_nf, 23776, 0 }, /* Scc */ -{ op_5ce8_0_comp_nf, 23784, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5cf0_0_comp_nf, 23792, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5cf8_0_comp_nf, 23800, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5cf9_0_comp_nf, 23801, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 23802, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23803, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 23804, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5dc0_0_comp_nf, 24000, 0 }, /* Scc */ -{ op_5dc8_0_comp_nf, 24008, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5dd0_0_comp_nf, 24016, 0 }, /* Scc */ -{ op_5dd8_0_comp_nf, 24024, 0 }, /* Scc */ -{ op_5de0_0_comp_nf, 24032, 0 }, /* Scc */ -{ op_5de8_0_comp_nf, 24040, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5df0_0_comp_nf, 24048, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5df8_0_comp_nf, 24056, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5df9_0_comp_nf, 24057, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 24058, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24059, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24060, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5ec0_0_comp_nf, 24256, 0 }, /* Scc */ -{ op_5ec8_0_comp_nf, 24264, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5ed0_0_comp_nf, 24272, 0 }, /* Scc */ -{ op_5ed8_0_comp_nf, 24280, 0 }, /* Scc */ -{ op_5ee0_0_comp_nf, 24288, 0 }, /* Scc */ -{ op_5ee8_0_comp_nf, 24296, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ef0_0_comp_nf, 24304, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ef8_0_comp_nf, 24312, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ef9_0_comp_nf, 24313, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 24314, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24315, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24316, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_5fc0_0_comp_nf, 24512, 0 }, /* Scc */ -{ op_5fc8_0_comp_nf, 24520, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV }, /* DBcc */ -{ op_5fd0_0_comp_nf, 24528, 0 }, /* Scc */ -{ op_5fd8_0_comp_nf, 24536, 0 }, /* Scc */ -{ op_5fe0_0_comp_nf, 24544, 0 }, /* Scc */ -{ op_5fe8_0_comp_nf, 24552, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ff0_0_comp_nf, 24560, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ff8_0_comp_nf, 24568, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ op_5ff9_0_comp_nf, 24569, COMP_OPCODE_LONG_OPCODE }, /* Scc */ -{ NULL, 24570, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24571, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ NULL, 24572, COMP_OPCODE_ISJUMP }, /* TRAPcc */ -{ op_6000_0_comp_nf, 24576, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISCJUMP }, /* Bcc */ -{ op_6001_0_comp_nf, 24577, COMP_OPCODE_ISCJUMP }, /* Bcc */ -{ op_60ff_0_comp_nf, 24831, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISCJUMP }, /* Bcc */ -{ op_6100_0_comp_nf, 24832, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISCJUMP }, /* BSR */ -{ op_6101_0_comp_nf, 24833, COMP_OPCODE_ISCJUMP }, /* BSR */ -{ op_61ff_0_comp_nf, 25087, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_ISCJUMP }, /* BSR */ -{ op_6200_0_comp_nf, 25088, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6201_0_comp_nf, 25089, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_62ff_0_comp_nf, 25343, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6300_0_comp_nf, 25344, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6301_0_comp_nf, 25345, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_63ff_0_comp_nf, 25599, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6400_0_comp_nf, 25600, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6401_0_comp_nf, 25601, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_64ff_0_comp_nf, 25855, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6500_0_comp_nf, 25856, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6501_0_comp_nf, 25857, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_65ff_0_comp_nf, 26111, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6600_0_comp_nf, 26112, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6601_0_comp_nf, 26113, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_66ff_0_comp_nf, 26367, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6700_0_comp_nf, 26368, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6701_0_comp_nf, 26369, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_67ff_0_comp_nf, 26623, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ NULL, 26624, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ NULL, 26625, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ NULL, 26879, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ NULL, 26880, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ NULL, 26881, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ NULL, 27135, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6a00_0_comp_nf, 27136, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6a01_0_comp_nf, 27137, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6aff_0_comp_nf, 27391, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6b00_0_comp_nf, 27392, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6b01_0_comp_nf, 27393, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6bff_0_comp_nf, 27647, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6c00_0_comp_nf, 27648, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6c01_0_comp_nf, 27649, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6cff_0_comp_nf, 27903, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6d00_0_comp_nf, 27904, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6d01_0_comp_nf, 27905, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6dff_0_comp_nf, 28159, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6e00_0_comp_nf, 28160, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6e01_0_comp_nf, 28161, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6eff_0_comp_nf, 28415, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6f00_0_comp_nf, 28416, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_6f01_0_comp_nf, 28417, COMP_OPCODE_ISJUMP }, /* Bcc */ -{ op_6fff_0_comp_nf, 28671, COMP_OPCODE_ISJUMP|COMP_OPCODE_LONG_OPCODE }, /* Bcc */ -{ op_7000_0_comp_nf, 28672, 0 }, /* MOVE */ -{ op_8000_0_comp_nf, 32768, 0 }, /* OR */ -{ op_8010_0_comp_nf, 32784, 0 }, /* OR */ -{ op_8018_0_comp_nf, 32792, 0 }, /* OR */ -{ op_8020_0_comp_nf, 32800, 0 }, /* OR */ -{ op_8028_0_comp_nf, 32808, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8030_0_comp_nf, 32816, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8038_0_comp_nf, 32824, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8039_0_comp_nf, 32825, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_803a_0_comp_nf, 32826, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_803b_0_comp_nf, 32827, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_803c_0_comp_nf, 32828, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8040_0_comp_nf, 32832, 0 }, /* OR */ -{ op_8050_0_comp_nf, 32848, 0 }, /* OR */ -{ op_8058_0_comp_nf, 32856, 0 }, /* OR */ -{ op_8060_0_comp_nf, 32864, 0 }, /* OR */ -{ op_8068_0_comp_nf, 32872, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8070_0_comp_nf, 32880, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8078_0_comp_nf, 32888, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8079_0_comp_nf, 32889, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_807a_0_comp_nf, 32890, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_807b_0_comp_nf, 32891, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_807c_0_comp_nf, 32892, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8080_0_comp_nf, 32896, 0 }, /* OR */ -{ op_8090_0_comp_nf, 32912, 0 }, /* OR */ -{ op_8098_0_comp_nf, 32920, 0 }, /* OR */ -{ op_80a0_0_comp_nf, 32928, 0 }, /* OR */ -{ op_80a8_0_comp_nf, 32936, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80b0_0_comp_nf, 32944, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80b8_0_comp_nf, 32952, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80b9_0_comp_nf, 32953, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80ba_0_comp_nf, 32954, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80bb_0_comp_nf, 32955, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_80bc_0_comp_nf, 32956, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 32960, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 32976, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 32984, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 32992, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33000, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33008, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33016, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33017, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33018, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33019, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33020, COMP_OPCODE_ISJUMP }, /* DIVU */ -{ NULL, 33024, 0 }, /* SBCD */ -{ NULL, 33032, 0 }, /* SBCD */ -{ op_8110_0_comp_nf, 33040, 0 }, /* OR */ -{ op_8118_0_comp_nf, 33048, 0 }, /* OR */ -{ op_8120_0_comp_nf, 33056, 0 }, /* OR */ -{ op_8128_0_comp_nf, 33064, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8130_0_comp_nf, 33072, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8138_0_comp_nf, 33080, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8139_0_comp_nf, 33081, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 33088, 0 }, /* PACK */ -{ NULL, 33096, 0 }, /* PACK */ -{ op_8150_0_comp_nf, 33104, 0 }, /* OR */ -{ op_8158_0_comp_nf, 33112, 0 }, /* OR */ -{ op_8160_0_comp_nf, 33120, 0 }, /* OR */ -{ op_8168_0_comp_nf, 33128, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8170_0_comp_nf, 33136, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8178_0_comp_nf, 33144, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_8179_0_comp_nf, 33145, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 33152, 0 }, /* UNPK */ -{ NULL, 33160, 0 }, /* UNPK */ -{ op_8190_0_comp_nf, 33168, 0 }, /* OR */ -{ op_8198_0_comp_nf, 33176, 0 }, /* OR */ -{ op_81a0_0_comp_nf, 33184, 0 }, /* OR */ -{ op_81a8_0_comp_nf, 33192, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_81b0_0_comp_nf, 33200, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_81b8_0_comp_nf, 33208, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ op_81b9_0_comp_nf, 33209, COMP_OPCODE_LONG_OPCODE }, /* OR */ -{ NULL, 33216, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33232, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33240, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33248, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33256, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33264, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33272, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33273, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33274, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33275, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ NULL, 33276, COMP_OPCODE_ISJUMP }, /* DIVS */ -{ op_9000_0_comp_nf, 36864, 0 }, /* SUB */ -{ op_9010_0_comp_nf, 36880, 0 }, /* SUB */ -{ op_9018_0_comp_nf, 36888, 0 }, /* SUB */ -{ op_9020_0_comp_nf, 36896, 0 }, /* SUB */ -{ op_9028_0_comp_nf, 36904, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9030_0_comp_nf, 36912, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9038_0_comp_nf, 36920, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9039_0_comp_nf, 36921, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_903a_0_comp_nf, 36922, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_903b_0_comp_nf, 36923, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_903c_0_comp_nf, 36924, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9040_0_comp_nf, 36928, 0 }, /* SUB */ -{ op_9048_0_comp_nf, 36936, 0 }, /* SUB */ -{ op_9050_0_comp_nf, 36944, 0 }, /* SUB */ -{ op_9058_0_comp_nf, 36952, 0 }, /* SUB */ -{ op_9060_0_comp_nf, 36960, 0 }, /* SUB */ -{ op_9068_0_comp_nf, 36968, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9070_0_comp_nf, 36976, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9078_0_comp_nf, 36984, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9079_0_comp_nf, 36985, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_907a_0_comp_nf, 36986, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_907b_0_comp_nf, 36987, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_907c_0_comp_nf, 36988, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9080_0_comp_nf, 36992, 0 }, /* SUB */ -{ op_9088_0_comp_nf, 37000, 0 }, /* SUB */ -{ op_9090_0_comp_nf, 37008, 0 }, /* SUB */ -{ op_9098_0_comp_nf, 37016, 0 }, /* SUB */ -{ op_90a0_0_comp_nf, 37024, 0 }, /* SUB */ -{ op_90a8_0_comp_nf, 37032, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90b0_0_comp_nf, 37040, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90b8_0_comp_nf, 37048, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90b9_0_comp_nf, 37049, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90ba_0_comp_nf, 37050, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90bb_0_comp_nf, 37051, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90bc_0_comp_nf, 37052, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_90c0_0_comp_nf, 37056, 0 }, /* SUBA */ -{ op_90c8_0_comp_nf, 37064, 0 }, /* SUBA */ -{ op_90d0_0_comp_nf, 37072, 0 }, /* SUBA */ -{ op_90d8_0_comp_nf, 37080, 0 }, /* SUBA */ -{ op_90e0_0_comp_nf, 37088, 0 }, /* SUBA */ -{ op_90e8_0_comp_nf, 37096, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90f0_0_comp_nf, 37104, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90f8_0_comp_nf, 37112, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90f9_0_comp_nf, 37113, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90fa_0_comp_nf, 37114, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90fb_0_comp_nf, 37115, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_90fc_0_comp_nf, 37116, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_9100_0_comp_nf, 37120, COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9108_0_comp_nf, 37128, COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9110_0_comp_nf, 37136, 0 }, /* SUB */ -{ op_9118_0_comp_nf, 37144, 0 }, /* SUB */ -{ op_9120_0_comp_nf, 37152, 0 }, /* SUB */ -{ op_9128_0_comp_nf, 37160, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9130_0_comp_nf, 37168, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9138_0_comp_nf, 37176, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9139_0_comp_nf, 37177, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9140_0_comp_nf, 37184, COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9148_0_comp_nf, 37192, COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9150_0_comp_nf, 37200, 0 }, /* SUB */ -{ op_9158_0_comp_nf, 37208, 0 }, /* SUB */ -{ op_9160_0_comp_nf, 37216, 0 }, /* SUB */ -{ op_9168_0_comp_nf, 37224, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9170_0_comp_nf, 37232, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9178_0_comp_nf, 37240, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9179_0_comp_nf, 37241, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_9180_0_comp_nf, 37248, COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9188_0_comp_nf, 37256, COMP_OPCODE_ISADDX }, /* SUBX */ -{ op_9190_0_comp_nf, 37264, 0 }, /* SUB */ -{ op_9198_0_comp_nf, 37272, 0 }, /* SUB */ -{ op_91a0_0_comp_nf, 37280, 0 }, /* SUB */ -{ op_91a8_0_comp_nf, 37288, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_91b0_0_comp_nf, 37296, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_91b8_0_comp_nf, 37304, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_91b9_0_comp_nf, 37305, COMP_OPCODE_LONG_OPCODE }, /* SUB */ -{ op_91c0_0_comp_nf, 37312, 0 }, /* SUBA */ -{ op_91c8_0_comp_nf, 37320, 0 }, /* SUBA */ -{ op_91d0_0_comp_nf, 37328, 0 }, /* SUBA */ -{ op_91d8_0_comp_nf, 37336, 0 }, /* SUBA */ -{ op_91e0_0_comp_nf, 37344, 0 }, /* SUBA */ -{ op_91e8_0_comp_nf, 37352, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91f0_0_comp_nf, 37360, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91f8_0_comp_nf, 37368, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91f9_0_comp_nf, 37369, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91fa_0_comp_nf, 37370, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91fb_0_comp_nf, 37371, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_91fc_0_comp_nf, 37372, COMP_OPCODE_LONG_OPCODE }, /* SUBA */ -{ op_b000_0_comp_nf, 45056, 0 }, /* CMP */ -{ op_b010_0_comp_nf, 45072, 0 }, /* CMP */ -{ op_b018_0_comp_nf, 45080, 0 }, /* CMP */ -{ op_b020_0_comp_nf, 45088, 0 }, /* CMP */ -{ op_b028_0_comp_nf, 45096, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b030_0_comp_nf, 45104, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b038_0_comp_nf, 45112, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b039_0_comp_nf, 45113, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b03a_0_comp_nf, 45114, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b03b_0_comp_nf, 45115, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b03c_0_comp_nf, 45116, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b040_0_comp_nf, 45120, 0 }, /* CMP */ -{ op_b048_0_comp_nf, 45128, 0 }, /* CMP */ -{ op_b050_0_comp_nf, 45136, 0 }, /* CMP */ -{ op_b058_0_comp_nf, 45144, 0 }, /* CMP */ -{ op_b060_0_comp_nf, 45152, 0 }, /* CMP */ -{ op_b068_0_comp_nf, 45160, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b070_0_comp_nf, 45168, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b078_0_comp_nf, 45176, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b079_0_comp_nf, 45177, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b07a_0_comp_nf, 45178, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b07b_0_comp_nf, 45179, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b07c_0_comp_nf, 45180, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b080_0_comp_nf, 45184, 0 }, /* CMP */ -{ op_b088_0_comp_nf, 45192, 0 }, /* CMP */ -{ op_b090_0_comp_nf, 45200, 0 }, /* CMP */ -{ op_b098_0_comp_nf, 45208, 0 }, /* CMP */ -{ op_b0a0_0_comp_nf, 45216, 0 }, /* CMP */ -{ op_b0a8_0_comp_nf, 45224, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0b0_0_comp_nf, 45232, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0b8_0_comp_nf, 45240, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0b9_0_comp_nf, 45241, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0ba_0_comp_nf, 45242, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0bb_0_comp_nf, 45243, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0bc_0_comp_nf, 45244, COMP_OPCODE_LONG_OPCODE }, /* CMP */ -{ op_b0c0_0_comp_nf, 45248, 0 }, /* CMPA */ -{ op_b0c8_0_comp_nf, 45256, 0 }, /* CMPA */ -{ op_b0d0_0_comp_nf, 45264, 0 }, /* CMPA */ -{ op_b0d8_0_comp_nf, 45272, 0 }, /* CMPA */ -{ op_b0e0_0_comp_nf, 45280, 0 }, /* CMPA */ -{ op_b0e8_0_comp_nf, 45288, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0f0_0_comp_nf, 45296, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0f8_0_comp_nf, 45304, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0f9_0_comp_nf, 45305, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0fa_0_comp_nf, 45306, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0fb_0_comp_nf, 45307, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b0fc_0_comp_nf, 45308, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b100_0_comp_nf, 45312, 0 }, /* EOR */ -{ op_b108_0_comp_nf, 45320, 0 }, /* CMPM */ -{ op_b110_0_comp_nf, 45328, 0 }, /* EOR */ -{ op_b118_0_comp_nf, 45336, 0 }, /* EOR */ -{ op_b120_0_comp_nf, 45344, 0 }, /* EOR */ -{ op_b128_0_comp_nf, 45352, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b130_0_comp_nf, 45360, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b138_0_comp_nf, 45368, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b139_0_comp_nf, 45369, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b140_0_comp_nf, 45376, 0 }, /* EOR */ -{ op_b148_0_comp_nf, 45384, 0 }, /* CMPM */ -{ op_b150_0_comp_nf, 45392, 0 }, /* EOR */ -{ op_b158_0_comp_nf, 45400, 0 }, /* EOR */ -{ op_b160_0_comp_nf, 45408, 0 }, /* EOR */ -{ op_b168_0_comp_nf, 45416, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b170_0_comp_nf, 45424, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b178_0_comp_nf, 45432, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b179_0_comp_nf, 45433, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b180_0_comp_nf, 45440, 0 }, /* EOR */ -{ op_b188_0_comp_nf, 45448, 0 }, /* CMPM */ -{ op_b190_0_comp_nf, 45456, 0 }, /* EOR */ -{ op_b198_0_comp_nf, 45464, 0 }, /* EOR */ -{ op_b1a0_0_comp_nf, 45472, 0 }, /* EOR */ -{ op_b1a8_0_comp_nf, 45480, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b1b0_0_comp_nf, 45488, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b1b8_0_comp_nf, 45496, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b1b9_0_comp_nf, 45497, COMP_OPCODE_LONG_OPCODE }, /* EOR */ -{ op_b1c0_0_comp_nf, 45504, 0 }, /* CMPA */ -{ op_b1c8_0_comp_nf, 45512, 0 }, /* CMPA */ -{ op_b1d0_0_comp_nf, 45520, 0 }, /* CMPA */ -{ op_b1d8_0_comp_nf, 45528, 0 }, /* CMPA */ -{ op_b1e0_0_comp_nf, 45536, 0 }, /* CMPA */ -{ op_b1e8_0_comp_nf, 45544, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1f0_0_comp_nf, 45552, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1f8_0_comp_nf, 45560, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1f9_0_comp_nf, 45561, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1fa_0_comp_nf, 45562, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1fb_0_comp_nf, 45563, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_b1fc_0_comp_nf, 45564, COMP_OPCODE_LONG_OPCODE }, /* CMPA */ -{ op_c000_0_comp_nf, 49152, 0 }, /* AND */ -{ op_c010_0_comp_nf, 49168, 0 }, /* AND */ -{ op_c018_0_comp_nf, 49176, 0 }, /* AND */ -{ op_c020_0_comp_nf, 49184, 0 }, /* AND */ -{ op_c028_0_comp_nf, 49192, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c030_0_comp_nf, 49200, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c038_0_comp_nf, 49208, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c039_0_comp_nf, 49209, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c03a_0_comp_nf, 49210, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c03b_0_comp_nf, 49211, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c03c_0_comp_nf, 49212, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c040_0_comp_nf, 49216, 0 }, /* AND */ -{ op_c050_0_comp_nf, 49232, 0 }, /* AND */ -{ op_c058_0_comp_nf, 49240, 0 }, /* AND */ -{ op_c060_0_comp_nf, 49248, 0 }, /* AND */ -{ op_c068_0_comp_nf, 49256, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c070_0_comp_nf, 49264, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c078_0_comp_nf, 49272, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c079_0_comp_nf, 49273, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c07a_0_comp_nf, 49274, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c07b_0_comp_nf, 49275, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c07c_0_comp_nf, 49276, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c080_0_comp_nf, 49280, 0 }, /* AND */ -{ op_c090_0_comp_nf, 49296, 0 }, /* AND */ -{ op_c098_0_comp_nf, 49304, 0 }, /* AND */ -{ op_c0a0_0_comp_nf, 49312, 0 }, /* AND */ -{ op_c0a8_0_comp_nf, 49320, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0b0_0_comp_nf, 49328, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0b8_0_comp_nf, 49336, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0b9_0_comp_nf, 49337, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0ba_0_comp_nf, 49338, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0bb_0_comp_nf, 49339, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0bc_0_comp_nf, 49340, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c0c0_0_comp_nf, 49344, 0 }, /* MULU */ -{ op_c0d0_0_comp_nf, 49360, 0 }, /* MULU */ -{ op_c0d8_0_comp_nf, 49368, 0 }, /* MULU */ -{ op_c0e0_0_comp_nf, 49376, 0 }, /* MULU */ -{ op_c0e8_0_comp_nf, 49384, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0f0_0_comp_nf, 49392, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0f8_0_comp_nf, 49400, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0f9_0_comp_nf, 49401, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0fa_0_comp_nf, 49402, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0fb_0_comp_nf, 49403, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ op_c0fc_0_comp_nf, 49404, COMP_OPCODE_LONG_OPCODE }, /* MULU */ -{ NULL, 49408, 0 }, /* ABCD */ -{ NULL, 49416, 0 }, /* ABCD */ -{ op_c110_0_comp_nf, 49424, 0 }, /* AND */ -{ op_c118_0_comp_nf, 49432, 0 }, /* AND */ -{ op_c120_0_comp_nf, 49440, 0 }, /* AND */ -{ op_c128_0_comp_nf, 49448, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c130_0_comp_nf, 49456, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c138_0_comp_nf, 49464, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c139_0_comp_nf, 49465, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c140_0_comp_nf, 49472, 0 }, /* EXG */ -{ op_c148_0_comp_nf, 49480, 0 }, /* EXG */ -{ op_c150_0_comp_nf, 49488, 0 }, /* AND */ -{ op_c158_0_comp_nf, 49496, 0 }, /* AND */ -{ op_c160_0_comp_nf, 49504, 0 }, /* AND */ -{ op_c168_0_comp_nf, 49512, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c170_0_comp_nf, 49520, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c178_0_comp_nf, 49528, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c179_0_comp_nf, 49529, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c188_0_comp_nf, 49544, 0 }, /* EXG */ -{ op_c190_0_comp_nf, 49552, 0 }, /* AND */ -{ op_c198_0_comp_nf, 49560, 0 }, /* AND */ -{ op_c1a0_0_comp_nf, 49568, 0 }, /* AND */ -{ op_c1a8_0_comp_nf, 49576, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c1b0_0_comp_nf, 49584, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c1b8_0_comp_nf, 49592, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c1b9_0_comp_nf, 49593, COMP_OPCODE_LONG_OPCODE }, /* AND */ -{ op_c1c0_0_comp_nf, 49600, 0 }, /* MULS */ -{ op_c1d0_0_comp_nf, 49616, 0 }, /* MULS */ -{ op_c1d8_0_comp_nf, 49624, 0 }, /* MULS */ -{ op_c1e0_0_comp_nf, 49632, 0 }, /* MULS */ -{ op_c1e8_0_comp_nf, 49640, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1f0_0_comp_nf, 49648, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1f8_0_comp_nf, 49656, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1f9_0_comp_nf, 49657, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1fa_0_comp_nf, 49658, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1fb_0_comp_nf, 49659, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_c1fc_0_comp_nf, 49660, COMP_OPCODE_LONG_OPCODE }, /* MULS */ -{ op_d000_0_comp_nf, 53248, 0 }, /* ADD */ -{ op_d010_0_comp_nf, 53264, 0 }, /* ADD */ -{ op_d018_0_comp_nf, 53272, 0 }, /* ADD */ -{ op_d020_0_comp_nf, 53280, 0 }, /* ADD */ -{ op_d028_0_comp_nf, 53288, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d030_0_comp_nf, 53296, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d038_0_comp_nf, 53304, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d039_0_comp_nf, 53305, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d03a_0_comp_nf, 53306, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d03b_0_comp_nf, 53307, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d03c_0_comp_nf, 53308, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d040_0_comp_nf, 53312, 0 }, /* ADD */ -{ op_d048_0_comp_nf, 53320, 0 }, /* ADD */ -{ op_d050_0_comp_nf, 53328, 0 }, /* ADD */ -{ op_d058_0_comp_nf, 53336, 0 }, /* ADD */ -{ op_d060_0_comp_nf, 53344, 0 }, /* ADD */ -{ op_d068_0_comp_nf, 53352, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d070_0_comp_nf, 53360, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d078_0_comp_nf, 53368, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d079_0_comp_nf, 53369, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d07a_0_comp_nf, 53370, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d07b_0_comp_nf, 53371, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d07c_0_comp_nf, 53372, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d080_0_comp_nf, 53376, 0 }, /* ADD */ -{ op_d088_0_comp_nf, 53384, 0 }, /* ADD */ -{ op_d090_0_comp_nf, 53392, 0 }, /* ADD */ -{ op_d098_0_comp_nf, 53400, 0 }, /* ADD */ -{ op_d0a0_0_comp_nf, 53408, 0 }, /* ADD */ -{ op_d0a8_0_comp_nf, 53416, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0b0_0_comp_nf, 53424, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0b8_0_comp_nf, 53432, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0b9_0_comp_nf, 53433, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0ba_0_comp_nf, 53434, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0bb_0_comp_nf, 53435, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0bc_0_comp_nf, 53436, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d0c0_0_comp_nf, 53440, 0 }, /* ADDA */ -{ op_d0c8_0_comp_nf, 53448, 0 }, /* ADDA */ -{ op_d0d0_0_comp_nf, 53456, 0 }, /* ADDA */ -{ op_d0d8_0_comp_nf, 53464, 0 }, /* ADDA */ -{ op_d0e0_0_comp_nf, 53472, 0 }, /* ADDA */ -{ op_d0e8_0_comp_nf, 53480, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0f0_0_comp_nf, 53488, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0f8_0_comp_nf, 53496, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0f9_0_comp_nf, 53497, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0fa_0_comp_nf, 53498, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0fb_0_comp_nf, 53499, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d0fc_0_comp_nf, 53500, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d100_0_comp_nf, 53504, COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d108_0_comp_nf, 53512, COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d110_0_comp_nf, 53520, 0 }, /* ADD */ -{ op_d118_0_comp_nf, 53528, 0 }, /* ADD */ -{ op_d120_0_comp_nf, 53536, 0 }, /* ADD */ -{ op_d128_0_comp_nf, 53544, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d130_0_comp_nf, 53552, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d138_0_comp_nf, 53560, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d139_0_comp_nf, 53561, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d140_0_comp_nf, 53568, COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d148_0_comp_nf, 53576, COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d150_0_comp_nf, 53584, 0 }, /* ADD */ -{ op_d158_0_comp_nf, 53592, 0 }, /* ADD */ -{ op_d160_0_comp_nf, 53600, 0 }, /* ADD */ -{ op_d168_0_comp_nf, 53608, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d170_0_comp_nf, 53616, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d178_0_comp_nf, 53624, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d179_0_comp_nf, 53625, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d180_0_comp_nf, 53632, COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d188_0_comp_nf, 53640, COMP_OPCODE_ISADDX }, /* ADDX */ -{ op_d190_0_comp_nf, 53648, 0 }, /* ADD */ -{ op_d198_0_comp_nf, 53656, 0 }, /* ADD */ -{ op_d1a0_0_comp_nf, 53664, 0 }, /* ADD */ -{ op_d1a8_0_comp_nf, 53672, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d1b0_0_comp_nf, 53680, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d1b8_0_comp_nf, 53688, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d1b9_0_comp_nf, 53689, COMP_OPCODE_LONG_OPCODE }, /* ADD */ -{ op_d1c0_0_comp_nf, 53696, 0 }, /* ADDA */ -{ op_d1c8_0_comp_nf, 53704, 0 }, /* ADDA */ -{ op_d1d0_0_comp_nf, 53712, 0 }, /* ADDA */ -{ op_d1d8_0_comp_nf, 53720, 0 }, /* ADDA */ -{ op_d1e0_0_comp_nf, 53728, 0 }, /* ADDA */ -{ op_d1e8_0_comp_nf, 53736, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1f0_0_comp_nf, 53744, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1f8_0_comp_nf, 53752, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1f9_0_comp_nf, 53753, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1fa_0_comp_nf, 53754, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1fb_0_comp_nf, 53755, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_d1fc_0_comp_nf, 53756, COMP_OPCODE_LONG_OPCODE }, /* ADDA */ -{ op_e000_0_comp_nf, 57344, 0 }, /* ASR */ -{ op_e008_0_comp_nf, 57352, 0 }, /* LSR */ -{ NULL, 57360, 0 }, /* ROXR */ -{ op_e018_0_comp_nf, 57368, 0 }, /* ROR */ -{ op_e020_0_comp_nf, 57376, COMP_OPCODE_CMOV }, /* ASR */ -{ op_e028_0_comp_nf, 57384, COMP_OPCODE_CMOV }, /* LSR */ -{ NULL, 57392, 0 }, /* ROXR */ -{ op_e038_0_comp_nf, 57400, 0 }, /* ROR */ -{ op_e040_0_comp_nf, 57408, 0 }, /* ASR */ -{ op_e048_0_comp_nf, 57416, 0 }, /* LSR */ -{ NULL, 57424, 0 }, /* ROXR */ -{ op_e058_0_comp_nf, 57432, 0 }, /* ROR */ -{ op_e060_0_comp_nf, 57440, COMP_OPCODE_CMOV }, /* ASR */ -{ op_e068_0_comp_nf, 57448, COMP_OPCODE_CMOV }, /* LSR */ -{ NULL, 57456, 0 }, /* ROXR */ -{ op_e078_0_comp_nf, 57464, 0 }, /* ROR */ -{ op_e080_0_comp_nf, 57472, 0 }, /* ASR */ -{ op_e088_0_comp_nf, 57480, 0 }, /* LSR */ -{ NULL, 57488, 0 }, /* ROXR */ -{ op_e098_0_comp_nf, 57496, 0 }, /* ROR */ -{ op_e0a0_0_comp_nf, 57504, COMP_OPCODE_CMOV }, /* ASR */ -{ op_e0a8_0_comp_nf, 57512, COMP_OPCODE_CMOV }, /* LSR */ -{ NULL, 57520, 0 }, /* ROXR */ -{ op_e0b8_0_comp_nf, 57528, 0 }, /* ROR */ -{ NULL, 57552, 0 }, /* ASRW */ -{ NULL, 57560, 0 }, /* ASRW */ -{ NULL, 57568, 0 }, /* ASRW */ -{ NULL, 57576, 0 }, /* ASRW */ -{ NULL, 57584, 0 }, /* ASRW */ -{ NULL, 57592, 0 }, /* ASRW */ -{ NULL, 57593, 0 }, /* ASRW */ -{ op_e100_0_comp_nf, 57600, 0 }, /* ASL */ -{ op_e108_0_comp_nf, 57608, 0 }, /* LSL */ -{ NULL, 57616, 0 }, /* ROXL */ -{ op_e118_0_comp_nf, 57624, 0 }, /* ROL */ -{ op_e120_0_comp_nf, 57632, COMP_OPCODE_CMOV }, /* ASL */ -{ op_e128_0_comp_nf, 57640, COMP_OPCODE_CMOV }, /* LSL */ -{ NULL, 57648, 0 }, /* ROXL */ -{ op_e138_0_comp_nf, 57656, 0 }, /* ROL */ -{ op_e140_0_comp_nf, 57664, 0 }, /* ASL */ -{ op_e148_0_comp_nf, 57672, 0 }, /* LSL */ -{ NULL, 57680, 0 }, /* ROXL */ -{ op_e158_0_comp_nf, 57688, 0 }, /* ROL */ -{ op_e160_0_comp_nf, 57696, COMP_OPCODE_CMOV }, /* ASL */ -{ op_e168_0_comp_nf, 57704, COMP_OPCODE_CMOV }, /* LSL */ -{ NULL, 57712, 0 }, /* ROXL */ -{ op_e178_0_comp_nf, 57720, 0 }, /* ROL */ -{ op_e180_0_comp_nf, 57728, 0 }, /* ASL */ -{ op_e188_0_comp_nf, 57736, 0 }, /* LSL */ -{ NULL, 57744, 0 }, /* ROXL */ -{ op_e198_0_comp_nf, 57752, 0 }, /* ROL */ -{ op_e1a0_0_comp_nf, 57760, COMP_OPCODE_CMOV }, /* ASL */ -{ op_e1a8_0_comp_nf, 57768, COMP_OPCODE_CMOV }, /* LSL */ -{ NULL, 57776, 0 }, /* ROXL */ -{ op_e1b8_0_comp_nf, 57784, 0 }, /* ROL */ -{ NULL, 57808, 0 }, /* ASLW */ -{ NULL, 57816, 0 }, /* ASLW */ -{ NULL, 57824, 0 }, /* ASLW */ -{ NULL, 57832, 0 }, /* ASLW */ -{ NULL, 57840, 0 }, /* ASLW */ -{ NULL, 57848, 0 }, /* ASLW */ -{ NULL, 57849, 0 }, /* ASLW */ -{ NULL, 58064, 0 }, /* LSRW */ -{ NULL, 58072, 0 }, /* LSRW */ -{ NULL, 58080, 0 }, /* LSRW */ -{ NULL, 58088, 0 }, /* LSRW */ -{ NULL, 58096, 0 }, /* LSRW */ -{ NULL, 58104, 0 }, /* LSRW */ -{ NULL, 58105, 0 }, /* LSRW */ -{ NULL, 58320, 0 }, /* LSLW */ -{ NULL, 58328, 0 }, /* LSLW */ -{ NULL, 58336, 0 }, /* LSLW */ -{ NULL, 58344, 0 }, /* LSLW */ -{ NULL, 58352, 0 }, /* LSLW */ -{ NULL, 58360, 0 }, /* LSLW */ -{ NULL, 58361, 0 }, /* LSLW */ -{ NULL, 58576, 0 }, /* ROXRW */ -{ NULL, 58584, 0 }, /* ROXRW */ -{ NULL, 58592, 0 }, /* ROXRW */ -{ NULL, 58600, 0 }, /* ROXRW */ -{ NULL, 58608, 0 }, /* ROXRW */ -{ NULL, 58616, 0 }, /* ROXRW */ -{ NULL, 58617, 0 }, /* ROXRW */ -{ NULL, 58832, 0 }, /* ROXLW */ -{ NULL, 58840, 0 }, /* ROXLW */ -{ NULL, 58848, 0 }, /* ROXLW */ -{ NULL, 58856, 0 }, /* ROXLW */ -{ NULL, 58864, 0 }, /* ROXLW */ -{ NULL, 58872, 0 }, /* ROXLW */ -{ NULL, 58873, 0 }, /* ROXLW */ -{ NULL, 59088, 0 }, /* RORW */ -{ NULL, 59096, 0 }, /* RORW */ -{ NULL, 59104, 0 }, /* RORW */ -{ NULL, 59112, 0 }, /* RORW */ -{ NULL, 59120, 0 }, /* RORW */ -{ NULL, 59128, 0 }, /* RORW */ -{ NULL, 59129, 0 }, /* RORW */ -{ NULL, 59344, 0 }, /* ROLW */ -{ NULL, 59352, 0 }, /* ROLW */ -{ NULL, 59360, 0 }, /* ROLW */ -{ NULL, 59368, 0 }, /* ROLW */ -{ NULL, 59376, 0 }, /* ROLW */ -{ NULL, 59384, 0 }, /* ROLW */ -{ NULL, 59385, 0 }, /* ROLW */ -{ NULL, 59584, 0 }, /* BFTST */ -{ NULL, 59600, 0 }, /* BFTST */ -{ NULL, 59624, 0 }, /* BFTST */ -{ NULL, 59632, 0 }, /* BFTST */ -{ NULL, 59640, 0 }, /* BFTST */ -{ NULL, 59641, 0 }, /* BFTST */ -{ NULL, 59642, 0 }, /* BFTST */ -{ NULL, 59643, 0 }, /* BFTST */ -{ NULL, 59840, 0 }, /* BFEXTU */ -{ NULL, 59856, 0 }, /* BFEXTU */ -{ NULL, 59880, 0 }, /* BFEXTU */ -{ NULL, 59888, 0 }, /* BFEXTU */ -{ NULL, 59896, 0 }, /* BFEXTU */ -{ NULL, 59897, 0 }, /* BFEXTU */ -{ NULL, 59898, 0 }, /* BFEXTU */ -{ NULL, 59899, 0 }, /* BFEXTU */ -{ NULL, 60096, 0 }, /* BFCHG */ -{ NULL, 60112, 0 }, /* BFCHG */ -{ NULL, 60136, 0 }, /* BFCHG */ -{ NULL, 60144, 0 }, /* BFCHG */ -{ NULL, 60152, 0 }, /* BFCHG */ -{ NULL, 60153, 0 }, /* BFCHG */ -{ NULL, 60352, 0 }, /* BFEXTS */ -{ NULL, 60368, 0 }, /* BFEXTS */ -{ NULL, 60392, 0 }, /* BFEXTS */ -{ NULL, 60400, 0 }, /* BFEXTS */ -{ NULL, 60408, 0 }, /* BFEXTS */ -{ NULL, 60409, 0 }, /* BFEXTS */ -{ NULL, 60410, 0 }, /* BFEXTS */ -{ NULL, 60411, 0 }, /* BFEXTS */ -{ NULL, 60608, 0 }, /* BFCLR */ -{ NULL, 60624, 0 }, /* BFCLR */ -{ NULL, 60648, 0 }, /* BFCLR */ -{ NULL, 60656, 0 }, /* BFCLR */ -{ NULL, 60664, 0 }, /* BFCLR */ -{ NULL, 60665, 0 }, /* BFCLR */ -{ NULL, 60864, 0 }, /* BFFFO */ -{ NULL, 60880, 0 }, /* BFFFO */ -{ NULL, 60904, 0 }, /* BFFFO */ -{ NULL, 60912, 0 }, /* BFFFO */ -{ NULL, 60920, 0 }, /* BFFFO */ -{ NULL, 60921, 0 }, /* BFFFO */ -{ NULL, 60922, 0 }, /* BFFFO */ -{ NULL, 60923, 0 }, /* BFFFO */ -{ NULL, 61120, 0 }, /* BFSET */ -{ NULL, 61136, 0 }, /* BFSET */ -{ NULL, 61160, 0 }, /* BFSET */ -{ NULL, 61168, 0 }, /* BFSET */ -{ NULL, 61176, 0 }, /* BFSET */ -{ NULL, 61177, 0 }, /* BFSET */ -{ NULL, 61376, 0 }, /* BFINS */ -{ NULL, 61392, 0 }, /* BFINS */ -{ NULL, 61416, 0 }, /* BFINS */ -{ NULL, 61424, 0 }, /* BFINS */ -{ NULL, 61432, 0 }, /* BFINS */ -{ NULL, 61433, 0 }, /* BFINS */ -{ NULL, 61440, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61448, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61456, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61464, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61472, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61480, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61488, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61496, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ NULL, 61497, COMP_OPCODE_ISJUMP }, /* MMUOP030 */ -{ op_f200_0_comp_nf, 61952, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f208_0_comp_nf, 61960, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f210_0_comp_nf, 61968, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f218_0_comp_nf, 61976, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f220_0_comp_nf, 61984, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f228_0_comp_nf, 61992, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f230_0_comp_nf, 62000, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f238_0_comp_nf, 62008, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f239_0_comp_nf, 62009, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f23a_0_comp_nf, 62010, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f23b_0_comp_nf, 62011, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f23c_0_comp_nf, 62012, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_USES_FPU }, /* FPP */ -{ op_f240_0_comp_nf, 62016, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ NULL, 62024, COMP_OPCODE_ISJUMP|COMP_OPCODE_USES_FPU }, /* FDBcc */ -{ op_f250_0_comp_nf, 62032, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f258_0_comp_nf, 62040, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f260_0_comp_nf, 62048, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f268_0_comp_nf, 62056, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f270_0_comp_nf, 62064, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f278_0_comp_nf, 62072, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ op_f279_0_comp_nf, 62073, COMP_OPCODE_LONG_OPCODE|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FScc */ -{ NULL, 62074, COMP_OPCODE_ISJUMP|COMP_OPCODE_USES_FPU }, /* FTRAPcc */ -{ NULL, 62075, COMP_OPCODE_ISJUMP|COMP_OPCODE_USES_FPU }, /* FTRAPcc */ -{ NULL, 62076, COMP_OPCODE_ISJUMP|COMP_OPCODE_USES_FPU }, /* FTRAPcc */ -{ op_f280_0_comp_nf, 62080, COMP_OPCODE_ISJUMP|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FBcc */ -{ op_f2c0_0_comp_nf, 62144, COMP_OPCODE_ISJUMP|COMP_OPCODE_CMOV|COMP_OPCODE_USES_FPU }, /* FBcc */ -{ NULL, 62224, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62240, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62248, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62256, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62264, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62265, COMP_OPCODE_USES_FPU }, /* FSAVE */ -{ NULL, 62288, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62296, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62312, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62320, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62328, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62329, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62330, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62331, COMP_OPCODE_USES_FPU }, /* FRESTORE */ -{ NULL, 62472, COMP_OPCODE_ISJUMP }, /* CINVL */ -{ NULL, 62480, COMP_OPCODE_ISJUMP }, /* CINVP */ -{ NULL, 62488, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62489, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62490, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62491, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62492, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62493, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62494, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62495, COMP_OPCODE_ISJUMP }, /* CINVA */ -{ NULL, 62504, COMP_OPCODE_ISJUMP }, /* CPUSHL */ -{ NULL, 62512, COMP_OPCODE_ISJUMP }, /* CPUSHP */ -{ NULL, 62520, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62521, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62522, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62523, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62524, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62525, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62526, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62527, COMP_OPCODE_ISJUMP }, /* CPUSHA */ -{ NULL, 62720, COMP_OPCODE_ISJUMP }, /* PFLUSHN */ -{ NULL, 62728, COMP_OPCODE_ISJUMP }, /* PFLUSH */ -{ NULL, 62736, COMP_OPCODE_ISJUMP }, /* PFLUSHAN */ -{ NULL, 62744, COMP_OPCODE_ISJUMP }, /* PFLUSHA */ -{ NULL, 62792, COMP_OPCODE_ISJUMP }, /* PTESTW */ -{ NULL, 62824, COMP_OPCODE_ISJUMP }, /* PTESTR */ -{ NULL, 62856, COMP_OPCODE_ISJUMP }, /* PLPAW */ -{ NULL, 62920, COMP_OPCODE_ISJUMP }, /* PLPAR */ -{ op_f600_0_comp_nf, 62976, COMP_OPCODE_LONG_OPCODE }, /* MOVE16 */ -{ op_f608_0_comp_nf, 62984, COMP_OPCODE_LONG_OPCODE }, /* MOVE16 */ -{ op_f610_0_comp_nf, 62992, COMP_OPCODE_LONG_OPCODE }, /* MOVE16 */ -{ op_f618_0_comp_nf, 63000, COMP_OPCODE_LONG_OPCODE }, /* MOVE16 */ -{ op_f620_0_comp_nf, 63008, COMP_OPCODE_LONG_OPCODE }, /* MOVE16 */ -{ NULL, 63488, COMP_OPCODE_ISJUMP }, /* LPSTOP */ -{ 0, 65536, 0 }}; +#elif defined(CPU_i386) || defined(CPU_x86_64) || defined(__i386__) || \ + defined(__x86_64__) || defined(_M_IX86) || defined(_M_AMD64) +#include "x86/compstbl_x86.cpp" #endif -#endif /* CPU_AARCH64 */ diff --git a/jit/comptbl.h b/jit/comptbl.h index 77fc1bc8..e4b68d51 100644 --- a/jit/comptbl.h +++ b/jit/comptbl.h @@ -1,2807 +1,12 @@ -#if defined(CPU_AARCH64) +#ifndef WINUAE_JIT_COMPTBL_H +#define WINUAE_JIT_COMPTBL_H + +#if defined(CPU_arm) || defined(CPU_AARCH64) || defined(__aarch64__) || \ + defined(_M_ARM64) || defined(_M_ARM64EC) #include "arm/comptbl_arm.h" -#else -extern const struct comptbl op_smalltbl_0_comp_nf[]; -extern const struct comptbl op_smalltbl_0_comp_ff[]; -extern compop_func op_0_0_comp_ff; -extern compop_func op_10_0_comp_ff; -extern compop_func op_18_0_comp_ff; -extern compop_func op_20_0_comp_ff; -extern compop_func op_28_0_comp_ff; -extern compop_func op_30_0_comp_ff; -extern compop_func op_38_0_comp_ff; -extern compop_func op_39_0_comp_ff; -extern compop_func op_40_0_comp_ff; -extern compop_func op_50_0_comp_ff; -extern compop_func op_58_0_comp_ff; -extern compop_func op_60_0_comp_ff; -extern compop_func op_68_0_comp_ff; -extern compop_func op_70_0_comp_ff; -extern compop_func op_78_0_comp_ff; -extern compop_func op_79_0_comp_ff; -extern compop_func op_80_0_comp_ff; -extern compop_func op_90_0_comp_ff; -extern compop_func op_98_0_comp_ff; -extern compop_func op_a0_0_comp_ff; -extern compop_func op_a8_0_comp_ff; -extern compop_func op_b0_0_comp_ff; -extern compop_func op_b8_0_comp_ff; -extern compop_func op_b9_0_comp_ff; -extern compop_func op_100_0_comp_ff; -extern compop_func op_110_0_comp_ff; -extern compop_func op_118_0_comp_ff; -extern compop_func op_120_0_comp_ff; -extern compop_func op_128_0_comp_ff; -extern compop_func op_130_0_comp_ff; -extern compop_func op_138_0_comp_ff; -extern compop_func op_139_0_comp_ff; -extern compop_func op_13a_0_comp_ff; -extern compop_func op_13b_0_comp_ff; -extern compop_func op_13c_0_comp_ff; -extern compop_func op_140_0_comp_ff; -extern compop_func op_150_0_comp_ff; -extern compop_func op_158_0_comp_ff; -extern compop_func op_160_0_comp_ff; -extern compop_func op_168_0_comp_ff; -extern compop_func op_170_0_comp_ff; -extern compop_func op_178_0_comp_ff; -extern compop_func op_179_0_comp_ff; -extern compop_func op_180_0_comp_ff; -extern compop_func op_190_0_comp_ff; -extern compop_func op_198_0_comp_ff; -extern compop_func op_1a0_0_comp_ff; -extern compop_func op_1a8_0_comp_ff; -extern compop_func op_1b0_0_comp_ff; -extern compop_func op_1b8_0_comp_ff; -extern compop_func op_1b9_0_comp_ff; -extern compop_func op_1c0_0_comp_ff; -extern compop_func op_1d0_0_comp_ff; -extern compop_func op_1d8_0_comp_ff; -extern compop_func op_1e0_0_comp_ff; -extern compop_func op_1e8_0_comp_ff; -extern compop_func op_1f0_0_comp_ff; -extern compop_func op_1f8_0_comp_ff; -extern compop_func op_1f9_0_comp_ff; -extern compop_func op_200_0_comp_ff; -extern compop_func op_210_0_comp_ff; -extern compop_func op_218_0_comp_ff; -extern compop_func op_220_0_comp_ff; -extern compop_func op_228_0_comp_ff; -extern compop_func op_230_0_comp_ff; -extern compop_func op_238_0_comp_ff; -extern compop_func op_239_0_comp_ff; -extern compop_func op_240_0_comp_ff; -extern compop_func op_250_0_comp_ff; -extern compop_func op_258_0_comp_ff; -extern compop_func op_260_0_comp_ff; -extern compop_func op_268_0_comp_ff; -extern compop_func op_270_0_comp_ff; -extern compop_func op_278_0_comp_ff; -extern compop_func op_279_0_comp_ff; -extern compop_func op_280_0_comp_ff; -extern compop_func op_290_0_comp_ff; -extern compop_func op_298_0_comp_ff; -extern compop_func op_2a0_0_comp_ff; -extern compop_func op_2a8_0_comp_ff; -extern compop_func op_2b0_0_comp_ff; -extern compop_func op_2b8_0_comp_ff; -extern compop_func op_2b9_0_comp_ff; -extern compop_func op_400_0_comp_ff; -extern compop_func op_410_0_comp_ff; -extern compop_func op_418_0_comp_ff; -extern compop_func op_420_0_comp_ff; -extern compop_func op_428_0_comp_ff; -extern compop_func op_430_0_comp_ff; -extern compop_func op_438_0_comp_ff; -extern compop_func op_439_0_comp_ff; -extern compop_func op_440_0_comp_ff; -extern compop_func op_450_0_comp_ff; -extern compop_func op_458_0_comp_ff; -extern compop_func op_460_0_comp_ff; -extern compop_func op_468_0_comp_ff; -extern compop_func op_470_0_comp_ff; -extern compop_func op_478_0_comp_ff; -extern compop_func op_479_0_comp_ff; -extern compop_func op_480_0_comp_ff; -extern compop_func op_490_0_comp_ff; -extern compop_func op_498_0_comp_ff; -extern compop_func op_4a0_0_comp_ff; -extern compop_func op_4a8_0_comp_ff; -extern compop_func op_4b0_0_comp_ff; -extern compop_func op_4b8_0_comp_ff; -extern compop_func op_4b9_0_comp_ff; -extern compop_func op_600_0_comp_ff; -extern compop_func op_610_0_comp_ff; -extern compop_func op_618_0_comp_ff; -extern compop_func op_620_0_comp_ff; -extern compop_func op_628_0_comp_ff; -extern compop_func op_630_0_comp_ff; -extern compop_func op_638_0_comp_ff; -extern compop_func op_639_0_comp_ff; -extern compop_func op_640_0_comp_ff; -extern compop_func op_650_0_comp_ff; -extern compop_func op_658_0_comp_ff; -extern compop_func op_660_0_comp_ff; -extern compop_func op_668_0_comp_ff; -extern compop_func op_670_0_comp_ff; -extern compop_func op_678_0_comp_ff; -extern compop_func op_679_0_comp_ff; -extern compop_func op_680_0_comp_ff; -extern compop_func op_690_0_comp_ff; -extern compop_func op_698_0_comp_ff; -extern compop_func op_6a0_0_comp_ff; -extern compop_func op_6a8_0_comp_ff; -extern compop_func op_6b0_0_comp_ff; -extern compop_func op_6b8_0_comp_ff; -extern compop_func op_6b9_0_comp_ff; -extern compop_func op_800_0_comp_ff; -extern compop_func op_810_0_comp_ff; -extern compop_func op_818_0_comp_ff; -extern compop_func op_820_0_comp_ff; -extern compop_func op_828_0_comp_ff; -extern compop_func op_830_0_comp_ff; -extern compop_func op_838_0_comp_ff; -extern compop_func op_839_0_comp_ff; -extern compop_func op_83a_0_comp_ff; -extern compop_func op_83b_0_comp_ff; -extern compop_func op_840_0_comp_ff; -extern compop_func op_850_0_comp_ff; -extern compop_func op_858_0_comp_ff; -extern compop_func op_860_0_comp_ff; -extern compop_func op_868_0_comp_ff; -extern compop_func op_870_0_comp_ff; -extern compop_func op_878_0_comp_ff; -extern compop_func op_879_0_comp_ff; -extern compop_func op_880_0_comp_ff; -extern compop_func op_890_0_comp_ff; -extern compop_func op_898_0_comp_ff; -extern compop_func op_8a0_0_comp_ff; -extern compop_func op_8a8_0_comp_ff; -extern compop_func op_8b0_0_comp_ff; -extern compop_func op_8b8_0_comp_ff; -extern compop_func op_8b9_0_comp_ff; -extern compop_func op_8c0_0_comp_ff; -extern compop_func op_8d0_0_comp_ff; -extern compop_func op_8d8_0_comp_ff; -extern compop_func op_8e0_0_comp_ff; -extern compop_func op_8e8_0_comp_ff; -extern compop_func op_8f0_0_comp_ff; -extern compop_func op_8f8_0_comp_ff; -extern compop_func op_8f9_0_comp_ff; -extern compop_func op_a00_0_comp_ff; -extern compop_func op_a10_0_comp_ff; -extern compop_func op_a18_0_comp_ff; -extern compop_func op_a20_0_comp_ff; -extern compop_func op_a28_0_comp_ff; -extern compop_func op_a30_0_comp_ff; -extern compop_func op_a38_0_comp_ff; -extern compop_func op_a39_0_comp_ff; -extern compop_func op_a40_0_comp_ff; -extern compop_func op_a50_0_comp_ff; -extern compop_func op_a58_0_comp_ff; -extern compop_func op_a60_0_comp_ff; -extern compop_func op_a68_0_comp_ff; -extern compop_func op_a70_0_comp_ff; -extern compop_func op_a78_0_comp_ff; -extern compop_func op_a79_0_comp_ff; -extern compop_func op_a80_0_comp_ff; -extern compop_func op_a90_0_comp_ff; -extern compop_func op_a98_0_comp_ff; -extern compop_func op_aa0_0_comp_ff; -extern compop_func op_aa8_0_comp_ff; -extern compop_func op_ab0_0_comp_ff; -extern compop_func op_ab8_0_comp_ff; -extern compop_func op_ab9_0_comp_ff; -extern compop_func op_c00_0_comp_ff; -extern compop_func op_c10_0_comp_ff; -extern compop_func op_c18_0_comp_ff; -extern compop_func op_c20_0_comp_ff; -extern compop_func op_c28_0_comp_ff; -extern compop_func op_c30_0_comp_ff; -extern compop_func op_c38_0_comp_ff; -extern compop_func op_c39_0_comp_ff; -extern compop_func op_c3a_0_comp_ff; -extern compop_func op_c3b_0_comp_ff; -extern compop_func op_c40_0_comp_ff; -extern compop_func op_c50_0_comp_ff; -extern compop_func op_c58_0_comp_ff; -extern compop_func op_c60_0_comp_ff; -extern compop_func op_c68_0_comp_ff; -extern compop_func op_c70_0_comp_ff; -extern compop_func op_c78_0_comp_ff; -extern compop_func op_c79_0_comp_ff; -extern compop_func op_c7a_0_comp_ff; -extern compop_func op_c7b_0_comp_ff; -extern compop_func op_c80_0_comp_ff; -extern compop_func op_c90_0_comp_ff; -extern compop_func op_c98_0_comp_ff; -extern compop_func op_ca0_0_comp_ff; -extern compop_func op_ca8_0_comp_ff; -extern compop_func op_cb0_0_comp_ff; -extern compop_func op_cb8_0_comp_ff; -extern compop_func op_cb9_0_comp_ff; -extern compop_func op_cba_0_comp_ff; -extern compop_func op_cbb_0_comp_ff; -extern compop_func op_1000_0_comp_ff; -extern compop_func op_1010_0_comp_ff; -extern compop_func op_1018_0_comp_ff; -extern compop_func op_1020_0_comp_ff; -extern compop_func op_1028_0_comp_ff; -extern compop_func op_1030_0_comp_ff; -extern compop_func op_1038_0_comp_ff; -extern compop_func op_1039_0_comp_ff; -extern compop_func op_103a_0_comp_ff; -extern compop_func op_103b_0_comp_ff; -extern compop_func op_103c_0_comp_ff; -extern compop_func op_1080_0_comp_ff; -extern compop_func op_1090_0_comp_ff; -extern compop_func op_1098_0_comp_ff; -extern compop_func op_10a0_0_comp_ff; -extern compop_func op_10a8_0_comp_ff; -extern compop_func op_10b0_0_comp_ff; -extern compop_func op_10b8_0_comp_ff; -extern compop_func op_10b9_0_comp_ff; -extern compop_func op_10ba_0_comp_ff; -extern compop_func op_10bb_0_comp_ff; -extern compop_func op_10bc_0_comp_ff; -extern compop_func op_10c0_0_comp_ff; -extern compop_func op_10d0_0_comp_ff; -extern compop_func op_10d8_0_comp_ff; -extern compop_func op_10e0_0_comp_ff; -extern compop_func op_10e8_0_comp_ff; -extern compop_func op_10f0_0_comp_ff; -extern compop_func op_10f8_0_comp_ff; -extern compop_func op_10f9_0_comp_ff; -extern compop_func op_10fa_0_comp_ff; -extern compop_func op_10fb_0_comp_ff; -extern compop_func op_10fc_0_comp_ff; -extern compop_func op_1100_0_comp_ff; -extern compop_func op_1110_0_comp_ff; -extern compop_func op_1118_0_comp_ff; -extern compop_func op_1120_0_comp_ff; -extern compop_func op_1128_0_comp_ff; -extern compop_func op_1130_0_comp_ff; -extern compop_func op_1138_0_comp_ff; -extern compop_func op_1139_0_comp_ff; -extern compop_func op_113a_0_comp_ff; -extern compop_func op_113b_0_comp_ff; -extern compop_func op_113c_0_comp_ff; -extern compop_func op_1140_0_comp_ff; -extern compop_func op_1150_0_comp_ff; -extern compop_func op_1158_0_comp_ff; -extern compop_func op_1160_0_comp_ff; -extern compop_func op_1168_0_comp_ff; -extern compop_func op_1170_0_comp_ff; -extern compop_func op_1178_0_comp_ff; -extern compop_func op_1179_0_comp_ff; -extern compop_func op_117a_0_comp_ff; -extern compop_func op_117b_0_comp_ff; -extern compop_func op_117c_0_comp_ff; -extern compop_func op_1180_0_comp_ff; -extern compop_func op_1190_0_comp_ff; -extern compop_func op_1198_0_comp_ff; -extern compop_func op_11a0_0_comp_ff; -extern compop_func op_11a8_0_comp_ff; -extern compop_func op_11b0_0_comp_ff; -extern compop_func op_11b8_0_comp_ff; -extern compop_func op_11b9_0_comp_ff; -extern compop_func op_11ba_0_comp_ff; -extern compop_func op_11bb_0_comp_ff; -extern compop_func op_11bc_0_comp_ff; -extern compop_func op_11c0_0_comp_ff; -extern compop_func op_11d0_0_comp_ff; -extern compop_func op_11d8_0_comp_ff; -extern compop_func op_11e0_0_comp_ff; -extern compop_func op_11e8_0_comp_ff; -extern compop_func op_11f0_0_comp_ff; -extern compop_func op_11f8_0_comp_ff; -extern compop_func op_11f9_0_comp_ff; -extern compop_func op_11fa_0_comp_ff; -extern compop_func op_11fb_0_comp_ff; -extern compop_func op_11fc_0_comp_ff; -extern compop_func op_13c0_0_comp_ff; -extern compop_func op_13d0_0_comp_ff; -extern compop_func op_13d8_0_comp_ff; -extern compop_func op_13e0_0_comp_ff; -extern compop_func op_13e8_0_comp_ff; -extern compop_func op_13f0_0_comp_ff; -extern compop_func op_13f8_0_comp_ff; -extern compop_func op_13f9_0_comp_ff; -extern compop_func op_13fa_0_comp_ff; -extern compop_func op_13fb_0_comp_ff; -extern compop_func op_13fc_0_comp_ff; -extern compop_func op_2000_0_comp_ff; -extern compop_func op_2008_0_comp_ff; -extern compop_func op_2010_0_comp_ff; -extern compop_func op_2018_0_comp_ff; -extern compop_func op_2020_0_comp_ff; -extern compop_func op_2028_0_comp_ff; -extern compop_func op_2030_0_comp_ff; -extern compop_func op_2038_0_comp_ff; -extern compop_func op_2039_0_comp_ff; -extern compop_func op_203a_0_comp_ff; -extern compop_func op_203b_0_comp_ff; -extern compop_func op_203c_0_comp_ff; -extern compop_func op_2040_0_comp_ff; -extern compop_func op_2048_0_comp_ff; -extern compop_func op_2050_0_comp_ff; -extern compop_func op_2058_0_comp_ff; -extern compop_func op_2060_0_comp_ff; -extern compop_func op_2068_0_comp_ff; -extern compop_func op_2070_0_comp_ff; -extern compop_func op_2078_0_comp_ff; -extern compop_func op_2079_0_comp_ff; -extern compop_func op_207a_0_comp_ff; -extern compop_func op_207b_0_comp_ff; -extern compop_func op_207c_0_comp_ff; -extern compop_func op_2080_0_comp_ff; -extern compop_func op_2088_0_comp_ff; -extern compop_func op_2090_0_comp_ff; -extern compop_func op_2098_0_comp_ff; -extern compop_func op_20a0_0_comp_ff; -extern compop_func op_20a8_0_comp_ff; -extern compop_func op_20b0_0_comp_ff; -extern compop_func op_20b8_0_comp_ff; -extern compop_func op_20b9_0_comp_ff; -extern compop_func op_20ba_0_comp_ff; -extern compop_func op_20bb_0_comp_ff; -extern compop_func op_20bc_0_comp_ff; -extern compop_func op_20c0_0_comp_ff; -extern compop_func op_20c8_0_comp_ff; -extern compop_func op_20d0_0_comp_ff; -extern compop_func op_20d8_0_comp_ff; -extern compop_func op_20e0_0_comp_ff; -extern compop_func op_20e8_0_comp_ff; -extern compop_func op_20f0_0_comp_ff; -extern compop_func op_20f8_0_comp_ff; -extern compop_func op_20f9_0_comp_ff; -extern compop_func op_20fa_0_comp_ff; -extern compop_func op_20fb_0_comp_ff; -extern compop_func op_20fc_0_comp_ff; -extern compop_func op_2100_0_comp_ff; -extern compop_func op_2108_0_comp_ff; -extern compop_func op_2110_0_comp_ff; -extern compop_func op_2118_0_comp_ff; -extern compop_func op_2120_0_comp_ff; -extern compop_func op_2128_0_comp_ff; -extern compop_func op_2130_0_comp_ff; -extern compop_func op_2138_0_comp_ff; -extern compop_func op_2139_0_comp_ff; -extern compop_func op_213a_0_comp_ff; -extern compop_func op_213b_0_comp_ff; -extern compop_func op_213c_0_comp_ff; -extern compop_func op_2140_0_comp_ff; -extern compop_func op_2148_0_comp_ff; -extern compop_func op_2150_0_comp_ff; -extern compop_func op_2158_0_comp_ff; -extern compop_func op_2160_0_comp_ff; -extern compop_func op_2168_0_comp_ff; -extern compop_func op_2170_0_comp_ff; -extern compop_func op_2178_0_comp_ff; -extern compop_func op_2179_0_comp_ff; -extern compop_func op_217a_0_comp_ff; -extern compop_func op_217b_0_comp_ff; -extern compop_func op_217c_0_comp_ff; -extern compop_func op_2180_0_comp_ff; -extern compop_func op_2188_0_comp_ff; -extern compop_func op_2190_0_comp_ff; -extern compop_func op_2198_0_comp_ff; -extern compop_func op_21a0_0_comp_ff; -extern compop_func op_21a8_0_comp_ff; -extern compop_func op_21b0_0_comp_ff; -extern compop_func op_21b8_0_comp_ff; -extern compop_func op_21b9_0_comp_ff; -extern compop_func op_21ba_0_comp_ff; -extern compop_func op_21bb_0_comp_ff; -extern compop_func op_21bc_0_comp_ff; -extern compop_func op_21c0_0_comp_ff; -extern compop_func op_21c8_0_comp_ff; -extern compop_func op_21d0_0_comp_ff; -extern compop_func op_21d8_0_comp_ff; -extern compop_func op_21e0_0_comp_ff; -extern compop_func op_21e8_0_comp_ff; -extern compop_func op_21f0_0_comp_ff; -extern compop_func op_21f8_0_comp_ff; -extern compop_func op_21f9_0_comp_ff; -extern compop_func op_21fa_0_comp_ff; -extern compop_func op_21fb_0_comp_ff; -extern compop_func op_21fc_0_comp_ff; -extern compop_func op_23c0_0_comp_ff; -extern compop_func op_23c8_0_comp_ff; -extern compop_func op_23d0_0_comp_ff; -extern compop_func op_23d8_0_comp_ff; -extern compop_func op_23e0_0_comp_ff; -extern compop_func op_23e8_0_comp_ff; -extern compop_func op_23f0_0_comp_ff; -extern compop_func op_23f8_0_comp_ff; -extern compop_func op_23f9_0_comp_ff; -extern compop_func op_23fa_0_comp_ff; -extern compop_func op_23fb_0_comp_ff; -extern compop_func op_23fc_0_comp_ff; -extern compop_func op_3000_0_comp_ff; -extern compop_func op_3008_0_comp_ff; -extern compop_func op_3010_0_comp_ff; -extern compop_func op_3018_0_comp_ff; -extern compop_func op_3020_0_comp_ff; -extern compop_func op_3028_0_comp_ff; -extern compop_func op_3030_0_comp_ff; -extern compop_func op_3038_0_comp_ff; -extern compop_func op_3039_0_comp_ff; -extern compop_func op_303a_0_comp_ff; -extern compop_func op_303b_0_comp_ff; -extern compop_func op_303c_0_comp_ff; -extern compop_func op_3040_0_comp_ff; -extern compop_func op_3048_0_comp_ff; -extern compop_func op_3050_0_comp_ff; -extern compop_func op_3058_0_comp_ff; -extern compop_func op_3060_0_comp_ff; -extern compop_func op_3068_0_comp_ff; -extern compop_func op_3070_0_comp_ff; -extern compop_func op_3078_0_comp_ff; -extern compop_func op_3079_0_comp_ff; -extern compop_func op_307a_0_comp_ff; -extern compop_func op_307b_0_comp_ff; -extern compop_func op_307c_0_comp_ff; -extern compop_func op_3080_0_comp_ff; -extern compop_func op_3088_0_comp_ff; -extern compop_func op_3090_0_comp_ff; -extern compop_func op_3098_0_comp_ff; -extern compop_func op_30a0_0_comp_ff; -extern compop_func op_30a8_0_comp_ff; -extern compop_func op_30b0_0_comp_ff; -extern compop_func op_30b8_0_comp_ff; -extern compop_func op_30b9_0_comp_ff; -extern compop_func op_30ba_0_comp_ff; -extern compop_func op_30bb_0_comp_ff; -extern compop_func op_30bc_0_comp_ff; -extern compop_func op_30c0_0_comp_ff; -extern compop_func op_30c8_0_comp_ff; -extern compop_func op_30d0_0_comp_ff; -extern compop_func op_30d8_0_comp_ff; -extern compop_func op_30e0_0_comp_ff; -extern compop_func op_30e8_0_comp_ff; -extern compop_func op_30f0_0_comp_ff; -extern compop_func op_30f8_0_comp_ff; -extern compop_func op_30f9_0_comp_ff; -extern compop_func op_30fa_0_comp_ff; -extern compop_func op_30fb_0_comp_ff; -extern compop_func op_30fc_0_comp_ff; -extern compop_func op_3100_0_comp_ff; -extern compop_func op_3108_0_comp_ff; -extern compop_func op_3110_0_comp_ff; -extern compop_func op_3118_0_comp_ff; -extern compop_func op_3120_0_comp_ff; -extern compop_func op_3128_0_comp_ff; -extern compop_func op_3130_0_comp_ff; -extern compop_func op_3138_0_comp_ff; -extern compop_func op_3139_0_comp_ff; -extern compop_func op_313a_0_comp_ff; -extern compop_func op_313b_0_comp_ff; -extern compop_func op_313c_0_comp_ff; -extern compop_func op_3140_0_comp_ff; -extern compop_func op_3148_0_comp_ff; -extern compop_func op_3150_0_comp_ff; -extern compop_func op_3158_0_comp_ff; -extern compop_func op_3160_0_comp_ff; -extern compop_func op_3168_0_comp_ff; -extern compop_func op_3170_0_comp_ff; -extern compop_func op_3178_0_comp_ff; -extern compop_func op_3179_0_comp_ff; -extern compop_func op_317a_0_comp_ff; -extern compop_func op_317b_0_comp_ff; -extern compop_func op_317c_0_comp_ff; -extern compop_func op_3180_0_comp_ff; -extern compop_func op_3188_0_comp_ff; -extern compop_func op_3190_0_comp_ff; -extern compop_func op_3198_0_comp_ff; -extern compop_func op_31a0_0_comp_ff; -extern compop_func op_31a8_0_comp_ff; -extern compop_func op_31b0_0_comp_ff; -extern compop_func op_31b8_0_comp_ff; -extern compop_func op_31b9_0_comp_ff; -extern compop_func op_31ba_0_comp_ff; -extern compop_func op_31bb_0_comp_ff; -extern compop_func op_31bc_0_comp_ff; -extern compop_func op_31c0_0_comp_ff; -extern compop_func op_31c8_0_comp_ff; -extern compop_func op_31d0_0_comp_ff; -extern compop_func op_31d8_0_comp_ff; -extern compop_func op_31e0_0_comp_ff; -extern compop_func op_31e8_0_comp_ff; -extern compop_func op_31f0_0_comp_ff; -extern compop_func op_31f8_0_comp_ff; -extern compop_func op_31f9_0_comp_ff; -extern compop_func op_31fa_0_comp_ff; -extern compop_func op_31fb_0_comp_ff; -extern compop_func op_31fc_0_comp_ff; -extern compop_func op_33c0_0_comp_ff; -extern compop_func op_33c8_0_comp_ff; -extern compop_func op_33d0_0_comp_ff; -extern compop_func op_33d8_0_comp_ff; -extern compop_func op_33e0_0_comp_ff; -extern compop_func op_33e8_0_comp_ff; -extern compop_func op_33f0_0_comp_ff; -extern compop_func op_33f8_0_comp_ff; -extern compop_func op_33f9_0_comp_ff; -extern compop_func op_33fa_0_comp_ff; -extern compop_func op_33fb_0_comp_ff; -extern compop_func op_33fc_0_comp_ff; -extern compop_func op_4000_0_comp_ff; -extern compop_func op_4010_0_comp_ff; -extern compop_func op_4018_0_comp_ff; -extern compop_func op_4020_0_comp_ff; -extern compop_func op_4028_0_comp_ff; -extern compop_func op_4030_0_comp_ff; -extern compop_func op_4038_0_comp_ff; -extern compop_func op_4039_0_comp_ff; -extern compop_func op_4040_0_comp_ff; -extern compop_func op_4050_0_comp_ff; -extern compop_func op_4058_0_comp_ff; -extern compop_func op_4060_0_comp_ff; -extern compop_func op_4068_0_comp_ff; -extern compop_func op_4070_0_comp_ff; -extern compop_func op_4078_0_comp_ff; -extern compop_func op_4079_0_comp_ff; -extern compop_func op_4080_0_comp_ff; -extern compop_func op_4090_0_comp_ff; -extern compop_func op_4098_0_comp_ff; -extern compop_func op_40a0_0_comp_ff; -extern compop_func op_40a8_0_comp_ff; -extern compop_func op_40b0_0_comp_ff; -extern compop_func op_40b8_0_comp_ff; -extern compop_func op_40b9_0_comp_ff; -extern compop_func op_41d0_0_comp_ff; -extern compop_func op_41e8_0_comp_ff; -extern compop_func op_41f0_0_comp_ff; -extern compop_func op_41f8_0_comp_ff; -extern compop_func op_41f9_0_comp_ff; -extern compop_func op_41fa_0_comp_ff; -extern compop_func op_41fb_0_comp_ff; -extern compop_func op_4200_0_comp_ff; -extern compop_func op_4210_0_comp_ff; -extern compop_func op_4218_0_comp_ff; -extern compop_func op_4220_0_comp_ff; -extern compop_func op_4228_0_comp_ff; -extern compop_func op_4230_0_comp_ff; -extern compop_func op_4238_0_comp_ff; -extern compop_func op_4239_0_comp_ff; -extern compop_func op_4240_0_comp_ff; -extern compop_func op_4250_0_comp_ff; -extern compop_func op_4258_0_comp_ff; -extern compop_func op_4260_0_comp_ff; -extern compop_func op_4268_0_comp_ff; -extern compop_func op_4270_0_comp_ff; -extern compop_func op_4278_0_comp_ff; -extern compop_func op_4279_0_comp_ff; -extern compop_func op_4280_0_comp_ff; -extern compop_func op_4290_0_comp_ff; -extern compop_func op_4298_0_comp_ff; -extern compop_func op_42a0_0_comp_ff; -extern compop_func op_42a8_0_comp_ff; -extern compop_func op_42b0_0_comp_ff; -extern compop_func op_42b8_0_comp_ff; -extern compop_func op_42b9_0_comp_ff; -extern compop_func op_4400_0_comp_ff; -extern compop_func op_4410_0_comp_ff; -extern compop_func op_4418_0_comp_ff; -extern compop_func op_4420_0_comp_ff; -extern compop_func op_4428_0_comp_ff; -extern compop_func op_4430_0_comp_ff; -extern compop_func op_4438_0_comp_ff; -extern compop_func op_4439_0_comp_ff; -extern compop_func op_4440_0_comp_ff; -extern compop_func op_4450_0_comp_ff; -extern compop_func op_4458_0_comp_ff; -extern compop_func op_4460_0_comp_ff; -extern compop_func op_4468_0_comp_ff; -extern compop_func op_4470_0_comp_ff; -extern compop_func op_4478_0_comp_ff; -extern compop_func op_4479_0_comp_ff; -extern compop_func op_4480_0_comp_ff; -extern compop_func op_4490_0_comp_ff; -extern compop_func op_4498_0_comp_ff; -extern compop_func op_44a0_0_comp_ff; -extern compop_func op_44a8_0_comp_ff; -extern compop_func op_44b0_0_comp_ff; -extern compop_func op_44b8_0_comp_ff; -extern compop_func op_44b9_0_comp_ff; -extern compop_func op_4600_0_comp_ff; -extern compop_func op_4610_0_comp_ff; -extern compop_func op_4618_0_comp_ff; -extern compop_func op_4620_0_comp_ff; -extern compop_func op_4628_0_comp_ff; -extern compop_func op_4630_0_comp_ff; -extern compop_func op_4638_0_comp_ff; -extern compop_func op_4639_0_comp_ff; -extern compop_func op_4640_0_comp_ff; -extern compop_func op_4650_0_comp_ff; -extern compop_func op_4658_0_comp_ff; -extern compop_func op_4660_0_comp_ff; -extern compop_func op_4668_0_comp_ff; -extern compop_func op_4670_0_comp_ff; -extern compop_func op_4678_0_comp_ff; -extern compop_func op_4679_0_comp_ff; -extern compop_func op_4680_0_comp_ff; -extern compop_func op_4690_0_comp_ff; -extern compop_func op_4698_0_comp_ff; -extern compop_func op_46a0_0_comp_ff; -extern compop_func op_46a8_0_comp_ff; -extern compop_func op_46b0_0_comp_ff; -extern compop_func op_46b8_0_comp_ff; -extern compop_func op_46b9_0_comp_ff; -extern compop_func op_4808_0_comp_ff; -extern compop_func op_4840_0_comp_ff; -extern compop_func op_4850_0_comp_ff; -extern compop_func op_4868_0_comp_ff; -extern compop_func op_4870_0_comp_ff; -extern compop_func op_4878_0_comp_ff; -extern compop_func op_4879_0_comp_ff; -extern compop_func op_487a_0_comp_ff; -extern compop_func op_487b_0_comp_ff; -extern compop_func op_4880_0_comp_ff; -extern compop_func op_4890_0_comp_ff; -extern compop_func op_48a0_0_comp_ff; -extern compop_func op_48a8_0_comp_ff; -extern compop_func op_48b0_0_comp_ff; -extern compop_func op_48b8_0_comp_ff; -extern compop_func op_48b9_0_comp_ff; -extern compop_func op_48c0_0_comp_ff; -extern compop_func op_48d0_0_comp_ff; -extern compop_func op_48e0_0_comp_ff; -extern compop_func op_48e8_0_comp_ff; -extern compop_func op_48f0_0_comp_ff; -extern compop_func op_48f8_0_comp_ff; -extern compop_func op_48f9_0_comp_ff; -extern compop_func op_49c0_0_comp_ff; -extern compop_func op_4a00_0_comp_ff; -extern compop_func op_4a10_0_comp_ff; -extern compop_func op_4a18_0_comp_ff; -extern compop_func op_4a20_0_comp_ff; -extern compop_func op_4a28_0_comp_ff; -extern compop_func op_4a30_0_comp_ff; -extern compop_func op_4a38_0_comp_ff; -extern compop_func op_4a39_0_comp_ff; -extern compop_func op_4a3a_0_comp_ff; -extern compop_func op_4a3b_0_comp_ff; -extern compop_func op_4a3c_0_comp_ff; -extern compop_func op_4a40_0_comp_ff; -extern compop_func op_4a48_0_comp_ff; -extern compop_func op_4a50_0_comp_ff; -extern compop_func op_4a58_0_comp_ff; -extern compop_func op_4a60_0_comp_ff; -extern compop_func op_4a68_0_comp_ff; -extern compop_func op_4a70_0_comp_ff; -extern compop_func op_4a78_0_comp_ff; -extern compop_func op_4a79_0_comp_ff; -extern compop_func op_4a7a_0_comp_ff; -extern compop_func op_4a7b_0_comp_ff; -extern compop_func op_4a7c_0_comp_ff; -extern compop_func op_4a80_0_comp_ff; -extern compop_func op_4a88_0_comp_ff; -extern compop_func op_4a90_0_comp_ff; -extern compop_func op_4a98_0_comp_ff; -extern compop_func op_4aa0_0_comp_ff; -extern compop_func op_4aa8_0_comp_ff; -extern compop_func op_4ab0_0_comp_ff; -extern compop_func op_4ab8_0_comp_ff; -extern compop_func op_4ab9_0_comp_ff; -extern compop_func op_4aba_0_comp_ff; -extern compop_func op_4abb_0_comp_ff; -extern compop_func op_4abc_0_comp_ff; -extern compop_func op_4c90_0_comp_ff; -extern compop_func op_4c98_0_comp_ff; -extern compop_func op_4ca8_0_comp_ff; -extern compop_func op_4cb0_0_comp_ff; -extern compop_func op_4cb8_0_comp_ff; -extern compop_func op_4cb9_0_comp_ff; -extern compop_func op_4cba_0_comp_ff; -extern compop_func op_4cbb_0_comp_ff; -extern compop_func op_4cd0_0_comp_ff; -extern compop_func op_4cd8_0_comp_ff; -extern compop_func op_4ce8_0_comp_ff; -extern compop_func op_4cf0_0_comp_ff; -extern compop_func op_4cf8_0_comp_ff; -extern compop_func op_4cf9_0_comp_ff; -extern compop_func op_4cfa_0_comp_ff; -extern compop_func op_4cfb_0_comp_ff; -extern compop_func op_4e50_0_comp_ff; -extern compop_func op_4e58_0_comp_ff; -extern compop_func op_4e71_0_comp_ff; -extern compop_func op_4e74_0_comp_ff; -extern compop_func op_4e75_0_comp_ff; -extern compop_func op_4e90_0_comp_ff; -extern compop_func op_4ea8_0_comp_ff; -extern compop_func op_4eb0_0_comp_ff; -extern compop_func op_4eb8_0_comp_ff; -extern compop_func op_4eb9_0_comp_ff; -extern compop_func op_4eba_0_comp_ff; -extern compop_func op_4ebb_0_comp_ff; -extern compop_func op_4ed0_0_comp_ff; -extern compop_func op_4ee8_0_comp_ff; -extern compop_func op_4ef0_0_comp_ff; -extern compop_func op_4ef8_0_comp_ff; -extern compop_func op_4ef9_0_comp_ff; -extern compop_func op_4efa_0_comp_ff; -extern compop_func op_4efb_0_comp_ff; -extern compop_func op_5000_0_comp_ff; -extern compop_func op_5010_0_comp_ff; -extern compop_func op_5018_0_comp_ff; -extern compop_func op_5020_0_comp_ff; -extern compop_func op_5028_0_comp_ff; -extern compop_func op_5030_0_comp_ff; -extern compop_func op_5038_0_comp_ff; -extern compop_func op_5039_0_comp_ff; -extern compop_func op_5040_0_comp_ff; -extern compop_func op_5048_0_comp_ff; -extern compop_func op_5050_0_comp_ff; -extern compop_func op_5058_0_comp_ff; -extern compop_func op_5060_0_comp_ff; -extern compop_func op_5068_0_comp_ff; -extern compop_func op_5070_0_comp_ff; -extern compop_func op_5078_0_comp_ff; -extern compop_func op_5079_0_comp_ff; -extern compop_func op_5080_0_comp_ff; -extern compop_func op_5088_0_comp_ff; -extern compop_func op_5090_0_comp_ff; -extern compop_func op_5098_0_comp_ff; -extern compop_func op_50a0_0_comp_ff; -extern compop_func op_50a8_0_comp_ff; -extern compop_func op_50b0_0_comp_ff; -extern compop_func op_50b8_0_comp_ff; -extern compop_func op_50b9_0_comp_ff; -extern compop_func op_50c0_0_comp_ff; -extern compop_func op_50c8_0_comp_ff; -extern compop_func op_50d0_0_comp_ff; -extern compop_func op_50d8_0_comp_ff; -extern compop_func op_50e0_0_comp_ff; -extern compop_func op_50e8_0_comp_ff; -extern compop_func op_50f0_0_comp_ff; -extern compop_func op_50f8_0_comp_ff; -extern compop_func op_50f9_0_comp_ff; -extern compop_func op_5100_0_comp_ff; -extern compop_func op_5110_0_comp_ff; -extern compop_func op_5118_0_comp_ff; -extern compop_func op_5120_0_comp_ff; -extern compop_func op_5128_0_comp_ff; -extern compop_func op_5130_0_comp_ff; -extern compop_func op_5138_0_comp_ff; -extern compop_func op_5139_0_comp_ff; -extern compop_func op_5140_0_comp_ff; -extern compop_func op_5148_0_comp_ff; -extern compop_func op_5150_0_comp_ff; -extern compop_func op_5158_0_comp_ff; -extern compop_func op_5160_0_comp_ff; -extern compop_func op_5168_0_comp_ff; -extern compop_func op_5170_0_comp_ff; -extern compop_func op_5178_0_comp_ff; -extern compop_func op_5179_0_comp_ff; -extern compop_func op_5180_0_comp_ff; -extern compop_func op_5188_0_comp_ff; -extern compop_func op_5190_0_comp_ff; -extern compop_func op_5198_0_comp_ff; -extern compop_func op_51a0_0_comp_ff; -extern compop_func op_51a8_0_comp_ff; -extern compop_func op_51b0_0_comp_ff; -extern compop_func op_51b8_0_comp_ff; -extern compop_func op_51b9_0_comp_ff; -extern compop_func op_51c0_0_comp_ff; -extern compop_func op_51c8_0_comp_ff; -extern compop_func op_51d0_0_comp_ff; -extern compop_func op_51d8_0_comp_ff; -extern compop_func op_51e0_0_comp_ff; -extern compop_func op_51e8_0_comp_ff; -extern compop_func op_51f0_0_comp_ff; -extern compop_func op_51f8_0_comp_ff; -extern compop_func op_51f9_0_comp_ff; -extern compop_func op_52c0_0_comp_ff; -extern compop_func op_52c8_0_comp_ff; -extern compop_func op_52d0_0_comp_ff; -extern compop_func op_52d8_0_comp_ff; -extern compop_func op_52e0_0_comp_ff; -extern compop_func op_52e8_0_comp_ff; -extern compop_func op_52f0_0_comp_ff; -extern compop_func op_52f8_0_comp_ff; -extern compop_func op_52f9_0_comp_ff; -extern compop_func op_53c0_0_comp_ff; -extern compop_func op_53c8_0_comp_ff; -extern compop_func op_53d0_0_comp_ff; -extern compop_func op_53d8_0_comp_ff; -extern compop_func op_53e0_0_comp_ff; -extern compop_func op_53e8_0_comp_ff; -extern compop_func op_53f0_0_comp_ff; -extern compop_func op_53f8_0_comp_ff; -extern compop_func op_53f9_0_comp_ff; -extern compop_func op_54c0_0_comp_ff; -extern compop_func op_54c8_0_comp_ff; -extern compop_func op_54d0_0_comp_ff; -extern compop_func op_54d8_0_comp_ff; -extern compop_func op_54e0_0_comp_ff; -extern compop_func op_54e8_0_comp_ff; -extern compop_func op_54f0_0_comp_ff; -extern compop_func op_54f8_0_comp_ff; -extern compop_func op_54f9_0_comp_ff; -extern compop_func op_55c0_0_comp_ff; -extern compop_func op_55c8_0_comp_ff; -extern compop_func op_55d0_0_comp_ff; -extern compop_func op_55d8_0_comp_ff; -extern compop_func op_55e0_0_comp_ff; -extern compop_func op_55e8_0_comp_ff; -extern compop_func op_55f0_0_comp_ff; -extern compop_func op_55f8_0_comp_ff; -extern compop_func op_55f9_0_comp_ff; -extern compop_func op_56c0_0_comp_ff; -extern compop_func op_56c8_0_comp_ff; -extern compop_func op_56d0_0_comp_ff; -extern compop_func op_56d8_0_comp_ff; -extern compop_func op_56e0_0_comp_ff; -extern compop_func op_56e8_0_comp_ff; -extern compop_func op_56f0_0_comp_ff; -extern compop_func op_56f8_0_comp_ff; -extern compop_func op_56f9_0_comp_ff; -extern compop_func op_57c0_0_comp_ff; -extern compop_func op_57c8_0_comp_ff; -extern compop_func op_57d0_0_comp_ff; -extern compop_func op_57d8_0_comp_ff; -extern compop_func op_57e0_0_comp_ff; -extern compop_func op_57e8_0_comp_ff; -extern compop_func op_57f0_0_comp_ff; -extern compop_func op_57f8_0_comp_ff; -extern compop_func op_57f9_0_comp_ff; -extern compop_func op_5ac0_0_comp_ff; -extern compop_func op_5ac8_0_comp_ff; -extern compop_func op_5ad0_0_comp_ff; -extern compop_func op_5ad8_0_comp_ff; -extern compop_func op_5ae0_0_comp_ff; -extern compop_func op_5ae8_0_comp_ff; -extern compop_func op_5af0_0_comp_ff; -extern compop_func op_5af8_0_comp_ff; -extern compop_func op_5af9_0_comp_ff; -extern compop_func op_5bc0_0_comp_ff; -extern compop_func op_5bc8_0_comp_ff; -extern compop_func op_5bd0_0_comp_ff; -extern compop_func op_5bd8_0_comp_ff; -extern compop_func op_5be0_0_comp_ff; -extern compop_func op_5be8_0_comp_ff; -extern compop_func op_5bf0_0_comp_ff; -extern compop_func op_5bf8_0_comp_ff; -extern compop_func op_5bf9_0_comp_ff; -extern compop_func op_5cc0_0_comp_ff; -extern compop_func op_5cc8_0_comp_ff; -extern compop_func op_5cd0_0_comp_ff; -extern compop_func op_5cd8_0_comp_ff; -extern compop_func op_5ce0_0_comp_ff; -extern compop_func op_5ce8_0_comp_ff; -extern compop_func op_5cf0_0_comp_ff; -extern compop_func op_5cf8_0_comp_ff; -extern compop_func op_5cf9_0_comp_ff; -extern compop_func op_5dc0_0_comp_ff; -extern compop_func op_5dc8_0_comp_ff; -extern compop_func op_5dd0_0_comp_ff; -extern compop_func op_5dd8_0_comp_ff; -extern compop_func op_5de0_0_comp_ff; -extern compop_func op_5de8_0_comp_ff; -extern compop_func op_5df0_0_comp_ff; -extern compop_func op_5df8_0_comp_ff; -extern compop_func op_5df9_0_comp_ff; -extern compop_func op_5ec0_0_comp_ff; -extern compop_func op_5ec8_0_comp_ff; -extern compop_func op_5ed0_0_comp_ff; -extern compop_func op_5ed8_0_comp_ff; -extern compop_func op_5ee0_0_comp_ff; -extern compop_func op_5ee8_0_comp_ff; -extern compop_func op_5ef0_0_comp_ff; -extern compop_func op_5ef8_0_comp_ff; -extern compop_func op_5ef9_0_comp_ff; -extern compop_func op_5fc0_0_comp_ff; -extern compop_func op_5fc8_0_comp_ff; -extern compop_func op_5fd0_0_comp_ff; -extern compop_func op_5fd8_0_comp_ff; -extern compop_func op_5fe0_0_comp_ff; -extern compop_func op_5fe8_0_comp_ff; -extern compop_func op_5ff0_0_comp_ff; -extern compop_func op_5ff8_0_comp_ff; -extern compop_func op_5ff9_0_comp_ff; -extern compop_func op_6000_0_comp_ff; -extern compop_func op_6001_0_comp_ff; -extern compop_func op_60ff_0_comp_ff; -extern compop_func op_6100_0_comp_ff; -extern compop_func op_6101_0_comp_ff; -extern compop_func op_61ff_0_comp_ff; -extern compop_func op_6200_0_comp_ff; -extern compop_func op_6201_0_comp_ff; -extern compop_func op_62ff_0_comp_ff; -extern compop_func op_6300_0_comp_ff; -extern compop_func op_6301_0_comp_ff; -extern compop_func op_63ff_0_comp_ff; -extern compop_func op_6400_0_comp_ff; -extern compop_func op_6401_0_comp_ff; -extern compop_func op_64ff_0_comp_ff; -extern compop_func op_6500_0_comp_ff; -extern compop_func op_6501_0_comp_ff; -extern compop_func op_65ff_0_comp_ff; -extern compop_func op_6600_0_comp_ff; -extern compop_func op_6601_0_comp_ff; -extern compop_func op_66ff_0_comp_ff; -extern compop_func op_6700_0_comp_ff; -extern compop_func op_6701_0_comp_ff; -extern compop_func op_67ff_0_comp_ff; -extern compop_func op_6a00_0_comp_ff; -extern compop_func op_6a01_0_comp_ff; -extern compop_func op_6aff_0_comp_ff; -extern compop_func op_6b00_0_comp_ff; -extern compop_func op_6b01_0_comp_ff; -extern compop_func op_6bff_0_comp_ff; -extern compop_func op_6c00_0_comp_ff; -extern compop_func op_6c01_0_comp_ff; -extern compop_func op_6cff_0_comp_ff; -extern compop_func op_6d00_0_comp_ff; -extern compop_func op_6d01_0_comp_ff; -extern compop_func op_6dff_0_comp_ff; -extern compop_func op_6e00_0_comp_ff; -extern compop_func op_6e01_0_comp_ff; -extern compop_func op_6eff_0_comp_ff; -extern compop_func op_6f00_0_comp_ff; -extern compop_func op_6f01_0_comp_ff; -extern compop_func op_6fff_0_comp_ff; -extern compop_func op_7000_0_comp_ff; -extern compop_func op_8000_0_comp_ff; -extern compop_func op_8010_0_comp_ff; -extern compop_func op_8018_0_comp_ff; -extern compop_func op_8020_0_comp_ff; -extern compop_func op_8028_0_comp_ff; -extern compop_func op_8030_0_comp_ff; -extern compop_func op_8038_0_comp_ff; -extern compop_func op_8039_0_comp_ff; -extern compop_func op_803a_0_comp_ff; -extern compop_func op_803b_0_comp_ff; -extern compop_func op_803c_0_comp_ff; -extern compop_func op_8040_0_comp_ff; -extern compop_func op_8050_0_comp_ff; -extern compop_func op_8058_0_comp_ff; -extern compop_func op_8060_0_comp_ff; -extern compop_func op_8068_0_comp_ff; -extern compop_func op_8070_0_comp_ff; -extern compop_func op_8078_0_comp_ff; -extern compop_func op_8079_0_comp_ff; -extern compop_func op_807a_0_comp_ff; -extern compop_func op_807b_0_comp_ff; -extern compop_func op_807c_0_comp_ff; -extern compop_func op_8080_0_comp_ff; -extern compop_func op_8090_0_comp_ff; -extern compop_func op_8098_0_comp_ff; -extern compop_func op_80a0_0_comp_ff; -extern compop_func op_80a8_0_comp_ff; -extern compop_func op_80b0_0_comp_ff; -extern compop_func op_80b8_0_comp_ff; -extern compop_func op_80b9_0_comp_ff; -extern compop_func op_80ba_0_comp_ff; -extern compop_func op_80bb_0_comp_ff; -extern compop_func op_80bc_0_comp_ff; -extern compop_func op_8110_0_comp_ff; -extern compop_func op_8118_0_comp_ff; -extern compop_func op_8120_0_comp_ff; -extern compop_func op_8128_0_comp_ff; -extern compop_func op_8130_0_comp_ff; -extern compop_func op_8138_0_comp_ff; -extern compop_func op_8139_0_comp_ff; -extern compop_func op_8150_0_comp_ff; -extern compop_func op_8158_0_comp_ff; -extern compop_func op_8160_0_comp_ff; -extern compop_func op_8168_0_comp_ff; -extern compop_func op_8170_0_comp_ff; -extern compop_func op_8178_0_comp_ff; -extern compop_func op_8179_0_comp_ff; -extern compop_func op_8190_0_comp_ff; -extern compop_func op_8198_0_comp_ff; -extern compop_func op_81a0_0_comp_ff; -extern compop_func op_81a8_0_comp_ff; -extern compop_func op_81b0_0_comp_ff; -extern compop_func op_81b8_0_comp_ff; -extern compop_func op_81b9_0_comp_ff; -extern compop_func op_9000_0_comp_ff; -extern compop_func op_9010_0_comp_ff; -extern compop_func op_9018_0_comp_ff; -extern compop_func op_9020_0_comp_ff; -extern compop_func op_9028_0_comp_ff; -extern compop_func op_9030_0_comp_ff; -extern compop_func op_9038_0_comp_ff; -extern compop_func op_9039_0_comp_ff; -extern compop_func op_903a_0_comp_ff; -extern compop_func op_903b_0_comp_ff; -extern compop_func op_903c_0_comp_ff; -extern compop_func op_9040_0_comp_ff; -extern compop_func op_9048_0_comp_ff; -extern compop_func op_9050_0_comp_ff; -extern compop_func op_9058_0_comp_ff; -extern compop_func op_9060_0_comp_ff; -extern compop_func op_9068_0_comp_ff; -extern compop_func op_9070_0_comp_ff; -extern compop_func op_9078_0_comp_ff; -extern compop_func op_9079_0_comp_ff; -extern compop_func op_907a_0_comp_ff; -extern compop_func op_907b_0_comp_ff; -extern compop_func op_907c_0_comp_ff; -extern compop_func op_9080_0_comp_ff; -extern compop_func op_9088_0_comp_ff; -extern compop_func op_9090_0_comp_ff; -extern compop_func op_9098_0_comp_ff; -extern compop_func op_90a0_0_comp_ff; -extern compop_func op_90a8_0_comp_ff; -extern compop_func op_90b0_0_comp_ff; -extern compop_func op_90b8_0_comp_ff; -extern compop_func op_90b9_0_comp_ff; -extern compop_func op_90ba_0_comp_ff; -extern compop_func op_90bb_0_comp_ff; -extern compop_func op_90bc_0_comp_ff; -extern compop_func op_90c0_0_comp_ff; -extern compop_func op_90c8_0_comp_ff; -extern compop_func op_90d0_0_comp_ff; -extern compop_func op_90d8_0_comp_ff; -extern compop_func op_90e0_0_comp_ff; -extern compop_func op_90e8_0_comp_ff; -extern compop_func op_90f0_0_comp_ff; -extern compop_func op_90f8_0_comp_ff; -extern compop_func op_90f9_0_comp_ff; -extern compop_func op_90fa_0_comp_ff; -extern compop_func op_90fb_0_comp_ff; -extern compop_func op_90fc_0_comp_ff; -extern compop_func op_9100_0_comp_ff; -extern compop_func op_9108_0_comp_ff; -extern compop_func op_9110_0_comp_ff; -extern compop_func op_9118_0_comp_ff; -extern compop_func op_9120_0_comp_ff; -extern compop_func op_9128_0_comp_ff; -extern compop_func op_9130_0_comp_ff; -extern compop_func op_9138_0_comp_ff; -extern compop_func op_9139_0_comp_ff; -extern compop_func op_9140_0_comp_ff; -extern compop_func op_9148_0_comp_ff; -extern compop_func op_9150_0_comp_ff; -extern compop_func op_9158_0_comp_ff; -extern compop_func op_9160_0_comp_ff; -extern compop_func op_9168_0_comp_ff; -extern compop_func op_9170_0_comp_ff; -extern compop_func op_9178_0_comp_ff; -extern compop_func op_9179_0_comp_ff; -extern compop_func op_9180_0_comp_ff; -extern compop_func op_9188_0_comp_ff; -extern compop_func op_9190_0_comp_ff; -extern compop_func op_9198_0_comp_ff; -extern compop_func op_91a0_0_comp_ff; -extern compop_func op_91a8_0_comp_ff; -extern compop_func op_91b0_0_comp_ff; -extern compop_func op_91b8_0_comp_ff; -extern compop_func op_91b9_0_comp_ff; -extern compop_func op_91c0_0_comp_ff; -extern compop_func op_91c8_0_comp_ff; -extern compop_func op_91d0_0_comp_ff; -extern compop_func op_91d8_0_comp_ff; -extern compop_func op_91e0_0_comp_ff; -extern compop_func op_91e8_0_comp_ff; -extern compop_func op_91f0_0_comp_ff; -extern compop_func op_91f8_0_comp_ff; -extern compop_func op_91f9_0_comp_ff; -extern compop_func op_91fa_0_comp_ff; -extern compop_func op_91fb_0_comp_ff; -extern compop_func op_91fc_0_comp_ff; -extern compop_func op_b000_0_comp_ff; -extern compop_func op_b010_0_comp_ff; -extern compop_func op_b018_0_comp_ff; -extern compop_func op_b020_0_comp_ff; -extern compop_func op_b028_0_comp_ff; -extern compop_func op_b030_0_comp_ff; -extern compop_func op_b038_0_comp_ff; -extern compop_func op_b039_0_comp_ff; -extern compop_func op_b03a_0_comp_ff; -extern compop_func op_b03b_0_comp_ff; -extern compop_func op_b03c_0_comp_ff; -extern compop_func op_b040_0_comp_ff; -extern compop_func op_b048_0_comp_ff; -extern compop_func op_b050_0_comp_ff; -extern compop_func op_b058_0_comp_ff; -extern compop_func op_b060_0_comp_ff; -extern compop_func op_b068_0_comp_ff; -extern compop_func op_b070_0_comp_ff; -extern compop_func op_b078_0_comp_ff; -extern compop_func op_b079_0_comp_ff; -extern compop_func op_b07a_0_comp_ff; -extern compop_func op_b07b_0_comp_ff; -extern compop_func op_b07c_0_comp_ff; -extern compop_func op_b080_0_comp_ff; -extern compop_func op_b088_0_comp_ff; -extern compop_func op_b090_0_comp_ff; -extern compop_func op_b098_0_comp_ff; -extern compop_func op_b0a0_0_comp_ff; -extern compop_func op_b0a8_0_comp_ff; -extern compop_func op_b0b0_0_comp_ff; -extern compop_func op_b0b8_0_comp_ff; -extern compop_func op_b0b9_0_comp_ff; -extern compop_func op_b0ba_0_comp_ff; -extern compop_func op_b0bb_0_comp_ff; -extern compop_func op_b0bc_0_comp_ff; -extern compop_func op_b0c0_0_comp_ff; -extern compop_func op_b0c8_0_comp_ff; -extern compop_func op_b0d0_0_comp_ff; -extern compop_func op_b0d8_0_comp_ff; -extern compop_func op_b0e0_0_comp_ff; -extern compop_func op_b0e8_0_comp_ff; -extern compop_func op_b0f0_0_comp_ff; -extern compop_func op_b0f8_0_comp_ff; -extern compop_func op_b0f9_0_comp_ff; -extern compop_func op_b0fa_0_comp_ff; -extern compop_func op_b0fb_0_comp_ff; -extern compop_func op_b0fc_0_comp_ff; -extern compop_func op_b100_0_comp_ff; -extern compop_func op_b108_0_comp_ff; -extern compop_func op_b110_0_comp_ff; -extern compop_func op_b118_0_comp_ff; -extern compop_func op_b120_0_comp_ff; -extern compop_func op_b128_0_comp_ff; -extern compop_func op_b130_0_comp_ff; -extern compop_func op_b138_0_comp_ff; -extern compop_func op_b139_0_comp_ff; -extern compop_func op_b140_0_comp_ff; -extern compop_func op_b148_0_comp_ff; -extern compop_func op_b150_0_comp_ff; -extern compop_func op_b158_0_comp_ff; -extern compop_func op_b160_0_comp_ff; -extern compop_func op_b168_0_comp_ff; -extern compop_func op_b170_0_comp_ff; -extern compop_func op_b178_0_comp_ff; -extern compop_func op_b179_0_comp_ff; -extern compop_func op_b180_0_comp_ff; -extern compop_func op_b188_0_comp_ff; -extern compop_func op_b190_0_comp_ff; -extern compop_func op_b198_0_comp_ff; -extern compop_func op_b1a0_0_comp_ff; -extern compop_func op_b1a8_0_comp_ff; -extern compop_func op_b1b0_0_comp_ff; -extern compop_func op_b1b8_0_comp_ff; -extern compop_func op_b1b9_0_comp_ff; -extern compop_func op_b1c0_0_comp_ff; -extern compop_func op_b1c8_0_comp_ff; -extern compop_func op_b1d0_0_comp_ff; -extern compop_func op_b1d8_0_comp_ff; -extern compop_func op_b1e0_0_comp_ff; -extern compop_func op_b1e8_0_comp_ff; -extern compop_func op_b1f0_0_comp_ff; -extern compop_func op_b1f8_0_comp_ff; -extern compop_func op_b1f9_0_comp_ff; -extern compop_func op_b1fa_0_comp_ff; -extern compop_func op_b1fb_0_comp_ff; -extern compop_func op_b1fc_0_comp_ff; -extern compop_func op_c000_0_comp_ff; -extern compop_func op_c010_0_comp_ff; -extern compop_func op_c018_0_comp_ff; -extern compop_func op_c020_0_comp_ff; -extern compop_func op_c028_0_comp_ff; -extern compop_func op_c030_0_comp_ff; -extern compop_func op_c038_0_comp_ff; -extern compop_func op_c039_0_comp_ff; -extern compop_func op_c03a_0_comp_ff; -extern compop_func op_c03b_0_comp_ff; -extern compop_func op_c03c_0_comp_ff; -extern compop_func op_c040_0_comp_ff; -extern compop_func op_c050_0_comp_ff; -extern compop_func op_c058_0_comp_ff; -extern compop_func op_c060_0_comp_ff; -extern compop_func op_c068_0_comp_ff; -extern compop_func op_c070_0_comp_ff; -extern compop_func op_c078_0_comp_ff; -extern compop_func op_c079_0_comp_ff; -extern compop_func op_c07a_0_comp_ff; -extern compop_func op_c07b_0_comp_ff; -extern compop_func op_c07c_0_comp_ff; -extern compop_func op_c080_0_comp_ff; -extern compop_func op_c090_0_comp_ff; -extern compop_func op_c098_0_comp_ff; -extern compop_func op_c0a0_0_comp_ff; -extern compop_func op_c0a8_0_comp_ff; -extern compop_func op_c0b0_0_comp_ff; -extern compop_func op_c0b8_0_comp_ff; -extern compop_func op_c0b9_0_comp_ff; -extern compop_func op_c0ba_0_comp_ff; -extern compop_func op_c0bb_0_comp_ff; -extern compop_func op_c0bc_0_comp_ff; -extern compop_func op_c0c0_0_comp_ff; -extern compop_func op_c0d0_0_comp_ff; -extern compop_func op_c0d8_0_comp_ff; -extern compop_func op_c0e0_0_comp_ff; -extern compop_func op_c0e8_0_comp_ff; -extern compop_func op_c0f0_0_comp_ff; -extern compop_func op_c0f8_0_comp_ff; -extern compop_func op_c0f9_0_comp_ff; -extern compop_func op_c0fa_0_comp_ff; -extern compop_func op_c0fb_0_comp_ff; -extern compop_func op_c0fc_0_comp_ff; -extern compop_func op_c110_0_comp_ff; -extern compop_func op_c118_0_comp_ff; -extern compop_func op_c120_0_comp_ff; -extern compop_func op_c128_0_comp_ff; -extern compop_func op_c130_0_comp_ff; -extern compop_func op_c138_0_comp_ff; -extern compop_func op_c139_0_comp_ff; -extern compop_func op_c140_0_comp_ff; -extern compop_func op_c148_0_comp_ff; -extern compop_func op_c150_0_comp_ff; -extern compop_func op_c158_0_comp_ff; -extern compop_func op_c160_0_comp_ff; -extern compop_func op_c168_0_comp_ff; -extern compop_func op_c170_0_comp_ff; -extern compop_func op_c178_0_comp_ff; -extern compop_func op_c179_0_comp_ff; -extern compop_func op_c188_0_comp_ff; -extern compop_func op_c190_0_comp_ff; -extern compop_func op_c198_0_comp_ff; -extern compop_func op_c1a0_0_comp_ff; -extern compop_func op_c1a8_0_comp_ff; -extern compop_func op_c1b0_0_comp_ff; -extern compop_func op_c1b8_0_comp_ff; -extern compop_func op_c1b9_0_comp_ff; -extern compop_func op_c1c0_0_comp_ff; -extern compop_func op_c1d0_0_comp_ff; -extern compop_func op_c1d8_0_comp_ff; -extern compop_func op_c1e0_0_comp_ff; -extern compop_func op_c1e8_0_comp_ff; -extern compop_func op_c1f0_0_comp_ff; -extern compop_func op_c1f8_0_comp_ff; -extern compop_func op_c1f9_0_comp_ff; -extern compop_func op_c1fa_0_comp_ff; -extern compop_func op_c1fb_0_comp_ff; -extern compop_func op_c1fc_0_comp_ff; -extern compop_func op_d000_0_comp_ff; -extern compop_func op_d010_0_comp_ff; -extern compop_func op_d018_0_comp_ff; -extern compop_func op_d020_0_comp_ff; -extern compop_func op_d028_0_comp_ff; -extern compop_func op_d030_0_comp_ff; -extern compop_func op_d038_0_comp_ff; -extern compop_func op_d039_0_comp_ff; -extern compop_func op_d03a_0_comp_ff; -extern compop_func op_d03b_0_comp_ff; -extern compop_func op_d03c_0_comp_ff; -extern compop_func op_d040_0_comp_ff; -extern compop_func op_d048_0_comp_ff; -extern compop_func op_d050_0_comp_ff; -extern compop_func op_d058_0_comp_ff; -extern compop_func op_d060_0_comp_ff; -extern compop_func op_d068_0_comp_ff; -extern compop_func op_d070_0_comp_ff; -extern compop_func op_d078_0_comp_ff; -extern compop_func op_d079_0_comp_ff; -extern compop_func op_d07a_0_comp_ff; -extern compop_func op_d07b_0_comp_ff; -extern compop_func op_d07c_0_comp_ff; -extern compop_func op_d080_0_comp_ff; -extern compop_func op_d088_0_comp_ff; -extern compop_func op_d090_0_comp_ff; -extern compop_func op_d098_0_comp_ff; -extern compop_func op_d0a0_0_comp_ff; -extern compop_func op_d0a8_0_comp_ff; -extern compop_func op_d0b0_0_comp_ff; -extern compop_func op_d0b8_0_comp_ff; -extern compop_func op_d0b9_0_comp_ff; -extern compop_func op_d0ba_0_comp_ff; -extern compop_func op_d0bb_0_comp_ff; -extern compop_func op_d0bc_0_comp_ff; -extern compop_func op_d0c0_0_comp_ff; -extern compop_func op_d0c8_0_comp_ff; -extern compop_func op_d0d0_0_comp_ff; -extern compop_func op_d0d8_0_comp_ff; -extern compop_func op_d0e0_0_comp_ff; -extern compop_func op_d0e8_0_comp_ff; -extern compop_func op_d0f0_0_comp_ff; -extern compop_func op_d0f8_0_comp_ff; -extern compop_func op_d0f9_0_comp_ff; -extern compop_func op_d0fa_0_comp_ff; -extern compop_func op_d0fb_0_comp_ff; -extern compop_func op_d0fc_0_comp_ff; -extern compop_func op_d100_0_comp_ff; -extern compop_func op_d108_0_comp_ff; -extern compop_func op_d110_0_comp_ff; -extern compop_func op_d118_0_comp_ff; -extern compop_func op_d120_0_comp_ff; -extern compop_func op_d128_0_comp_ff; -extern compop_func op_d130_0_comp_ff; -extern compop_func op_d138_0_comp_ff; -extern compop_func op_d139_0_comp_ff; -extern compop_func op_d140_0_comp_ff; -extern compop_func op_d148_0_comp_ff; -extern compop_func op_d150_0_comp_ff; -extern compop_func op_d158_0_comp_ff; -extern compop_func op_d160_0_comp_ff; -extern compop_func op_d168_0_comp_ff; -extern compop_func op_d170_0_comp_ff; -extern compop_func op_d178_0_comp_ff; -extern compop_func op_d179_0_comp_ff; -extern compop_func op_d180_0_comp_ff; -extern compop_func op_d188_0_comp_ff; -extern compop_func op_d190_0_comp_ff; -extern compop_func op_d198_0_comp_ff; -extern compop_func op_d1a0_0_comp_ff; -extern compop_func op_d1a8_0_comp_ff; -extern compop_func op_d1b0_0_comp_ff; -extern compop_func op_d1b8_0_comp_ff; -extern compop_func op_d1b9_0_comp_ff; -extern compop_func op_d1c0_0_comp_ff; -extern compop_func op_d1c8_0_comp_ff; -extern compop_func op_d1d0_0_comp_ff; -extern compop_func op_d1d8_0_comp_ff; -extern compop_func op_d1e0_0_comp_ff; -extern compop_func op_d1e8_0_comp_ff; -extern compop_func op_d1f0_0_comp_ff; -extern compop_func op_d1f8_0_comp_ff; -extern compop_func op_d1f9_0_comp_ff; -extern compop_func op_d1fa_0_comp_ff; -extern compop_func op_d1fb_0_comp_ff; -extern compop_func op_d1fc_0_comp_ff; -extern compop_func op_e000_0_comp_ff; -extern compop_func op_e008_0_comp_ff; -extern compop_func op_e018_0_comp_ff; -extern compop_func op_e020_0_comp_ff; -extern compop_func op_e028_0_comp_ff; -extern compop_func op_e038_0_comp_ff; -extern compop_func op_e040_0_comp_ff; -extern compop_func op_e048_0_comp_ff; -extern compop_func op_e058_0_comp_ff; -extern compop_func op_e060_0_comp_ff; -extern compop_func op_e068_0_comp_ff; -extern compop_func op_e078_0_comp_ff; -extern compop_func op_e080_0_comp_ff; -extern compop_func op_e088_0_comp_ff; -extern compop_func op_e098_0_comp_ff; -extern compop_func op_e0a0_0_comp_ff; -extern compop_func op_e0a8_0_comp_ff; -extern compop_func op_e0b8_0_comp_ff; -extern compop_func op_e100_0_comp_ff; -extern compop_func op_e108_0_comp_ff; -extern compop_func op_e118_0_comp_ff; -extern compop_func op_e120_0_comp_ff; -extern compop_func op_e128_0_comp_ff; -extern compop_func op_e138_0_comp_ff; -extern compop_func op_e140_0_comp_ff; -extern compop_func op_e148_0_comp_ff; -extern compop_func op_e158_0_comp_ff; -extern compop_func op_e160_0_comp_ff; -extern compop_func op_e168_0_comp_ff; -extern compop_func op_e178_0_comp_ff; -extern compop_func op_e180_0_comp_ff; -extern compop_func op_e188_0_comp_ff; -extern compop_func op_e198_0_comp_ff; -extern compop_func op_e1a0_0_comp_ff; -extern compop_func op_e1a8_0_comp_ff; -extern compop_func op_e1b8_0_comp_ff; -extern compop_func op_f200_0_comp_ff; -extern compop_func op_f208_0_comp_ff; -extern compop_func op_f210_0_comp_ff; -extern compop_func op_f218_0_comp_ff; -extern compop_func op_f220_0_comp_ff; -extern compop_func op_f228_0_comp_ff; -extern compop_func op_f230_0_comp_ff; -extern compop_func op_f238_0_comp_ff; -extern compop_func op_f239_0_comp_ff; -extern compop_func op_f23a_0_comp_ff; -extern compop_func op_f23b_0_comp_ff; -extern compop_func op_f23c_0_comp_ff; -extern compop_func op_f240_0_comp_ff; -extern compop_func op_f250_0_comp_ff; -extern compop_func op_f258_0_comp_ff; -extern compop_func op_f260_0_comp_ff; -extern compop_func op_f268_0_comp_ff; -extern compop_func op_f270_0_comp_ff; -extern compop_func op_f278_0_comp_ff; -extern compop_func op_f279_0_comp_ff; -extern compop_func op_f280_0_comp_ff; -extern compop_func op_f2c0_0_comp_ff; -extern compop_func op_f600_0_comp_ff; -extern compop_func op_f608_0_comp_ff; -extern compop_func op_f610_0_comp_ff; -extern compop_func op_f618_0_comp_ff; -extern compop_func op_f620_0_comp_ff; -extern compop_func op_0_0_comp_nf; -extern compop_func op_10_0_comp_nf; -extern compop_func op_18_0_comp_nf; -extern compop_func op_20_0_comp_nf; -extern compop_func op_28_0_comp_nf; -extern compop_func op_30_0_comp_nf; -extern compop_func op_38_0_comp_nf; -extern compop_func op_39_0_comp_nf; -extern compop_func op_40_0_comp_nf; -extern compop_func op_50_0_comp_nf; -extern compop_func op_58_0_comp_nf; -extern compop_func op_60_0_comp_nf; -extern compop_func op_68_0_comp_nf; -extern compop_func op_70_0_comp_nf; -extern compop_func op_78_0_comp_nf; -extern compop_func op_79_0_comp_nf; -extern compop_func op_80_0_comp_nf; -extern compop_func op_90_0_comp_nf; -extern compop_func op_98_0_comp_nf; -extern compop_func op_a0_0_comp_nf; -extern compop_func op_a8_0_comp_nf; -extern compop_func op_b0_0_comp_nf; -extern compop_func op_b8_0_comp_nf; -extern compop_func op_b9_0_comp_nf; -extern compop_func op_100_0_comp_nf; -extern compop_func op_110_0_comp_nf; -extern compop_func op_118_0_comp_nf; -extern compop_func op_120_0_comp_nf; -extern compop_func op_128_0_comp_nf; -extern compop_func op_130_0_comp_nf; -extern compop_func op_138_0_comp_nf; -extern compop_func op_139_0_comp_nf; -extern compop_func op_13a_0_comp_nf; -extern compop_func op_13b_0_comp_nf; -extern compop_func op_13c_0_comp_nf; -extern compop_func op_140_0_comp_nf; -extern compop_func op_150_0_comp_nf; -extern compop_func op_158_0_comp_nf; -extern compop_func op_160_0_comp_nf; -extern compop_func op_168_0_comp_nf; -extern compop_func op_170_0_comp_nf; -extern compop_func op_178_0_comp_nf; -extern compop_func op_179_0_comp_nf; -extern compop_func op_180_0_comp_nf; -extern compop_func op_190_0_comp_nf; -extern compop_func op_198_0_comp_nf; -extern compop_func op_1a0_0_comp_nf; -extern compop_func op_1a8_0_comp_nf; -extern compop_func op_1b0_0_comp_nf; -extern compop_func op_1b8_0_comp_nf; -extern compop_func op_1b9_0_comp_nf; -extern compop_func op_1c0_0_comp_nf; -extern compop_func op_1d0_0_comp_nf; -extern compop_func op_1d8_0_comp_nf; -extern compop_func op_1e0_0_comp_nf; -extern compop_func op_1e8_0_comp_nf; -extern compop_func op_1f0_0_comp_nf; -extern compop_func op_1f8_0_comp_nf; -extern compop_func op_1f9_0_comp_nf; -extern compop_func op_200_0_comp_nf; -extern compop_func op_210_0_comp_nf; -extern compop_func op_218_0_comp_nf; -extern compop_func op_220_0_comp_nf; -extern compop_func op_228_0_comp_nf; -extern compop_func op_230_0_comp_nf; -extern compop_func op_238_0_comp_nf; -extern compop_func op_239_0_comp_nf; -extern compop_func op_240_0_comp_nf; -extern compop_func op_250_0_comp_nf; -extern compop_func op_258_0_comp_nf; -extern compop_func op_260_0_comp_nf; -extern compop_func op_268_0_comp_nf; -extern compop_func op_270_0_comp_nf; -extern compop_func op_278_0_comp_nf; -extern compop_func op_279_0_comp_nf; -extern compop_func op_280_0_comp_nf; -extern compop_func op_290_0_comp_nf; -extern compop_func op_298_0_comp_nf; -extern compop_func op_2a0_0_comp_nf; -extern compop_func op_2a8_0_comp_nf; -extern compop_func op_2b0_0_comp_nf; -extern compop_func op_2b8_0_comp_nf; -extern compop_func op_2b9_0_comp_nf; -extern compop_func op_400_0_comp_nf; -extern compop_func op_410_0_comp_nf; -extern compop_func op_418_0_comp_nf; -extern compop_func op_420_0_comp_nf; -extern compop_func op_428_0_comp_nf; -extern compop_func op_430_0_comp_nf; -extern compop_func op_438_0_comp_nf; -extern compop_func op_439_0_comp_nf; -extern compop_func op_440_0_comp_nf; -extern compop_func op_450_0_comp_nf; -extern compop_func op_458_0_comp_nf; -extern compop_func op_460_0_comp_nf; -extern compop_func op_468_0_comp_nf; -extern compop_func op_470_0_comp_nf; -extern compop_func op_478_0_comp_nf; -extern compop_func op_479_0_comp_nf; -extern compop_func op_480_0_comp_nf; -extern compop_func op_490_0_comp_nf; -extern compop_func op_498_0_comp_nf; -extern compop_func op_4a0_0_comp_nf; -extern compop_func op_4a8_0_comp_nf; -extern compop_func op_4b0_0_comp_nf; -extern compop_func op_4b8_0_comp_nf; -extern compop_func op_4b9_0_comp_nf; -extern compop_func op_600_0_comp_nf; -extern compop_func op_610_0_comp_nf; -extern compop_func op_618_0_comp_nf; -extern compop_func op_620_0_comp_nf; -extern compop_func op_628_0_comp_nf; -extern compop_func op_630_0_comp_nf; -extern compop_func op_638_0_comp_nf; -extern compop_func op_639_0_comp_nf; -extern compop_func op_640_0_comp_nf; -extern compop_func op_650_0_comp_nf; -extern compop_func op_658_0_comp_nf; -extern compop_func op_660_0_comp_nf; -extern compop_func op_668_0_comp_nf; -extern compop_func op_670_0_comp_nf; -extern compop_func op_678_0_comp_nf; -extern compop_func op_679_0_comp_nf; -extern compop_func op_680_0_comp_nf; -extern compop_func op_690_0_comp_nf; -extern compop_func op_698_0_comp_nf; -extern compop_func op_6a0_0_comp_nf; -extern compop_func op_6a8_0_comp_nf; -extern compop_func op_6b0_0_comp_nf; -extern compop_func op_6b8_0_comp_nf; -extern compop_func op_6b9_0_comp_nf; -extern compop_func op_800_0_comp_nf; -extern compop_func op_810_0_comp_nf; -extern compop_func op_818_0_comp_nf; -extern compop_func op_820_0_comp_nf; -extern compop_func op_828_0_comp_nf; -extern compop_func op_830_0_comp_nf; -extern compop_func op_838_0_comp_nf; -extern compop_func op_839_0_comp_nf; -extern compop_func op_83a_0_comp_nf; -extern compop_func op_83b_0_comp_nf; -extern compop_func op_840_0_comp_nf; -extern compop_func op_850_0_comp_nf; -extern compop_func op_858_0_comp_nf; -extern compop_func op_860_0_comp_nf; -extern compop_func op_868_0_comp_nf; -extern compop_func op_870_0_comp_nf; -extern compop_func op_878_0_comp_nf; -extern compop_func op_879_0_comp_nf; -extern compop_func op_880_0_comp_nf; -extern compop_func op_890_0_comp_nf; -extern compop_func op_898_0_comp_nf; -extern compop_func op_8a0_0_comp_nf; -extern compop_func op_8a8_0_comp_nf; -extern compop_func op_8b0_0_comp_nf; -extern compop_func op_8b8_0_comp_nf; -extern compop_func op_8b9_0_comp_nf; -extern compop_func op_8c0_0_comp_nf; -extern compop_func op_8d0_0_comp_nf; -extern compop_func op_8d8_0_comp_nf; -extern compop_func op_8e0_0_comp_nf; -extern compop_func op_8e8_0_comp_nf; -extern compop_func op_8f0_0_comp_nf; -extern compop_func op_8f8_0_comp_nf; -extern compop_func op_8f9_0_comp_nf; -extern compop_func op_a00_0_comp_nf; -extern compop_func op_a10_0_comp_nf; -extern compop_func op_a18_0_comp_nf; -extern compop_func op_a20_0_comp_nf; -extern compop_func op_a28_0_comp_nf; -extern compop_func op_a30_0_comp_nf; -extern compop_func op_a38_0_comp_nf; -extern compop_func op_a39_0_comp_nf; -extern compop_func op_a40_0_comp_nf; -extern compop_func op_a50_0_comp_nf; -extern compop_func op_a58_0_comp_nf; -extern compop_func op_a60_0_comp_nf; -extern compop_func op_a68_0_comp_nf; -extern compop_func op_a70_0_comp_nf; -extern compop_func op_a78_0_comp_nf; -extern compop_func op_a79_0_comp_nf; -extern compop_func op_a80_0_comp_nf; -extern compop_func op_a90_0_comp_nf; -extern compop_func op_a98_0_comp_nf; -extern compop_func op_aa0_0_comp_nf; -extern compop_func op_aa8_0_comp_nf; -extern compop_func op_ab0_0_comp_nf; -extern compop_func op_ab8_0_comp_nf; -extern compop_func op_ab9_0_comp_nf; -extern compop_func op_c00_0_comp_nf; -extern compop_func op_c10_0_comp_nf; -extern compop_func op_c18_0_comp_nf; -extern compop_func op_c20_0_comp_nf; -extern compop_func op_c28_0_comp_nf; -extern compop_func op_c30_0_comp_nf; -extern compop_func op_c38_0_comp_nf; -extern compop_func op_c39_0_comp_nf; -extern compop_func op_c3a_0_comp_nf; -extern compop_func op_c3b_0_comp_nf; -extern compop_func op_c40_0_comp_nf; -extern compop_func op_c50_0_comp_nf; -extern compop_func op_c58_0_comp_nf; -extern compop_func op_c60_0_comp_nf; -extern compop_func op_c68_0_comp_nf; -extern compop_func op_c70_0_comp_nf; -extern compop_func op_c78_0_comp_nf; -extern compop_func op_c79_0_comp_nf; -extern compop_func op_c7a_0_comp_nf; -extern compop_func op_c7b_0_comp_nf; -extern compop_func op_c80_0_comp_nf; -extern compop_func op_c90_0_comp_nf; -extern compop_func op_c98_0_comp_nf; -extern compop_func op_ca0_0_comp_nf; -extern compop_func op_ca8_0_comp_nf; -extern compop_func op_cb0_0_comp_nf; -extern compop_func op_cb8_0_comp_nf; -extern compop_func op_cb9_0_comp_nf; -extern compop_func op_cba_0_comp_nf; -extern compop_func op_cbb_0_comp_nf; -extern compop_func op_1000_0_comp_nf; -extern compop_func op_1010_0_comp_nf; -extern compop_func op_1018_0_comp_nf; -extern compop_func op_1020_0_comp_nf; -extern compop_func op_1028_0_comp_nf; -extern compop_func op_1030_0_comp_nf; -extern compop_func op_1038_0_comp_nf; -extern compop_func op_1039_0_comp_nf; -extern compop_func op_103a_0_comp_nf; -extern compop_func op_103b_0_comp_nf; -extern compop_func op_103c_0_comp_nf; -extern compop_func op_1080_0_comp_nf; -extern compop_func op_1090_0_comp_nf; -extern compop_func op_1098_0_comp_nf; -extern compop_func op_10a0_0_comp_nf; -extern compop_func op_10a8_0_comp_nf; -extern compop_func op_10b0_0_comp_nf; -extern compop_func op_10b8_0_comp_nf; -extern compop_func op_10b9_0_comp_nf; -extern compop_func op_10ba_0_comp_nf; -extern compop_func op_10bb_0_comp_nf; -extern compop_func op_10bc_0_comp_nf; -extern compop_func op_10c0_0_comp_nf; -extern compop_func op_10d0_0_comp_nf; -extern compop_func op_10d8_0_comp_nf; -extern compop_func op_10e0_0_comp_nf; -extern compop_func op_10e8_0_comp_nf; -extern compop_func op_10f0_0_comp_nf; -extern compop_func op_10f8_0_comp_nf; -extern compop_func op_10f9_0_comp_nf; -extern compop_func op_10fa_0_comp_nf; -extern compop_func op_10fb_0_comp_nf; -extern compop_func op_10fc_0_comp_nf; -extern compop_func op_1100_0_comp_nf; -extern compop_func op_1110_0_comp_nf; -extern compop_func op_1118_0_comp_nf; -extern compop_func op_1120_0_comp_nf; -extern compop_func op_1128_0_comp_nf; -extern compop_func op_1130_0_comp_nf; -extern compop_func op_1138_0_comp_nf; -extern compop_func op_1139_0_comp_nf; -extern compop_func op_113a_0_comp_nf; -extern compop_func op_113b_0_comp_nf; -extern compop_func op_113c_0_comp_nf; -extern compop_func op_1140_0_comp_nf; -extern compop_func op_1150_0_comp_nf; -extern compop_func op_1158_0_comp_nf; -extern compop_func op_1160_0_comp_nf; -extern compop_func op_1168_0_comp_nf; -extern compop_func op_1170_0_comp_nf; -extern compop_func op_1178_0_comp_nf; -extern compop_func op_1179_0_comp_nf; -extern compop_func op_117a_0_comp_nf; -extern compop_func op_117b_0_comp_nf; -extern compop_func op_117c_0_comp_nf; -extern compop_func op_1180_0_comp_nf; -extern compop_func op_1190_0_comp_nf; -extern compop_func op_1198_0_comp_nf; -extern compop_func op_11a0_0_comp_nf; -extern compop_func op_11a8_0_comp_nf; -extern compop_func op_11b0_0_comp_nf; -extern compop_func op_11b8_0_comp_nf; -extern compop_func op_11b9_0_comp_nf; -extern compop_func op_11ba_0_comp_nf; -extern compop_func op_11bb_0_comp_nf; -extern compop_func op_11bc_0_comp_nf; -extern compop_func op_11c0_0_comp_nf; -extern compop_func op_11d0_0_comp_nf; -extern compop_func op_11d8_0_comp_nf; -extern compop_func op_11e0_0_comp_nf; -extern compop_func op_11e8_0_comp_nf; -extern compop_func op_11f0_0_comp_nf; -extern compop_func op_11f8_0_comp_nf; -extern compop_func op_11f9_0_comp_nf; -extern compop_func op_11fa_0_comp_nf; -extern compop_func op_11fb_0_comp_nf; -extern compop_func op_11fc_0_comp_nf; -extern compop_func op_13c0_0_comp_nf; -extern compop_func op_13d0_0_comp_nf; -extern compop_func op_13d8_0_comp_nf; -extern compop_func op_13e0_0_comp_nf; -extern compop_func op_13e8_0_comp_nf; -extern compop_func op_13f0_0_comp_nf; -extern compop_func op_13f8_0_comp_nf; -extern compop_func op_13f9_0_comp_nf; -extern compop_func op_13fa_0_comp_nf; -extern compop_func op_13fb_0_comp_nf; -extern compop_func op_13fc_0_comp_nf; -extern compop_func op_2000_0_comp_nf; -extern compop_func op_2008_0_comp_nf; -extern compop_func op_2010_0_comp_nf; -extern compop_func op_2018_0_comp_nf; -extern compop_func op_2020_0_comp_nf; -extern compop_func op_2028_0_comp_nf; -extern compop_func op_2030_0_comp_nf; -extern compop_func op_2038_0_comp_nf; -extern compop_func op_2039_0_comp_nf; -extern compop_func op_203a_0_comp_nf; -extern compop_func op_203b_0_comp_nf; -extern compop_func op_203c_0_comp_nf; -extern compop_func op_2040_0_comp_nf; -extern compop_func op_2048_0_comp_nf; -extern compop_func op_2050_0_comp_nf; -extern compop_func op_2058_0_comp_nf; -extern compop_func op_2060_0_comp_nf; -extern compop_func op_2068_0_comp_nf; -extern compop_func op_2070_0_comp_nf; -extern compop_func op_2078_0_comp_nf; -extern compop_func op_2079_0_comp_nf; -extern compop_func op_207a_0_comp_nf; -extern compop_func op_207b_0_comp_nf; -extern compop_func op_207c_0_comp_nf; -extern compop_func op_2080_0_comp_nf; -extern compop_func op_2088_0_comp_nf; -extern compop_func op_2090_0_comp_nf; -extern compop_func op_2098_0_comp_nf; -extern compop_func op_20a0_0_comp_nf; -extern compop_func op_20a8_0_comp_nf; -extern compop_func op_20b0_0_comp_nf; -extern compop_func op_20b8_0_comp_nf; -extern compop_func op_20b9_0_comp_nf; -extern compop_func op_20ba_0_comp_nf; -extern compop_func op_20bb_0_comp_nf; -extern compop_func op_20bc_0_comp_nf; -extern compop_func op_20c0_0_comp_nf; -extern compop_func op_20c8_0_comp_nf; -extern compop_func op_20d0_0_comp_nf; -extern compop_func op_20d8_0_comp_nf; -extern compop_func op_20e0_0_comp_nf; -extern compop_func op_20e8_0_comp_nf; -extern compop_func op_20f0_0_comp_nf; -extern compop_func op_20f8_0_comp_nf; -extern compop_func op_20f9_0_comp_nf; -extern compop_func op_20fa_0_comp_nf; -extern compop_func op_20fb_0_comp_nf; -extern compop_func op_20fc_0_comp_nf; -extern compop_func op_2100_0_comp_nf; -extern compop_func op_2108_0_comp_nf; -extern compop_func op_2110_0_comp_nf; -extern compop_func op_2118_0_comp_nf; -extern compop_func op_2120_0_comp_nf; -extern compop_func op_2128_0_comp_nf; -extern compop_func op_2130_0_comp_nf; -extern compop_func op_2138_0_comp_nf; -extern compop_func op_2139_0_comp_nf; -extern compop_func op_213a_0_comp_nf; -extern compop_func op_213b_0_comp_nf; -extern compop_func op_213c_0_comp_nf; -extern compop_func op_2140_0_comp_nf; -extern compop_func op_2148_0_comp_nf; -extern compop_func op_2150_0_comp_nf; -extern compop_func op_2158_0_comp_nf; -extern compop_func op_2160_0_comp_nf; -extern compop_func op_2168_0_comp_nf; -extern compop_func op_2170_0_comp_nf; -extern compop_func op_2178_0_comp_nf; -extern compop_func op_2179_0_comp_nf; -extern compop_func op_217a_0_comp_nf; -extern compop_func op_217b_0_comp_nf; -extern compop_func op_217c_0_comp_nf; -extern compop_func op_2180_0_comp_nf; -extern compop_func op_2188_0_comp_nf; -extern compop_func op_2190_0_comp_nf; -extern compop_func op_2198_0_comp_nf; -extern compop_func op_21a0_0_comp_nf; -extern compop_func op_21a8_0_comp_nf; -extern compop_func op_21b0_0_comp_nf; -extern compop_func op_21b8_0_comp_nf; -extern compop_func op_21b9_0_comp_nf; -extern compop_func op_21ba_0_comp_nf; -extern compop_func op_21bb_0_comp_nf; -extern compop_func op_21bc_0_comp_nf; -extern compop_func op_21c0_0_comp_nf; -extern compop_func op_21c8_0_comp_nf; -extern compop_func op_21d0_0_comp_nf; -extern compop_func op_21d8_0_comp_nf; -extern compop_func op_21e0_0_comp_nf; -extern compop_func op_21e8_0_comp_nf; -extern compop_func op_21f0_0_comp_nf; -extern compop_func op_21f8_0_comp_nf; -extern compop_func op_21f9_0_comp_nf; -extern compop_func op_21fa_0_comp_nf; -extern compop_func op_21fb_0_comp_nf; -extern compop_func op_21fc_0_comp_nf; -extern compop_func op_23c0_0_comp_nf; -extern compop_func op_23c8_0_comp_nf; -extern compop_func op_23d0_0_comp_nf; -extern compop_func op_23d8_0_comp_nf; -extern compop_func op_23e0_0_comp_nf; -extern compop_func op_23e8_0_comp_nf; -extern compop_func op_23f0_0_comp_nf; -extern compop_func op_23f8_0_comp_nf; -extern compop_func op_23f9_0_comp_nf; -extern compop_func op_23fa_0_comp_nf; -extern compop_func op_23fb_0_comp_nf; -extern compop_func op_23fc_0_comp_nf; -extern compop_func op_3000_0_comp_nf; -extern compop_func op_3008_0_comp_nf; -extern compop_func op_3010_0_comp_nf; -extern compop_func op_3018_0_comp_nf; -extern compop_func op_3020_0_comp_nf; -extern compop_func op_3028_0_comp_nf; -extern compop_func op_3030_0_comp_nf; -extern compop_func op_3038_0_comp_nf; -extern compop_func op_3039_0_comp_nf; -extern compop_func op_303a_0_comp_nf; -extern compop_func op_303b_0_comp_nf; -extern compop_func op_303c_0_comp_nf; -extern compop_func op_3040_0_comp_nf; -extern compop_func op_3048_0_comp_nf; -extern compop_func op_3050_0_comp_nf; -extern compop_func op_3058_0_comp_nf; -extern compop_func op_3060_0_comp_nf; -extern compop_func op_3068_0_comp_nf; -extern compop_func op_3070_0_comp_nf; -extern compop_func op_3078_0_comp_nf; -extern compop_func op_3079_0_comp_nf; -extern compop_func op_307a_0_comp_nf; -extern compop_func op_307b_0_comp_nf; -extern compop_func op_307c_0_comp_nf; -extern compop_func op_3080_0_comp_nf; -extern compop_func op_3088_0_comp_nf; -extern compop_func op_3090_0_comp_nf; -extern compop_func op_3098_0_comp_nf; -extern compop_func op_30a0_0_comp_nf; -extern compop_func op_30a8_0_comp_nf; -extern compop_func op_30b0_0_comp_nf; -extern compop_func op_30b8_0_comp_nf; -extern compop_func op_30b9_0_comp_nf; -extern compop_func op_30ba_0_comp_nf; -extern compop_func op_30bb_0_comp_nf; -extern compop_func op_30bc_0_comp_nf; -extern compop_func op_30c0_0_comp_nf; -extern compop_func op_30c8_0_comp_nf; -extern compop_func op_30d0_0_comp_nf; -extern compop_func op_30d8_0_comp_nf; -extern compop_func op_30e0_0_comp_nf; -extern compop_func op_30e8_0_comp_nf; -extern compop_func op_30f0_0_comp_nf; -extern compop_func op_30f8_0_comp_nf; -extern compop_func op_30f9_0_comp_nf; -extern compop_func op_30fa_0_comp_nf; -extern compop_func op_30fb_0_comp_nf; -extern compop_func op_30fc_0_comp_nf; -extern compop_func op_3100_0_comp_nf; -extern compop_func op_3108_0_comp_nf; -extern compop_func op_3110_0_comp_nf; -extern compop_func op_3118_0_comp_nf; -extern compop_func op_3120_0_comp_nf; -extern compop_func op_3128_0_comp_nf; -extern compop_func op_3130_0_comp_nf; -extern compop_func op_3138_0_comp_nf; -extern compop_func op_3139_0_comp_nf; -extern compop_func op_313a_0_comp_nf; -extern compop_func op_313b_0_comp_nf; -extern compop_func op_313c_0_comp_nf; -extern compop_func op_3140_0_comp_nf; -extern compop_func op_3148_0_comp_nf; -extern compop_func op_3150_0_comp_nf; -extern compop_func op_3158_0_comp_nf; -extern compop_func op_3160_0_comp_nf; -extern compop_func op_3168_0_comp_nf; -extern compop_func op_3170_0_comp_nf; -extern compop_func op_3178_0_comp_nf; -extern compop_func op_3179_0_comp_nf; -extern compop_func op_317a_0_comp_nf; -extern compop_func op_317b_0_comp_nf; -extern compop_func op_317c_0_comp_nf; -extern compop_func op_3180_0_comp_nf; -extern compop_func op_3188_0_comp_nf; -extern compop_func op_3190_0_comp_nf; -extern compop_func op_3198_0_comp_nf; -extern compop_func op_31a0_0_comp_nf; -extern compop_func op_31a8_0_comp_nf; -extern compop_func op_31b0_0_comp_nf; -extern compop_func op_31b8_0_comp_nf; -extern compop_func op_31b9_0_comp_nf; -extern compop_func op_31ba_0_comp_nf; -extern compop_func op_31bb_0_comp_nf; -extern compop_func op_31bc_0_comp_nf; -extern compop_func op_31c0_0_comp_nf; -extern compop_func op_31c8_0_comp_nf; -extern compop_func op_31d0_0_comp_nf; -extern compop_func op_31d8_0_comp_nf; -extern compop_func op_31e0_0_comp_nf; -extern compop_func op_31e8_0_comp_nf; -extern compop_func op_31f0_0_comp_nf; -extern compop_func op_31f8_0_comp_nf; -extern compop_func op_31f9_0_comp_nf; -extern compop_func op_31fa_0_comp_nf; -extern compop_func op_31fb_0_comp_nf; -extern compop_func op_31fc_0_comp_nf; -extern compop_func op_33c0_0_comp_nf; -extern compop_func op_33c8_0_comp_nf; -extern compop_func op_33d0_0_comp_nf; -extern compop_func op_33d8_0_comp_nf; -extern compop_func op_33e0_0_comp_nf; -extern compop_func op_33e8_0_comp_nf; -extern compop_func op_33f0_0_comp_nf; -extern compop_func op_33f8_0_comp_nf; -extern compop_func op_33f9_0_comp_nf; -extern compop_func op_33fa_0_comp_nf; -extern compop_func op_33fb_0_comp_nf; -extern compop_func op_33fc_0_comp_nf; -extern compop_func op_4000_0_comp_nf; -extern compop_func op_4010_0_comp_nf; -extern compop_func op_4018_0_comp_nf; -extern compop_func op_4020_0_comp_nf; -extern compop_func op_4028_0_comp_nf; -extern compop_func op_4030_0_comp_nf; -extern compop_func op_4038_0_comp_nf; -extern compop_func op_4039_0_comp_nf; -extern compop_func op_4040_0_comp_nf; -extern compop_func op_4050_0_comp_nf; -extern compop_func op_4058_0_comp_nf; -extern compop_func op_4060_0_comp_nf; -extern compop_func op_4068_0_comp_nf; -extern compop_func op_4070_0_comp_nf; -extern compop_func op_4078_0_comp_nf; -extern compop_func op_4079_0_comp_nf; -extern compop_func op_4080_0_comp_nf; -extern compop_func op_4090_0_comp_nf; -extern compop_func op_4098_0_comp_nf; -extern compop_func op_40a0_0_comp_nf; -extern compop_func op_40a8_0_comp_nf; -extern compop_func op_40b0_0_comp_nf; -extern compop_func op_40b8_0_comp_nf; -extern compop_func op_40b9_0_comp_nf; -extern compop_func op_41d0_0_comp_nf; -extern compop_func op_41e8_0_comp_nf; -extern compop_func op_41f0_0_comp_nf; -extern compop_func op_41f8_0_comp_nf; -extern compop_func op_41f9_0_comp_nf; -extern compop_func op_41fa_0_comp_nf; -extern compop_func op_41fb_0_comp_nf; -extern compop_func op_4200_0_comp_nf; -extern compop_func op_4210_0_comp_nf; -extern compop_func op_4218_0_comp_nf; -extern compop_func op_4220_0_comp_nf; -extern compop_func op_4228_0_comp_nf; -extern compop_func op_4230_0_comp_nf; -extern compop_func op_4238_0_comp_nf; -extern compop_func op_4239_0_comp_nf; -extern compop_func op_4240_0_comp_nf; -extern compop_func op_4250_0_comp_nf; -extern compop_func op_4258_0_comp_nf; -extern compop_func op_4260_0_comp_nf; -extern compop_func op_4268_0_comp_nf; -extern compop_func op_4270_0_comp_nf; -extern compop_func op_4278_0_comp_nf; -extern compop_func op_4279_0_comp_nf; -extern compop_func op_4280_0_comp_nf; -extern compop_func op_4290_0_comp_nf; -extern compop_func op_4298_0_comp_nf; -extern compop_func op_42a0_0_comp_nf; -extern compop_func op_42a8_0_comp_nf; -extern compop_func op_42b0_0_comp_nf; -extern compop_func op_42b8_0_comp_nf; -extern compop_func op_42b9_0_comp_nf; -extern compop_func op_4400_0_comp_nf; -extern compop_func op_4410_0_comp_nf; -extern compop_func op_4418_0_comp_nf; -extern compop_func op_4420_0_comp_nf; -extern compop_func op_4428_0_comp_nf; -extern compop_func op_4430_0_comp_nf; -extern compop_func op_4438_0_comp_nf; -extern compop_func op_4439_0_comp_nf; -extern compop_func op_4440_0_comp_nf; -extern compop_func op_4450_0_comp_nf; -extern compop_func op_4458_0_comp_nf; -extern compop_func op_4460_0_comp_nf; -extern compop_func op_4468_0_comp_nf; -extern compop_func op_4470_0_comp_nf; -extern compop_func op_4478_0_comp_nf; -extern compop_func op_4479_0_comp_nf; -extern compop_func op_4480_0_comp_nf; -extern compop_func op_4490_0_comp_nf; -extern compop_func op_4498_0_comp_nf; -extern compop_func op_44a0_0_comp_nf; -extern compop_func op_44a8_0_comp_nf; -extern compop_func op_44b0_0_comp_nf; -extern compop_func op_44b8_0_comp_nf; -extern compop_func op_44b9_0_comp_nf; -extern compop_func op_4600_0_comp_nf; -extern compop_func op_4610_0_comp_nf; -extern compop_func op_4618_0_comp_nf; -extern compop_func op_4620_0_comp_nf; -extern compop_func op_4628_0_comp_nf; -extern compop_func op_4630_0_comp_nf; -extern compop_func op_4638_0_comp_nf; -extern compop_func op_4639_0_comp_nf; -extern compop_func op_4640_0_comp_nf; -extern compop_func op_4650_0_comp_nf; -extern compop_func op_4658_0_comp_nf; -extern compop_func op_4660_0_comp_nf; -extern compop_func op_4668_0_comp_nf; -extern compop_func op_4670_0_comp_nf; -extern compop_func op_4678_0_comp_nf; -extern compop_func op_4679_0_comp_nf; -extern compop_func op_4680_0_comp_nf; -extern compop_func op_4690_0_comp_nf; -extern compop_func op_4698_0_comp_nf; -extern compop_func op_46a0_0_comp_nf; -extern compop_func op_46a8_0_comp_nf; -extern compop_func op_46b0_0_comp_nf; -extern compop_func op_46b8_0_comp_nf; -extern compop_func op_46b9_0_comp_nf; -extern compop_func op_4808_0_comp_nf; -extern compop_func op_4840_0_comp_nf; -extern compop_func op_4850_0_comp_nf; -extern compop_func op_4868_0_comp_nf; -extern compop_func op_4870_0_comp_nf; -extern compop_func op_4878_0_comp_nf; -extern compop_func op_4879_0_comp_nf; -extern compop_func op_487a_0_comp_nf; -extern compop_func op_487b_0_comp_nf; -extern compop_func op_4880_0_comp_nf; -extern compop_func op_4890_0_comp_nf; -extern compop_func op_48a0_0_comp_nf; -extern compop_func op_48a8_0_comp_nf; -extern compop_func op_48b0_0_comp_nf; -extern compop_func op_48b8_0_comp_nf; -extern compop_func op_48b9_0_comp_nf; -extern compop_func op_48c0_0_comp_nf; -extern compop_func op_48d0_0_comp_nf; -extern compop_func op_48e0_0_comp_nf; -extern compop_func op_48e8_0_comp_nf; -extern compop_func op_48f0_0_comp_nf; -extern compop_func op_48f8_0_comp_nf; -extern compop_func op_48f9_0_comp_nf; -extern compop_func op_49c0_0_comp_nf; -extern compop_func op_4a00_0_comp_nf; -extern compop_func op_4a10_0_comp_nf; -extern compop_func op_4a18_0_comp_nf; -extern compop_func op_4a20_0_comp_nf; -extern compop_func op_4a28_0_comp_nf; -extern compop_func op_4a30_0_comp_nf; -extern compop_func op_4a38_0_comp_nf; -extern compop_func op_4a39_0_comp_nf; -extern compop_func op_4a3a_0_comp_nf; -extern compop_func op_4a3b_0_comp_nf; -extern compop_func op_4a3c_0_comp_nf; -extern compop_func op_4a40_0_comp_nf; -extern compop_func op_4a48_0_comp_nf; -extern compop_func op_4a50_0_comp_nf; -extern compop_func op_4a58_0_comp_nf; -extern compop_func op_4a60_0_comp_nf; -extern compop_func op_4a68_0_comp_nf; -extern compop_func op_4a70_0_comp_nf; -extern compop_func op_4a78_0_comp_nf; -extern compop_func op_4a79_0_comp_nf; -extern compop_func op_4a7a_0_comp_nf; -extern compop_func op_4a7b_0_comp_nf; -extern compop_func op_4a7c_0_comp_nf; -extern compop_func op_4a80_0_comp_nf; -extern compop_func op_4a88_0_comp_nf; -extern compop_func op_4a90_0_comp_nf; -extern compop_func op_4a98_0_comp_nf; -extern compop_func op_4aa0_0_comp_nf; -extern compop_func op_4aa8_0_comp_nf; -extern compop_func op_4ab0_0_comp_nf; -extern compop_func op_4ab8_0_comp_nf; -extern compop_func op_4ab9_0_comp_nf; -extern compop_func op_4aba_0_comp_nf; -extern compop_func op_4abb_0_comp_nf; -extern compop_func op_4abc_0_comp_nf; -extern compop_func op_4c00_0_comp_nf; -extern compop_func op_4c10_0_comp_nf; -extern compop_func op_4c18_0_comp_nf; -extern compop_func op_4c20_0_comp_nf; -extern compop_func op_4c28_0_comp_nf; -extern compop_func op_4c30_0_comp_nf; -extern compop_func op_4c38_0_comp_nf; -extern compop_func op_4c39_0_comp_nf; -extern compop_func op_4c3a_0_comp_nf; -extern compop_func op_4c3b_0_comp_nf; -extern compop_func op_4c3c_0_comp_nf; -extern compop_func op_4c90_0_comp_nf; -extern compop_func op_4c98_0_comp_nf; -extern compop_func op_4ca8_0_comp_nf; -extern compop_func op_4cb0_0_comp_nf; -extern compop_func op_4cb8_0_comp_nf; -extern compop_func op_4cb9_0_comp_nf; -extern compop_func op_4cba_0_comp_nf; -extern compop_func op_4cbb_0_comp_nf; -extern compop_func op_4cd0_0_comp_nf; -extern compop_func op_4cd8_0_comp_nf; -extern compop_func op_4ce8_0_comp_nf; -extern compop_func op_4cf0_0_comp_nf; -extern compop_func op_4cf8_0_comp_nf; -extern compop_func op_4cf9_0_comp_nf; -extern compop_func op_4cfa_0_comp_nf; -extern compop_func op_4cfb_0_comp_nf; -extern compop_func op_4e50_0_comp_nf; -extern compop_func op_4e58_0_comp_nf; -extern compop_func op_4e71_0_comp_nf; -extern compop_func op_4e74_0_comp_nf; -extern compop_func op_4e75_0_comp_nf; -extern compop_func op_4e90_0_comp_nf; -extern compop_func op_4ea8_0_comp_nf; -extern compop_func op_4eb0_0_comp_nf; -extern compop_func op_4eb8_0_comp_nf; -extern compop_func op_4eb9_0_comp_nf; -extern compop_func op_4eba_0_comp_nf; -extern compop_func op_4ebb_0_comp_nf; -extern compop_func op_4ed0_0_comp_nf; -extern compop_func op_4ee8_0_comp_nf; -extern compop_func op_4ef0_0_comp_nf; -extern compop_func op_4ef8_0_comp_nf; -extern compop_func op_4ef9_0_comp_nf; -extern compop_func op_4efa_0_comp_nf; -extern compop_func op_4efb_0_comp_nf; -extern compop_func op_5000_0_comp_nf; -extern compop_func op_5010_0_comp_nf; -extern compop_func op_5018_0_comp_nf; -extern compop_func op_5020_0_comp_nf; -extern compop_func op_5028_0_comp_nf; -extern compop_func op_5030_0_comp_nf; -extern compop_func op_5038_0_comp_nf; -extern compop_func op_5039_0_comp_nf; -extern compop_func op_5040_0_comp_nf; -extern compop_func op_5048_0_comp_nf; -extern compop_func op_5050_0_comp_nf; -extern compop_func op_5058_0_comp_nf; -extern compop_func op_5060_0_comp_nf; -extern compop_func op_5068_0_comp_nf; -extern compop_func op_5070_0_comp_nf; -extern compop_func op_5078_0_comp_nf; -extern compop_func op_5079_0_comp_nf; -extern compop_func op_5080_0_comp_nf; -extern compop_func op_5088_0_comp_nf; -extern compop_func op_5090_0_comp_nf; -extern compop_func op_5098_0_comp_nf; -extern compop_func op_50a0_0_comp_nf; -extern compop_func op_50a8_0_comp_nf; -extern compop_func op_50b0_0_comp_nf; -extern compop_func op_50b8_0_comp_nf; -extern compop_func op_50b9_0_comp_nf; -extern compop_func op_50c0_0_comp_nf; -extern compop_func op_50c8_0_comp_nf; -extern compop_func op_50d0_0_comp_nf; -extern compop_func op_50d8_0_comp_nf; -extern compop_func op_50e0_0_comp_nf; -extern compop_func op_50e8_0_comp_nf; -extern compop_func op_50f0_0_comp_nf; -extern compop_func op_50f8_0_comp_nf; -extern compop_func op_50f9_0_comp_nf; -extern compop_func op_5100_0_comp_nf; -extern compop_func op_5110_0_comp_nf; -extern compop_func op_5118_0_comp_nf; -extern compop_func op_5120_0_comp_nf; -extern compop_func op_5128_0_comp_nf; -extern compop_func op_5130_0_comp_nf; -extern compop_func op_5138_0_comp_nf; -extern compop_func op_5139_0_comp_nf; -extern compop_func op_5140_0_comp_nf; -extern compop_func op_5148_0_comp_nf; -extern compop_func op_5150_0_comp_nf; -extern compop_func op_5158_0_comp_nf; -extern compop_func op_5160_0_comp_nf; -extern compop_func op_5168_0_comp_nf; -extern compop_func op_5170_0_comp_nf; -extern compop_func op_5178_0_comp_nf; -extern compop_func op_5179_0_comp_nf; -extern compop_func op_5180_0_comp_nf; -extern compop_func op_5188_0_comp_nf; -extern compop_func op_5190_0_comp_nf; -extern compop_func op_5198_0_comp_nf; -extern compop_func op_51a0_0_comp_nf; -extern compop_func op_51a8_0_comp_nf; -extern compop_func op_51b0_0_comp_nf; -extern compop_func op_51b8_0_comp_nf; -extern compop_func op_51b9_0_comp_nf; -extern compop_func op_51c0_0_comp_nf; -extern compop_func op_51c8_0_comp_nf; -extern compop_func op_51d0_0_comp_nf; -extern compop_func op_51d8_0_comp_nf; -extern compop_func op_51e0_0_comp_nf; -extern compop_func op_51e8_0_comp_nf; -extern compop_func op_51f0_0_comp_nf; -extern compop_func op_51f8_0_comp_nf; -extern compop_func op_51f9_0_comp_nf; -extern compop_func op_52c0_0_comp_nf; -extern compop_func op_52c8_0_comp_nf; -extern compop_func op_52d0_0_comp_nf; -extern compop_func op_52d8_0_comp_nf; -extern compop_func op_52e0_0_comp_nf; -extern compop_func op_52e8_0_comp_nf; -extern compop_func op_52f0_0_comp_nf; -extern compop_func op_52f8_0_comp_nf; -extern compop_func op_52f9_0_comp_nf; -extern compop_func op_53c0_0_comp_nf; -extern compop_func op_53c8_0_comp_nf; -extern compop_func op_53d0_0_comp_nf; -extern compop_func op_53d8_0_comp_nf; -extern compop_func op_53e0_0_comp_nf; -extern compop_func op_53e8_0_comp_nf; -extern compop_func op_53f0_0_comp_nf; -extern compop_func op_53f8_0_comp_nf; -extern compop_func op_53f9_0_comp_nf; -extern compop_func op_54c0_0_comp_nf; -extern compop_func op_54c8_0_comp_nf; -extern compop_func op_54d0_0_comp_nf; -extern compop_func op_54d8_0_comp_nf; -extern compop_func op_54e0_0_comp_nf; -extern compop_func op_54e8_0_comp_nf; -extern compop_func op_54f0_0_comp_nf; -extern compop_func op_54f8_0_comp_nf; -extern compop_func op_54f9_0_comp_nf; -extern compop_func op_55c0_0_comp_nf; -extern compop_func op_55c8_0_comp_nf; -extern compop_func op_55d0_0_comp_nf; -extern compop_func op_55d8_0_comp_nf; -extern compop_func op_55e0_0_comp_nf; -extern compop_func op_55e8_0_comp_nf; -extern compop_func op_55f0_0_comp_nf; -extern compop_func op_55f8_0_comp_nf; -extern compop_func op_55f9_0_comp_nf; -extern compop_func op_56c0_0_comp_nf; -extern compop_func op_56c8_0_comp_nf; -extern compop_func op_56d0_0_comp_nf; -extern compop_func op_56d8_0_comp_nf; -extern compop_func op_56e0_0_comp_nf; -extern compop_func op_56e8_0_comp_nf; -extern compop_func op_56f0_0_comp_nf; -extern compop_func op_56f8_0_comp_nf; -extern compop_func op_56f9_0_comp_nf; -extern compop_func op_57c0_0_comp_nf; -extern compop_func op_57c8_0_comp_nf; -extern compop_func op_57d0_0_comp_nf; -extern compop_func op_57d8_0_comp_nf; -extern compop_func op_57e0_0_comp_nf; -extern compop_func op_57e8_0_comp_nf; -extern compop_func op_57f0_0_comp_nf; -extern compop_func op_57f8_0_comp_nf; -extern compop_func op_57f9_0_comp_nf; -extern compop_func op_5ac0_0_comp_nf; -extern compop_func op_5ac8_0_comp_nf; -extern compop_func op_5ad0_0_comp_nf; -extern compop_func op_5ad8_0_comp_nf; -extern compop_func op_5ae0_0_comp_nf; -extern compop_func op_5ae8_0_comp_nf; -extern compop_func op_5af0_0_comp_nf; -extern compop_func op_5af8_0_comp_nf; -extern compop_func op_5af9_0_comp_nf; -extern compop_func op_5bc0_0_comp_nf; -extern compop_func op_5bc8_0_comp_nf; -extern compop_func op_5bd0_0_comp_nf; -extern compop_func op_5bd8_0_comp_nf; -extern compop_func op_5be0_0_comp_nf; -extern compop_func op_5be8_0_comp_nf; -extern compop_func op_5bf0_0_comp_nf; -extern compop_func op_5bf8_0_comp_nf; -extern compop_func op_5bf9_0_comp_nf; -extern compop_func op_5cc0_0_comp_nf; -extern compop_func op_5cc8_0_comp_nf; -extern compop_func op_5cd0_0_comp_nf; -extern compop_func op_5cd8_0_comp_nf; -extern compop_func op_5ce0_0_comp_nf; -extern compop_func op_5ce8_0_comp_nf; -extern compop_func op_5cf0_0_comp_nf; -extern compop_func op_5cf8_0_comp_nf; -extern compop_func op_5cf9_0_comp_nf; -extern compop_func op_5dc0_0_comp_nf; -extern compop_func op_5dc8_0_comp_nf; -extern compop_func op_5dd0_0_comp_nf; -extern compop_func op_5dd8_0_comp_nf; -extern compop_func op_5de0_0_comp_nf; -extern compop_func op_5de8_0_comp_nf; -extern compop_func op_5df0_0_comp_nf; -extern compop_func op_5df8_0_comp_nf; -extern compop_func op_5df9_0_comp_nf; -extern compop_func op_5ec0_0_comp_nf; -extern compop_func op_5ec8_0_comp_nf; -extern compop_func op_5ed0_0_comp_nf; -extern compop_func op_5ed8_0_comp_nf; -extern compop_func op_5ee0_0_comp_nf; -extern compop_func op_5ee8_0_comp_nf; -extern compop_func op_5ef0_0_comp_nf; -extern compop_func op_5ef8_0_comp_nf; -extern compop_func op_5ef9_0_comp_nf; -extern compop_func op_5fc0_0_comp_nf; -extern compop_func op_5fc8_0_comp_nf; -extern compop_func op_5fd0_0_comp_nf; -extern compop_func op_5fd8_0_comp_nf; -extern compop_func op_5fe0_0_comp_nf; -extern compop_func op_5fe8_0_comp_nf; -extern compop_func op_5ff0_0_comp_nf; -extern compop_func op_5ff8_0_comp_nf; -extern compop_func op_5ff9_0_comp_nf; -extern compop_func op_6000_0_comp_nf; -extern compop_func op_6001_0_comp_nf; -extern compop_func op_60ff_0_comp_nf; -extern compop_func op_6100_0_comp_nf; -extern compop_func op_6101_0_comp_nf; -extern compop_func op_61ff_0_comp_nf; -extern compop_func op_6200_0_comp_nf; -extern compop_func op_6201_0_comp_nf; -extern compop_func op_62ff_0_comp_nf; -extern compop_func op_6300_0_comp_nf; -extern compop_func op_6301_0_comp_nf; -extern compop_func op_63ff_0_comp_nf; -extern compop_func op_6400_0_comp_nf; -extern compop_func op_6401_0_comp_nf; -extern compop_func op_64ff_0_comp_nf; -extern compop_func op_6500_0_comp_nf; -extern compop_func op_6501_0_comp_nf; -extern compop_func op_65ff_0_comp_nf; -extern compop_func op_6600_0_comp_nf; -extern compop_func op_6601_0_comp_nf; -extern compop_func op_66ff_0_comp_nf; -extern compop_func op_6700_0_comp_nf; -extern compop_func op_6701_0_comp_nf; -extern compop_func op_67ff_0_comp_nf; -extern compop_func op_6a00_0_comp_nf; -extern compop_func op_6a01_0_comp_nf; -extern compop_func op_6aff_0_comp_nf; -extern compop_func op_6b00_0_comp_nf; -extern compop_func op_6b01_0_comp_nf; -extern compop_func op_6bff_0_comp_nf; -extern compop_func op_6c00_0_comp_nf; -extern compop_func op_6c01_0_comp_nf; -extern compop_func op_6cff_0_comp_nf; -extern compop_func op_6d00_0_comp_nf; -extern compop_func op_6d01_0_comp_nf; -extern compop_func op_6dff_0_comp_nf; -extern compop_func op_6e00_0_comp_nf; -extern compop_func op_6e01_0_comp_nf; -extern compop_func op_6eff_0_comp_nf; -extern compop_func op_6f00_0_comp_nf; -extern compop_func op_6f01_0_comp_nf; -extern compop_func op_6fff_0_comp_nf; -extern compop_func op_7000_0_comp_nf; -extern compop_func op_8000_0_comp_nf; -extern compop_func op_8010_0_comp_nf; -extern compop_func op_8018_0_comp_nf; -extern compop_func op_8020_0_comp_nf; -extern compop_func op_8028_0_comp_nf; -extern compop_func op_8030_0_comp_nf; -extern compop_func op_8038_0_comp_nf; -extern compop_func op_8039_0_comp_nf; -extern compop_func op_803a_0_comp_nf; -extern compop_func op_803b_0_comp_nf; -extern compop_func op_803c_0_comp_nf; -extern compop_func op_8040_0_comp_nf; -extern compop_func op_8050_0_comp_nf; -extern compop_func op_8058_0_comp_nf; -extern compop_func op_8060_0_comp_nf; -extern compop_func op_8068_0_comp_nf; -extern compop_func op_8070_0_comp_nf; -extern compop_func op_8078_0_comp_nf; -extern compop_func op_8079_0_comp_nf; -extern compop_func op_807a_0_comp_nf; -extern compop_func op_807b_0_comp_nf; -extern compop_func op_807c_0_comp_nf; -extern compop_func op_8080_0_comp_nf; -extern compop_func op_8090_0_comp_nf; -extern compop_func op_8098_0_comp_nf; -extern compop_func op_80a0_0_comp_nf; -extern compop_func op_80a8_0_comp_nf; -extern compop_func op_80b0_0_comp_nf; -extern compop_func op_80b8_0_comp_nf; -extern compop_func op_80b9_0_comp_nf; -extern compop_func op_80ba_0_comp_nf; -extern compop_func op_80bb_0_comp_nf; -extern compop_func op_80bc_0_comp_nf; -extern compop_func op_8110_0_comp_nf; -extern compop_func op_8118_0_comp_nf; -extern compop_func op_8120_0_comp_nf; -extern compop_func op_8128_0_comp_nf; -extern compop_func op_8130_0_comp_nf; -extern compop_func op_8138_0_comp_nf; -extern compop_func op_8139_0_comp_nf; -extern compop_func op_8150_0_comp_nf; -extern compop_func op_8158_0_comp_nf; -extern compop_func op_8160_0_comp_nf; -extern compop_func op_8168_0_comp_nf; -extern compop_func op_8170_0_comp_nf; -extern compop_func op_8178_0_comp_nf; -extern compop_func op_8179_0_comp_nf; -extern compop_func op_8190_0_comp_nf; -extern compop_func op_8198_0_comp_nf; -extern compop_func op_81a0_0_comp_nf; -extern compop_func op_81a8_0_comp_nf; -extern compop_func op_81b0_0_comp_nf; -extern compop_func op_81b8_0_comp_nf; -extern compop_func op_81b9_0_comp_nf; -extern compop_func op_9000_0_comp_nf; -extern compop_func op_9010_0_comp_nf; -extern compop_func op_9018_0_comp_nf; -extern compop_func op_9020_0_comp_nf; -extern compop_func op_9028_0_comp_nf; -extern compop_func op_9030_0_comp_nf; -extern compop_func op_9038_0_comp_nf; -extern compop_func op_9039_0_comp_nf; -extern compop_func op_903a_0_comp_nf; -extern compop_func op_903b_0_comp_nf; -extern compop_func op_903c_0_comp_nf; -extern compop_func op_9040_0_comp_nf; -extern compop_func op_9048_0_comp_nf; -extern compop_func op_9050_0_comp_nf; -extern compop_func op_9058_0_comp_nf; -extern compop_func op_9060_0_comp_nf; -extern compop_func op_9068_0_comp_nf; -extern compop_func op_9070_0_comp_nf; -extern compop_func op_9078_0_comp_nf; -extern compop_func op_9079_0_comp_nf; -extern compop_func op_907a_0_comp_nf; -extern compop_func op_907b_0_comp_nf; -extern compop_func op_907c_0_comp_nf; -extern compop_func op_9080_0_comp_nf; -extern compop_func op_9088_0_comp_nf; -extern compop_func op_9090_0_comp_nf; -extern compop_func op_9098_0_comp_nf; -extern compop_func op_90a0_0_comp_nf; -extern compop_func op_90a8_0_comp_nf; -extern compop_func op_90b0_0_comp_nf; -extern compop_func op_90b8_0_comp_nf; -extern compop_func op_90b9_0_comp_nf; -extern compop_func op_90ba_0_comp_nf; -extern compop_func op_90bb_0_comp_nf; -extern compop_func op_90bc_0_comp_nf; -extern compop_func op_90c0_0_comp_nf; -extern compop_func op_90c8_0_comp_nf; -extern compop_func op_90d0_0_comp_nf; -extern compop_func op_90d8_0_comp_nf; -extern compop_func op_90e0_0_comp_nf; -extern compop_func op_90e8_0_comp_nf; -extern compop_func op_90f0_0_comp_nf; -extern compop_func op_90f8_0_comp_nf; -extern compop_func op_90f9_0_comp_nf; -extern compop_func op_90fa_0_comp_nf; -extern compop_func op_90fb_0_comp_nf; -extern compop_func op_90fc_0_comp_nf; -extern compop_func op_9100_0_comp_nf; -extern compop_func op_9108_0_comp_nf; -extern compop_func op_9110_0_comp_nf; -extern compop_func op_9118_0_comp_nf; -extern compop_func op_9120_0_comp_nf; -extern compop_func op_9128_0_comp_nf; -extern compop_func op_9130_0_comp_nf; -extern compop_func op_9138_0_comp_nf; -extern compop_func op_9139_0_comp_nf; -extern compop_func op_9140_0_comp_nf; -extern compop_func op_9148_0_comp_nf; -extern compop_func op_9150_0_comp_nf; -extern compop_func op_9158_0_comp_nf; -extern compop_func op_9160_0_comp_nf; -extern compop_func op_9168_0_comp_nf; -extern compop_func op_9170_0_comp_nf; -extern compop_func op_9178_0_comp_nf; -extern compop_func op_9179_0_comp_nf; -extern compop_func op_9180_0_comp_nf; -extern compop_func op_9188_0_comp_nf; -extern compop_func op_9190_0_comp_nf; -extern compop_func op_9198_0_comp_nf; -extern compop_func op_91a0_0_comp_nf; -extern compop_func op_91a8_0_comp_nf; -extern compop_func op_91b0_0_comp_nf; -extern compop_func op_91b8_0_comp_nf; -extern compop_func op_91b9_0_comp_nf; -extern compop_func op_91c0_0_comp_nf; -extern compop_func op_91c8_0_comp_nf; -extern compop_func op_91d0_0_comp_nf; -extern compop_func op_91d8_0_comp_nf; -extern compop_func op_91e0_0_comp_nf; -extern compop_func op_91e8_0_comp_nf; -extern compop_func op_91f0_0_comp_nf; -extern compop_func op_91f8_0_comp_nf; -extern compop_func op_91f9_0_comp_nf; -extern compop_func op_91fa_0_comp_nf; -extern compop_func op_91fb_0_comp_nf; -extern compop_func op_91fc_0_comp_nf; -extern compop_func op_b000_0_comp_nf; -extern compop_func op_b010_0_comp_nf; -extern compop_func op_b018_0_comp_nf; -extern compop_func op_b020_0_comp_nf; -extern compop_func op_b028_0_comp_nf; -extern compop_func op_b030_0_comp_nf; -extern compop_func op_b038_0_comp_nf; -extern compop_func op_b039_0_comp_nf; -extern compop_func op_b03a_0_comp_nf; -extern compop_func op_b03b_0_comp_nf; -extern compop_func op_b03c_0_comp_nf; -extern compop_func op_b040_0_comp_nf; -extern compop_func op_b048_0_comp_nf; -extern compop_func op_b050_0_comp_nf; -extern compop_func op_b058_0_comp_nf; -extern compop_func op_b060_0_comp_nf; -extern compop_func op_b068_0_comp_nf; -extern compop_func op_b070_0_comp_nf; -extern compop_func op_b078_0_comp_nf; -extern compop_func op_b079_0_comp_nf; -extern compop_func op_b07a_0_comp_nf; -extern compop_func op_b07b_0_comp_nf; -extern compop_func op_b07c_0_comp_nf; -extern compop_func op_b080_0_comp_nf; -extern compop_func op_b088_0_comp_nf; -extern compop_func op_b090_0_comp_nf; -extern compop_func op_b098_0_comp_nf; -extern compop_func op_b0a0_0_comp_nf; -extern compop_func op_b0a8_0_comp_nf; -extern compop_func op_b0b0_0_comp_nf; -extern compop_func op_b0b8_0_comp_nf; -extern compop_func op_b0b9_0_comp_nf; -extern compop_func op_b0ba_0_comp_nf; -extern compop_func op_b0bb_0_comp_nf; -extern compop_func op_b0bc_0_comp_nf; -extern compop_func op_b0c0_0_comp_nf; -extern compop_func op_b0c8_0_comp_nf; -extern compop_func op_b0d0_0_comp_nf; -extern compop_func op_b0d8_0_comp_nf; -extern compop_func op_b0e0_0_comp_nf; -extern compop_func op_b0e8_0_comp_nf; -extern compop_func op_b0f0_0_comp_nf; -extern compop_func op_b0f8_0_comp_nf; -extern compop_func op_b0f9_0_comp_nf; -extern compop_func op_b0fa_0_comp_nf; -extern compop_func op_b0fb_0_comp_nf; -extern compop_func op_b0fc_0_comp_nf; -extern compop_func op_b100_0_comp_nf; -extern compop_func op_b108_0_comp_nf; -extern compop_func op_b110_0_comp_nf; -extern compop_func op_b118_0_comp_nf; -extern compop_func op_b120_0_comp_nf; -extern compop_func op_b128_0_comp_nf; -extern compop_func op_b130_0_comp_nf; -extern compop_func op_b138_0_comp_nf; -extern compop_func op_b139_0_comp_nf; -extern compop_func op_b140_0_comp_nf; -extern compop_func op_b148_0_comp_nf; -extern compop_func op_b150_0_comp_nf; -extern compop_func op_b158_0_comp_nf; -extern compop_func op_b160_0_comp_nf; -extern compop_func op_b168_0_comp_nf; -extern compop_func op_b170_0_comp_nf; -extern compop_func op_b178_0_comp_nf; -extern compop_func op_b179_0_comp_nf; -extern compop_func op_b180_0_comp_nf; -extern compop_func op_b188_0_comp_nf; -extern compop_func op_b190_0_comp_nf; -extern compop_func op_b198_0_comp_nf; -extern compop_func op_b1a0_0_comp_nf; -extern compop_func op_b1a8_0_comp_nf; -extern compop_func op_b1b0_0_comp_nf; -extern compop_func op_b1b8_0_comp_nf; -extern compop_func op_b1b9_0_comp_nf; -extern compop_func op_b1c0_0_comp_nf; -extern compop_func op_b1c8_0_comp_nf; -extern compop_func op_b1d0_0_comp_nf; -extern compop_func op_b1d8_0_comp_nf; -extern compop_func op_b1e0_0_comp_nf; -extern compop_func op_b1e8_0_comp_nf; -extern compop_func op_b1f0_0_comp_nf; -extern compop_func op_b1f8_0_comp_nf; -extern compop_func op_b1f9_0_comp_nf; -extern compop_func op_b1fa_0_comp_nf; -extern compop_func op_b1fb_0_comp_nf; -extern compop_func op_b1fc_0_comp_nf; -extern compop_func op_c000_0_comp_nf; -extern compop_func op_c010_0_comp_nf; -extern compop_func op_c018_0_comp_nf; -extern compop_func op_c020_0_comp_nf; -extern compop_func op_c028_0_comp_nf; -extern compop_func op_c030_0_comp_nf; -extern compop_func op_c038_0_comp_nf; -extern compop_func op_c039_0_comp_nf; -extern compop_func op_c03a_0_comp_nf; -extern compop_func op_c03b_0_comp_nf; -extern compop_func op_c03c_0_comp_nf; -extern compop_func op_c040_0_comp_nf; -extern compop_func op_c050_0_comp_nf; -extern compop_func op_c058_0_comp_nf; -extern compop_func op_c060_0_comp_nf; -extern compop_func op_c068_0_comp_nf; -extern compop_func op_c070_0_comp_nf; -extern compop_func op_c078_0_comp_nf; -extern compop_func op_c079_0_comp_nf; -extern compop_func op_c07a_0_comp_nf; -extern compop_func op_c07b_0_comp_nf; -extern compop_func op_c07c_0_comp_nf; -extern compop_func op_c080_0_comp_nf; -extern compop_func op_c090_0_comp_nf; -extern compop_func op_c098_0_comp_nf; -extern compop_func op_c0a0_0_comp_nf; -extern compop_func op_c0a8_0_comp_nf; -extern compop_func op_c0b0_0_comp_nf; -extern compop_func op_c0b8_0_comp_nf; -extern compop_func op_c0b9_0_comp_nf; -extern compop_func op_c0ba_0_comp_nf; -extern compop_func op_c0bb_0_comp_nf; -extern compop_func op_c0bc_0_comp_nf; -extern compop_func op_c0c0_0_comp_nf; -extern compop_func op_c0d0_0_comp_nf; -extern compop_func op_c0d8_0_comp_nf; -extern compop_func op_c0e0_0_comp_nf; -extern compop_func op_c0e8_0_comp_nf; -extern compop_func op_c0f0_0_comp_nf; -extern compop_func op_c0f8_0_comp_nf; -extern compop_func op_c0f9_0_comp_nf; -extern compop_func op_c0fa_0_comp_nf; -extern compop_func op_c0fb_0_comp_nf; -extern compop_func op_c0fc_0_comp_nf; -extern compop_func op_c110_0_comp_nf; -extern compop_func op_c118_0_comp_nf; -extern compop_func op_c120_0_comp_nf; -extern compop_func op_c128_0_comp_nf; -extern compop_func op_c130_0_comp_nf; -extern compop_func op_c138_0_comp_nf; -extern compop_func op_c139_0_comp_nf; -extern compop_func op_c140_0_comp_nf; -extern compop_func op_c148_0_comp_nf; -extern compop_func op_c150_0_comp_nf; -extern compop_func op_c158_0_comp_nf; -extern compop_func op_c160_0_comp_nf; -extern compop_func op_c168_0_comp_nf; -extern compop_func op_c170_0_comp_nf; -extern compop_func op_c178_0_comp_nf; -extern compop_func op_c179_0_comp_nf; -extern compop_func op_c188_0_comp_nf; -extern compop_func op_c190_0_comp_nf; -extern compop_func op_c198_0_comp_nf; -extern compop_func op_c1a0_0_comp_nf; -extern compop_func op_c1a8_0_comp_nf; -extern compop_func op_c1b0_0_comp_nf; -extern compop_func op_c1b8_0_comp_nf; -extern compop_func op_c1b9_0_comp_nf; -extern compop_func op_c1c0_0_comp_nf; -extern compop_func op_c1d0_0_comp_nf; -extern compop_func op_c1d8_0_comp_nf; -extern compop_func op_c1e0_0_comp_nf; -extern compop_func op_c1e8_0_comp_nf; -extern compop_func op_c1f0_0_comp_nf; -extern compop_func op_c1f8_0_comp_nf; -extern compop_func op_c1f9_0_comp_nf; -extern compop_func op_c1fa_0_comp_nf; -extern compop_func op_c1fb_0_comp_nf; -extern compop_func op_c1fc_0_comp_nf; -extern compop_func op_d000_0_comp_nf; -extern compop_func op_d010_0_comp_nf; -extern compop_func op_d018_0_comp_nf; -extern compop_func op_d020_0_comp_nf; -extern compop_func op_d028_0_comp_nf; -extern compop_func op_d030_0_comp_nf; -extern compop_func op_d038_0_comp_nf; -extern compop_func op_d039_0_comp_nf; -extern compop_func op_d03a_0_comp_nf; -extern compop_func op_d03b_0_comp_nf; -extern compop_func op_d03c_0_comp_nf; -extern compop_func op_d040_0_comp_nf; -extern compop_func op_d048_0_comp_nf; -extern compop_func op_d050_0_comp_nf; -extern compop_func op_d058_0_comp_nf; -extern compop_func op_d060_0_comp_nf; -extern compop_func op_d068_0_comp_nf; -extern compop_func op_d070_0_comp_nf; -extern compop_func op_d078_0_comp_nf; -extern compop_func op_d079_0_comp_nf; -extern compop_func op_d07a_0_comp_nf; -extern compop_func op_d07b_0_comp_nf; -extern compop_func op_d07c_0_comp_nf; -extern compop_func op_d080_0_comp_nf; -extern compop_func op_d088_0_comp_nf; -extern compop_func op_d090_0_comp_nf; -extern compop_func op_d098_0_comp_nf; -extern compop_func op_d0a0_0_comp_nf; -extern compop_func op_d0a8_0_comp_nf; -extern compop_func op_d0b0_0_comp_nf; -extern compop_func op_d0b8_0_comp_nf; -extern compop_func op_d0b9_0_comp_nf; -extern compop_func op_d0ba_0_comp_nf; -extern compop_func op_d0bb_0_comp_nf; -extern compop_func op_d0bc_0_comp_nf; -extern compop_func op_d0c0_0_comp_nf; -extern compop_func op_d0c8_0_comp_nf; -extern compop_func op_d0d0_0_comp_nf; -extern compop_func op_d0d8_0_comp_nf; -extern compop_func op_d0e0_0_comp_nf; -extern compop_func op_d0e8_0_comp_nf; -extern compop_func op_d0f0_0_comp_nf; -extern compop_func op_d0f8_0_comp_nf; -extern compop_func op_d0f9_0_comp_nf; -extern compop_func op_d0fa_0_comp_nf; -extern compop_func op_d0fb_0_comp_nf; -extern compop_func op_d0fc_0_comp_nf; -extern compop_func op_d100_0_comp_nf; -extern compop_func op_d108_0_comp_nf; -extern compop_func op_d110_0_comp_nf; -extern compop_func op_d118_0_comp_nf; -extern compop_func op_d120_0_comp_nf; -extern compop_func op_d128_0_comp_nf; -extern compop_func op_d130_0_comp_nf; -extern compop_func op_d138_0_comp_nf; -extern compop_func op_d139_0_comp_nf; -extern compop_func op_d140_0_comp_nf; -extern compop_func op_d148_0_comp_nf; -extern compop_func op_d150_0_comp_nf; -extern compop_func op_d158_0_comp_nf; -extern compop_func op_d160_0_comp_nf; -extern compop_func op_d168_0_comp_nf; -extern compop_func op_d170_0_comp_nf; -extern compop_func op_d178_0_comp_nf; -extern compop_func op_d179_0_comp_nf; -extern compop_func op_d180_0_comp_nf; -extern compop_func op_d188_0_comp_nf; -extern compop_func op_d190_0_comp_nf; -extern compop_func op_d198_0_comp_nf; -extern compop_func op_d1a0_0_comp_nf; -extern compop_func op_d1a8_0_comp_nf; -extern compop_func op_d1b0_0_comp_nf; -extern compop_func op_d1b8_0_comp_nf; -extern compop_func op_d1b9_0_comp_nf; -extern compop_func op_d1c0_0_comp_nf; -extern compop_func op_d1c8_0_comp_nf; -extern compop_func op_d1d0_0_comp_nf; -extern compop_func op_d1d8_0_comp_nf; -extern compop_func op_d1e0_0_comp_nf; -extern compop_func op_d1e8_0_comp_nf; -extern compop_func op_d1f0_0_comp_nf; -extern compop_func op_d1f8_0_comp_nf; -extern compop_func op_d1f9_0_comp_nf; -extern compop_func op_d1fa_0_comp_nf; -extern compop_func op_d1fb_0_comp_nf; -extern compop_func op_d1fc_0_comp_nf; -extern compop_func op_e000_0_comp_nf; -extern compop_func op_e008_0_comp_nf; -extern compop_func op_e018_0_comp_nf; -extern compop_func op_e020_0_comp_nf; -extern compop_func op_e028_0_comp_nf; -extern compop_func op_e038_0_comp_nf; -extern compop_func op_e040_0_comp_nf; -extern compop_func op_e048_0_comp_nf; -extern compop_func op_e058_0_comp_nf; -extern compop_func op_e060_0_comp_nf; -extern compop_func op_e068_0_comp_nf; -extern compop_func op_e078_0_comp_nf; -extern compop_func op_e080_0_comp_nf; -extern compop_func op_e088_0_comp_nf; -extern compop_func op_e098_0_comp_nf; -extern compop_func op_e0a0_0_comp_nf; -extern compop_func op_e0a8_0_comp_nf; -extern compop_func op_e0b8_0_comp_nf; -extern compop_func op_e100_0_comp_nf; -extern compop_func op_e108_0_comp_nf; -extern compop_func op_e118_0_comp_nf; -extern compop_func op_e120_0_comp_nf; -extern compop_func op_e128_0_comp_nf; -extern compop_func op_e138_0_comp_nf; -extern compop_func op_e140_0_comp_nf; -extern compop_func op_e148_0_comp_nf; -extern compop_func op_e158_0_comp_nf; -extern compop_func op_e160_0_comp_nf; -extern compop_func op_e168_0_comp_nf; -extern compop_func op_e178_0_comp_nf; -extern compop_func op_e180_0_comp_nf; -extern compop_func op_e188_0_comp_nf; -extern compop_func op_e198_0_comp_nf; -extern compop_func op_e1a0_0_comp_nf; -extern compop_func op_e1a8_0_comp_nf; -extern compop_func op_e1b8_0_comp_nf; -extern compop_func op_f200_0_comp_nf; -extern compop_func op_f208_0_comp_nf; -extern compop_func op_f210_0_comp_nf; -extern compop_func op_f218_0_comp_nf; -extern compop_func op_f220_0_comp_nf; -extern compop_func op_f228_0_comp_nf; -extern compop_func op_f230_0_comp_nf; -extern compop_func op_f238_0_comp_nf; -extern compop_func op_f239_0_comp_nf; -extern compop_func op_f23a_0_comp_nf; -extern compop_func op_f23b_0_comp_nf; -extern compop_func op_f23c_0_comp_nf; -extern compop_func op_f240_0_comp_nf; -extern compop_func op_f250_0_comp_nf; -extern compop_func op_f258_0_comp_nf; -extern compop_func op_f260_0_comp_nf; -extern compop_func op_f268_0_comp_nf; -extern compop_func op_f270_0_comp_nf; -extern compop_func op_f278_0_comp_nf; -extern compop_func op_f279_0_comp_nf; -extern compop_func op_f280_0_comp_nf; -extern compop_func op_f2c0_0_comp_nf; -extern compop_func op_f600_0_comp_nf; -extern compop_func op_f608_0_comp_nf; -extern compop_func op_f610_0_comp_nf; -extern compop_func op_f618_0_comp_nf; -extern compop_func op_f620_0_comp_nf; -#endif /* CPU_AARCH64 */ +#elif defined(CPU_i386) || defined(CPU_x86_64) || defined(__i386__) || \ + defined(__x86_64__) || defined(_M_IX86) || defined(_M_AMD64) +#include "x86/comptbl_x86.h" +#endif + +#endif /* WINUAE_JIT_COMPTBL_H */ diff --git a/jit/gencomp.cpp b/jit/gencomp.cpp index 7488bba7..9e0e9453 100644 --- a/jit/gencomp.cpp +++ b/jit/gencomp.cpp @@ -1,3674 +1 @@ -/* - * compiler/gencomp.c - MC680x0 compilation generator - * - * Based on work Copyright 1995, 1996 Bernd Schmidt - * Changes for UAE-JIT Copyright 2000 Bernd Meyer - * - * Adaptation for ARAnyM/ARM, copyright 2001-2014 - * Milan Jurik, Jens Heitmann - * - * Adaptation for Basilisk II and improvements, copyright 2000-2005 - * Gwenole Beauchesne - * - * Basilisk II (C) 1997-2005 Christian Bauer - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#define CC_FOR_BUILD 1 -#include "sysconfig.h" - -#include "sysdeps.h" -#include "readcpu.h" - -#undef NDEBUG -#include -#include -#include -#include -#include -#include -#undef abort - -#ifdef UAE - /* - #define DISABLE_I_OR_AND_EOR - #define DISABLE_I_SUB - #define DISABLE_I_SUBA - #define DISABLE_I_SUBX - #define DISABLE_I_ADD - #define DISABLE_I_ADDA - #define DISABLE_I_ADDX - #define DISABLE_I_NEG - #define DISABLE_I_NEGX - #define DISABLE_I_CLR - #define DISABLE_I_NOT - #define DISABLE_I_TST - #define DISABLE_I_BCHG_BCLR_BSET_BTST - #define DISABLE_I_CMPM_CMP - #define DISABLE_I_CMPA - #define DISABLE_I_MOVE - #define DISABLE_I_MOVEA - #define DISABLE_I_SWAP - #define DISABLE_I_EXG - #define DISABLE_I_EXT - #define DISABLE_I_MVMEL - #define DISABLE_I_MVMLE - #define DISABLE_I_RTD - #define DISABLE_I_LINK - #define DISABLE_I_UNLK - #define DISABLE_I_RTS - #define DISABLE_I_JSR - #define DISABLE_I_JMP - #define DISABLE_I_BSR - #define DISABLE_I_BCC - #define DISABLE_I_LEA - #define DISABLE_I_PEA - #define DISABLE_I_DBCC - #define DISABLE_I_SCC - #define DISABLE_I_MULU - #define DISABLE_I_MULS - #define DISABLE_I_ASR - #define DISABLE_I_ASL - #define DISABLE_I_LSR - #define DISABLE_I_LSL - #define DISABLE_I_ROL - #define DISABLE_I_ROR - #define DISABLE_I_MULL - #define DISABLE_I_FPP - #define DISABLE_I_FBCC - #define DISABLE_I_FSCC - #define DISABLE_I_MOVE16 - */ - -#endif /* UAE */ - -#ifdef UAE -#define JIT_PATH "jit/" -#ifdef FSUAE -#define GEN_PATH "gen/" -#else -#define GEN_PATH "jit/" -#endif -#define RETURN "return 0;" -#define RETTYPE "uae_u32" -#define NEXT_CPU_LEVEL 5 -#else -#define JIT_PATH "compiler/" -#define GEN_PATH "" -#define RETURN "return;" -#define RETTYPE "void" -#define NEXT_CPU_LEVEL 4 -#endif - -#define BOOL_TYPE "int" -#define failure global_failure=1 -#define FAILURE global_failure=1 -#define isjump global_isjump=1 -#define is_const_jump global_iscjump=1 -#define isaddx global_isaddx=1 -#define uses_cmov global_cmov=1 -#define mayfail global_mayfail=1 -#define uses_fpu global_fpu=1 - -int hack_opcode; - -static int global_failure; -static int global_isjump; -static int global_iscjump; -static int global_isaddx; -static int global_cmov; -static int long_opcode; -static int global_mayfail; -static int global_fpu; - -static char endstr[1000]; - -#include "flags_x86.h" - -#ifdef UAE -static void write_winuae_header_prefix(FILE *f) -{ - fprintf(f, "#if defined(CPU_AARCH64)\n"); - fprintf(f, "#include \"%s\"\n", "arm/comptbl_arm.h"); - fprintf(f, "#else\n"); -} - -static void write_winuae_header_suffix(FILE *f) -{ - fprintf(f, "#endif /* CPU_AARCH64 */\n"); -} - -static void write_winuae_source_prefix(FILE *f, const char *arm_source) -{ - fprintf(f, "#if defined(CPU_AARCH64) || defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)\n"); - fprintf(f, "#include \"%s\"\n", arm_source); - fprintf(f, "#else\n"); -} - -static void write_winuae_compemu_prefix(FILE *f) -{ - write_winuae_source_prefix(f, "arm/compemu_arm.cpp"); -} - -static void write_winuae_compemu_suffix(FILE *f) -{ - fprintf(f, "#endif /* CPU_AARCH64 */\n"); -} - -static void write_winuae_source_suffix(FILE *f) -{ - fprintf(f, "#endif /* CPU_AARCH64 */\n"); -} -#endif - -#ifndef __attribute__ -# ifndef __GNUC__ -# define __attribute__(x) -# endif -#endif - -#define GENA_GETV_NO_FETCH 0 -#define GENA_GETV_FETCH 1 -#define GENA_GETV_FETCH_ALIGN 2 -#define GENA_MOVEM_DO_INC 0 -#define GENA_MOVEM_NO_INC 1 -#define GENA_MOVEM_MOVE16 2 - - -static int cond_codes[] = { -1, -1, -NATIVE_CC_HI, NATIVE_CC_LS, -NATIVE_CC_CC, NATIVE_CC_CS, -NATIVE_CC_NE, NATIVE_CC_EQ, --1, -1, -NATIVE_CC_PL, NATIVE_CC_MI, -NATIVE_CC_GE, NATIVE_CC_LT, -NATIVE_CC_GT, NATIVE_CC_LE -}; - -static int brace_level; - -static char outbuffer[30000]; - -static void comprintf(const char *format, ...) -{ - char outbuf[1000]; - va_list parms; - va_start(parms, format); - _vsnprintf(outbuf, sizeof(outbuf) - 1, format, parms); - outbuf[sizeof(outbuf) - 1] = 0; - va_end(parms); - - char *p = outbuf; - bool firstspace = true; - while (*p) { - char v = *p; - if (v == '\t' || (v == ' ' && p[1] == ' ') || (firstspace && v == ' ')) { - memmove(p, p + 1, strlen(p + 1) + 1); - } else { - firstspace = false; - p++; - } - } - - p = outbuf; - for (;;) { - char *pe = p; - int islf = 0; - while (*pe != 0 && *pe != '\n') { - pe++; - } - if (*pe == '\n') { - islf = 1; - *pe = 0; - } - - char outbuf2[1000]; - strcpy(outbuf2, p); - outbuf2[pe - p] = 0; - - if (outbuf2[0]) { - char *ps = outbuf2; - while (*ps) { - char v = *ps; - if (v == '}') { - brace_level--; - } - ps++; - } - for (int i = 0; i < brace_level; i++) { - strcat(outbuffer, "\t"); - } - strcat(outbuffer, outbuf2); - - ps = outbuf2; - while (*ps) { - char v = *ps; - if (v == '{') { - brace_level++; - } - ps++; - } - } - - if (islf) { - strcat(outbuffer, "\n"); - pe++; - } - if (*pe == 0) - break; - p = pe; - } -} - -static void com_discard(void) -{ - outbuffer[0] = 0; -} - -static void com_flush(void) -{ - printf("%s", outbuffer); - com_discard(); -} - - -static FILE *headerfile; -static FILE *stblfile; - -static int using_prefetch; -static int using_exception_3; -static int cpu_level; -static int noflags; - -/* For the current opcode, the next lower level that will have different code. - * Initialized to -1 for each opcode. If it remains unchanged, indicates we - * are done with that opcode. */ -static int next_cpu_level; - -static int *opcode_map; -static int *opcode_next_clev; -static int *opcode_last_postfix; -static unsigned long *counts; - -static void read_counts(void) -{ - FILE *file; - unsigned long opcode, count, total; - char name[20]; - int nr = 0; - memset(counts, 0, 65536 * sizeof * counts); - - file = fopen("frequent.68k", "r"); - if (file) - { - if (fscanf(file, "Total: %lu\n", &total) != 1) { - assert(0); - } - while (fscanf(file, "%lx: %lu %s\n", &opcode, &count, name) == 3) - { - opcode_next_clev[nr] = NEXT_CPU_LEVEL; - opcode_last_postfix[nr] = -1; - opcode_map[nr++] = opcode; - counts[opcode] = count; - } - fclose(file); - } - if (nr == nr_cpuop_funcs) - return; - for (opcode = 0; opcode < 0x10000; opcode++) - { - if (table68k[opcode].handler == -1 && table68k[opcode].mnemo != i_ILLG - && counts[opcode] == 0) - { - opcode_next_clev[nr] = NEXT_CPU_LEVEL; - opcode_last_postfix[nr] = -1; - opcode_map[nr++] = opcode; - counts[opcode] = count; - } - } - assert(nr == nr_cpuop_funcs); -} - -static int n_braces = 0; -static int insn_n_cycles; - -static void start_brace(void) -{ - n_braces++; - comprintf("{\n"); -} - -static void close_brace(void) -{ - assert(n_braces > 0); - n_braces--; - comprintf("}\n"); -} - -static void finish_braces(void) -{ - while (n_braces > 0) - close_brace(); -} - -static inline void gen_update_next_handler(void) -{ - return; /* Can anything clever be done here? */ -} - -static void gen_writebyte(const char *address, const char *source) -{ - comprintf("\twritebyte(%s, %s, scratchie);\n", address, source); -} - -static void gen_writeword(const char *address, const char *source) -{ - comprintf("\twriteword(%s, %s, scratchie);\n", address, source); -} - -static void gen_writelong(const char *address, const char *source) -{ - comprintf("\twritelong(%s, %s, scratchie);\n", address, source); -} - -static void gen_readbyte(const char *address, const char *dest) -{ - comprintf("\treadbyte(%s, %s, scratchie);\n", address, dest); -} - -static void gen_readword(const char *address, const char *dest) -{ - comprintf("\treadword(%s,%s,scratchie);\n", address, dest); -} - -static void gen_readlong(const char *address, const char *dest) -{ - comprintf("\treadlong(%s, %s, scratchie);\n", address, dest); -} - - - -static const char * -gen_nextilong(void) -{ - static char buffer[80]; - - sprintf(buffer, "comp_get_ilong((m68k_pc_offset+=4)-4)"); - insn_n_cycles += 4; - - long_opcode = 1; - return buffer; -} - -static const char * -gen_nextiword(void) -{ - static char buffer[80]; - - sprintf(buffer, "comp_get_iword((m68k_pc_offset+=2)-2)"); - insn_n_cycles += 2; - - long_opcode = 1; - return buffer; -} - -static const char * -gen_nextibyte(void) -{ - static char buffer[80]; - - sprintf(buffer, "comp_get_ibyte((m68k_pc_offset+=2)-2)"); - insn_n_cycles += 2; - - long_opcode = 1; - return buffer; -} - - -static void -swap_opcode(void) -{ -#ifdef UAE - /* no-op */ -#else - comprintf("#ifdef USE_JIT_FPU\n"); - comprintf("#if defined(HAVE_GET_WORD_UNSWAPPED) && !defined(FULLMMU)\n"); - comprintf("\topcode = do_byteswap_16(opcode);\n"); - comprintf("#endif\n"); - comprintf("#endif\n"); -#endif -} - -static void sync_m68k_pc(void) -{ - comprintf("if (m68k_pc_offset > SYNC_PC_OFFSET) {\n"); - comprintf("sync_m68k_pc();\n"); - comprintf("}\n"); -} - - -static void gen_set_fault_pc(void) -{ - start_brace(); - comprintf("\tsync_m68k_pc();\n"); - comprintf("\tuae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset;\n"); - comprintf("\tint ret=scratchie++;\n" - "\tmov_l_ri(ret,retadd);\n" - "\tmov_l_mr((uintptr)®s.fault_pc,ret);\n"); -} - - -static void make_sr(void) -{ - start_brace(); - comprintf("\tint sr = scratchie++;\n"); - comprintf("\tint tmp = scratchie++;\n"); - comprintf("\tcompemu_make_sr(sr, tmp);\n"); -} - - -static void disasm_this_inst(void) -{ - comprintf("\tdisasm_this_inst = true;\n"); -} - - -/* getv == 1: fetch data; getv != 0: check for odd address. If movem != 0, - * the calling routine handles Apdi and Aipi modes. - * gb-- movem == 2 means the same thing but for a MOVE16 instruction */ -static void genamode(amodes mode, const char *reg, wordsizes size, const char *name, int getv, int movem) -{ - start_brace(); - switch (mode) - { - case Dreg: /* Do we need to check dodgy here? */ - assert(movem == GENA_MOVEM_DO_INC); - if (getv == GENA_GETV_FETCH || getv == GENA_GETV_FETCH_ALIGN) - { - /* We generate the variable even for getv==2, so we can use - it as a destination for MOVE */ - comprintf("\tint %s = %s;\n", name, reg); - } - return; - - case Areg: - assert(movem == GENA_MOVEM_DO_INC); - if (getv == GENA_GETV_FETCH || getv == GENA_GETV_FETCH_ALIGN) - { - /* see above */ - comprintf("\tint %s = dodgy ? scratchie++ : %s + 8;\n", name, reg); - if (getv == GENA_GETV_FETCH) - { - comprintf("\tif (dodgy) {\n"); - comprintf("\t\tmov_l_rr(%s, %s + 8);\n", name, reg); - comprintf("}\n"); - } - } - return; - - case Aind: - comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); - comprintf("\tif (dodgy) {\n"); - comprintf("\t\tmov_l_rr(%sa, %s + 8);\n", name, reg); - comprintf("}\n"); - break; - case Aipi: - comprintf("\tint %sa = scratchie++;\n", name); - comprintf("\tmov_l_rr(%sa, %s + 8);\n", name, reg); - break; - case Apdi: - switch (size) - { - case sz_byte: - if (movem != GENA_MOVEM_DO_INC) - { - comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); - comprintf("\tif (dodgy) {\n"); - comprintf("\t\tmov_l_rr(%sa, 8 + %s);\n", name, reg); - comprintf("}\n"); - } else - { - start_brace(); - comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); - comprintf("\tlea_l_brr(%s + 8, %s + 8, (uae_s32)-areg_byteinc[%s]);\n", reg, reg, reg); - comprintf("\tif (dodgy) {\n"); - comprintf("\t\tmov_l_rr(%sa, 8 + %s);\n", name, reg); - comprintf("}\n"); - } - break; - case sz_word: - if (movem != GENA_MOVEM_DO_INC) - { - comprintf("\tint %sa=dodgy?scratchie++:%s+8;\n", name, reg); - comprintf("\tif (dodgy) {\n"); - comprintf("\tmov_l_rr(%sa,8+%s);\n", name, reg); - comprintf("}\n"); - } else - { - start_brace(); - comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); - comprintf("\tlea_l_brr(%s + 8, %s + 8, -2);\n", reg, reg); - comprintf("\tif (dodgy) {\n"); - comprintf("\t\tmov_l_rr(%sa, 8 + %s);\n", name, reg); - comprintf("}\n"); - } - break; - case sz_long: - if (movem != GENA_MOVEM_DO_INC) - { - comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); - comprintf("\tif (dodgy) {\n"); - comprintf("\t\tmov_l_rr(%sa, 8 + %s);\n", name, reg); - comprintf("}\n"); - } else - { - start_brace(); - comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); - comprintf("\tlea_l_brr(%s + 8, %s + 8, -4);\n", reg, reg); - comprintf("\tif (dodgy) {\n"); - comprintf("\t\tmov_l_rr(%sa, 8 + %s);\n", name, reg); - comprintf("}\n"); - } - break; - default: - assert(0); - break; - } - break; - case Ad16: - comprintf("\tint %sa = scratchie++;\n", name); - comprintf("\tmov_l_rr(%sa, 8 + %s);\n", name, reg); - comprintf("\tlea_l_brr(%sa, %sa, (uae_s32)(uae_s16)%s);\n", name, name, gen_nextiword()); - break; - case Ad8r: - comprintf("\tint %sa = scratchie++;\n", name); - comprintf("\tcalc_disp_ea_020(%s + 8, %s, %sa, scratchie);\n", reg, gen_nextiword(), name); - break; - - case PC16: - comprintf("\tint %sa = scratchie++;\n", name); - comprintf("\tuae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset);\n"); - comprintf("\tuae_s32 PC16off = (uae_s32)(uae_s16)%s;\n", gen_nextiword()); - comprintf("\tmov_l_ri(%sa, address + PC16off);\n", name); - break; - - case PC8r: - comprintf("\tint pctmp = scratchie++;\n"); - comprintf("\tint %sa = scratchie++;\n", name); - comprintf("\tuae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset);\n"); - start_brace(); - comprintf("\tmov_l_ri(pctmp,address);\n"); - - comprintf("\tcalc_disp_ea_020(pctmp, %s, %sa, scratchie);\n", gen_nextiword(), name); - break; - case absw: - comprintf("\tint %sa = scratchie++;\n", name); - comprintf("\tmov_l_ri(%sa, (uae_s32)(uae_s16)%s);\n", name, gen_nextiword()); - break; - case absl: - comprintf("\tint %sa = scratchie++;\n", name); - comprintf("\tmov_l_ri(%sa, %s); /* absl */\n", name, gen_nextilong()); - break; - case imm: - assert(getv == GENA_GETV_FETCH); - switch (size) - { - case sz_byte: - comprintf("\tint %s = scratchie++;\n", name); - comprintf("\tmov_l_ri(%s, (uae_s32)(uae_s8)%s);\n", name, gen_nextibyte()); - break; - case sz_word: - comprintf("\tint %s = scratchie++;\n", name); - comprintf("\tmov_l_ri(%s, (uae_s32)(uae_s16)%s);\n", name, gen_nextiword()); - break; - case sz_long: - comprintf("\tint %s = scratchie++;\n", name); - comprintf("\tmov_l_ri(%s, %s);\n", name, gen_nextilong()); - break; - default: - assert(0); - break; - } - return; - case imm0: - assert(getv == GENA_GETV_FETCH); - comprintf("\tint %s = scratchie++;\n", name); - comprintf("\tmov_l_ri(%s, (uae_s32)(uae_s8)%s);\n", name, gen_nextibyte()); - return; - case imm1: - assert(getv == GENA_GETV_FETCH); - comprintf("\tint %s = scratchie++;\n", name); - comprintf("\tmov_l_ri(%s, (uae_s32)(uae_s16)%s);\n", name, gen_nextiword()); - return; - case imm2: - assert(getv == GENA_GETV_FETCH); - comprintf("\tint %s = scratchie++;\n", name); - comprintf("\tmov_l_ri(%s, %s);\n", name, gen_nextilong()); - return; - case immi: - assert(getv == GENA_GETV_FETCH); - comprintf("\tint %s = scratchie++;\n", name); - comprintf("\tmov_l_ri(%s, %s);\n", name, reg); - return; - default: - assert(0); - break; - } - - /* We get here for all non-reg non-immediate addressing modes to - * actually fetch the value. */ - if (getv == GENA_GETV_FETCH) - { - char astring[80]; - sprintf(astring, "%sa", name); - switch (size) - { - case sz_byte: - insn_n_cycles += 2; - break; - case sz_word: - insn_n_cycles += 2; - break; - case sz_long: - insn_n_cycles += 4; - break; - default: - assert(0); - break; - } - start_brace(); - comprintf("\tint %s = scratchie++;\n", name); - switch (size) - { - case sz_byte: - gen_readbyte(astring, name); - break; - case sz_word: - gen_readword(astring, name); - break; - case sz_long: - gen_readlong(astring, name); - break; - default: - assert(0); - break; - } - } - - /* We now might have to fix up the register for pre-dec or post-inc - * addressing modes. */ - if (movem == GENA_MOVEM_DO_INC) - { - switch (mode) - { - case Aipi: - switch (size) - { - case sz_byte: - comprintf("\tlea_l_brr(%s + 8,%s + 8, areg_byteinc[%s]);\n", reg, reg, reg); - break; - case sz_word: - comprintf("\tlea_l_brr(%s + 8, %s + 8, 2);\n", reg, reg); - break; - case sz_long: - comprintf("\tlea_l_brr(%s + 8, %s + 8, 4);\n", reg, reg); - break; - default: - assert(0); - break; - } - break; - case Apdi: - break; - default: - break; - } - } -} - -static void genastore(const char *from, amodes mode, const char *reg, wordsizes size, const char *to) -{ - switch (mode) - { - case Dreg: - switch (size) - { - case sz_byte: - comprintf("\tif(%s != %s) {\n", reg, from); - comprintf("\t\tmov_b_rr(%s, %s);\n", reg, from); - comprintf("}\n"); - break; - case sz_word: - comprintf("\tif(%s != %s) {\n", reg, from); - comprintf("\t\tmov_w_rr(%s, %s);\n", reg, from); - comprintf("}\n"); - break; - case sz_long: - comprintf("\tif(%s != %s) {\n", reg, from); - comprintf("\t\tmov_l_rr(%s, %s);\n", reg, from); - comprintf("}\n"); - break; - default: - assert(0); - break; - } - break; - case Areg: - switch (size) - { - case sz_word: - comprintf("\tif(%s + 8 != %s) {\n", reg, from); - comprintf("\t\tmov_w_rr(%s + 8, %s);\n", reg, from); - comprintf("}\n"); - break; - case sz_long: - comprintf("\tif(%s + 8 != %s) {\n", reg, from); - comprintf("\t\tmov_l_rr(%s + 8, %s);\n", reg, from); - comprintf("}\n"); - break; - default: - assert(0); - break; - } - break; - - case Apdi: - case absw: - case PC16: - case PC8r: - case Ad16: - case Ad8r: - case Aipi: - case Aind: - case absl: - { - char astring[80]; - sprintf(astring, "%sa", to); - - switch (size) - { - case sz_byte: - insn_n_cycles += 2; - gen_writebyte(astring, from); - break; - case sz_word: - insn_n_cycles += 2; - gen_writeword(astring, from); - break; - case sz_long: - insn_n_cycles += 4; - gen_writelong(astring, from); - break; - default: - assert(0); - break; - } - } - break; - case imm: - case imm0: - case imm1: - case imm2: - case immi: - assert(0); - break; - default: - assert(0); - break; - } -} - -static void genmov16(uae_u32 opcode, struct instr *curi) -{ - comprintf("\tint src=scratchie++;\n"); - comprintf("\tint dst=scratchie++;\n"); - - if ((opcode & 0xfff8) == 0xf620) { - /* MOVE16 (Ax)+,(Ay)+ */ - comprintf("\tuae_u16 dstreg=((%s)>>12)&0x07;\n", gen_nextiword()); - comprintf("\tmov_l_rr(src,8+srcreg);\n"); - comprintf("\tmov_l_rr(dst,8+dstreg);\n"); - } else { - /* Other variants */ - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_NO_FETCH, GENA_MOVEM_MOVE16); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_NO_FETCH, GENA_MOVEM_MOVE16); - comprintf("\tmov_l_rr(src,srca);\n"); - comprintf("\tmov_l_rr(dst,dsta);\n"); - } - - /* Align on 16-byte boundaries */ - comprintf("\tand_l_ri(src,~15);\n"); - comprintf("\tand_l_ri(dst,~15);\n"); - - if ((opcode & 0xfff8) == 0xf620) { - comprintf("\tif (srcreg != dstreg) {\n"); - comprintf("\tadd_l_ri(srcreg+8,16);\n"); - comprintf("}\n"); - comprintf("\tadd_l_ri(dstreg+8,16);\n"); - } else if ((opcode & 0xfff8) == 0xf600) - comprintf("\tadd_l_ri(srcreg+8,16);\n"); - else if ((opcode & 0xfff8) == 0xf608) - comprintf("\tadd_l_ri(dstreg+8,16);\n"); - -#ifdef UAE - comprintf("\tif (special_mem || jit_n_addr_unsafe) {\n"); - comprintf("\t\tint tmp=scratchie;\n"); - comprintf("\tscratchie+=4;\n" - "\treadlong(src,tmp,scratchie);\n" - "\twritelong_clobber(dst,tmp,scratchie);\n" - "\tadd_l_ri(src,4);\n" - "\tadd_l_ri(dst,4);\n" - "\treadlong(src,tmp,scratchie);\n" - "\twritelong_clobber(dst,tmp,scratchie);\n" - "\tadd_l_ri(src,4);\n" - "\tadd_l_ri(dst,4);\n" - "\treadlong(src,tmp,scratchie);\n" - "\twritelong_clobber(dst,tmp,scratchie);\n" - "\tadd_l_ri(src,4);\n" - "\tadd_l_ri(dst,4);\n" - "\treadlong(src,tmp,scratchie);\n" - "\twritelong_clobber(dst,tmp,scratchie);\n"); - comprintf("\t} else\n"); -#endif - start_brace(); - comprintf("\tint tmp=scratchie;\n"); - comprintf("\tscratchie+=4;\n" - "\tget_n_addr(src,src,scratchie);\n" - "\tget_n_addr(dst,dst,scratchie);\n" - "\tmov_l_rR(tmp+0,src,0);\n" - "\tmov_l_rR(tmp+1,src,4);\n" - "\tmov_l_rR(tmp+2,src,8);\n" - "\tmov_l_rR(tmp+3,src,12);\n" - "\tmov_l_Rr(dst,tmp+0,0);\n" - "\tforget_about(tmp+0);\n" - "\tmov_l_Rr(dst,tmp+1,4);\n" - "\tforget_about(tmp+1);\n" - "\tmov_l_Rr(dst,tmp+2,8);\n" - "\tforget_about(tmp+2);\n" - "\tmov_l_Rr(dst,tmp+3,12);\n"); - close_brace(); -} - -static void -genmovemel(uae_u16 opcode) -{ - comprintf("\tuae_u16 mask = %s;\n", gen_nextiword()); - comprintf("\tint native=scratchie++;\n"); - comprintf("\tint i;\n"); - comprintf("\tsigned char offset=0;\n"); - genamode(table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_NO_INC); -#ifdef UAE - if (table68k[opcode].size == sz_long) - comprintf("\tif (1 && !special_mem && !jit_n_addr_unsafe) {\n"); - else - comprintf("\tif (1 && !special_mem && !jit_n_addr_unsafe) {\n"); -#endif - - /* Fast but unsafe... */ - comprintf("\tget_n_addr(srca,native,scratchie);\n"); - - comprintf("\tfor (i=0;i<16;i++) {\n" - "\t\tif ((mask>>i)&1) {\n"); - switch (table68k[opcode].size) { - case sz_long: - comprintf("\t\t\tmov_l_rR(i,native,offset);\n" - "\t\t\tmid_bswap_32(i);\n" - "\t\t\toffset+=4;\n"); - break; - case sz_word: - comprintf("\t\t\tmov_w_rR(i,native,offset);\n" - "\t\t\tmid_bswap_16(i);\n" - "\t\t\tsign_extend_16_rr(i,i);\n" - "\t\t\toffset+=2;\n"); - break; - default: assert(0); - } - comprintf("\t\t}\n"); - comprintf("\t}\n"); - if (table68k[opcode].dmode == Aipi) { - comprintf("\t\t\tlea_l_brr(8+dstreg,srca,offset);\n"); - } - /* End fast but unsafe. */ - -#ifdef UAE - comprintf("\t} else {\n"); - - comprintf("\t\tint tmp=scratchie++;\n"); - - comprintf("\t\tmov_l_rr(tmp,srca);\n"); - comprintf("\t\tfor (i=0;i<16;i++) {\n" - "\t\t\tif ((mask>>i)&1) {\n"); - switch (table68k[opcode].size) { - case sz_long: - comprintf("\t\t\t\treadlong(tmp,i,scratchie);\n" - "\t\t\t\tadd_l_ri(tmp,4);\n"); - break; - case sz_word: - comprintf("\t\t\t\treadword(tmp,i,scratchie);\n" - "\t\t\t\tsign_extend_16_rr(i,i);\n" - "\t\t\t\tadd_l_ri(tmp,2);\n"); - break; - default: assert(0); - } - - comprintf("\t\t\t}\n"); - comprintf("\t\t}\n"); - if (table68k[opcode].dmode == Aipi) { - comprintf("\t\tmov_l_rr(8+dstreg,tmp);\n"); - } - comprintf("\t}\n"); -#endif - -} - - -static void -genmovemle(uae_u16 opcode) -{ - comprintf("\tuae_u16 mask = %s;\n", gen_nextiword()); - comprintf("\tint native=scratchie++;\n"); - comprintf("\tint i;\n"); - comprintf("\tint tmp=scratchie++;\n"); - comprintf("\tsigned char offset=0;\n"); - genamode(table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_NO_INC); - -#ifdef UAE - /* *Sigh* Some clever geek realized that the fastest way to copy a - buffer from main memory to the gfx card is by using movmle. Good - on her, but unfortunately, gfx mem isn't "real" mem, and thus that - act of cleverness means that movmle must pay attention to special_mem, - or Genetic Species is a rather boring-looking game ;-) */ - if (table68k[opcode].dmode != Apdi) { - comprintf("\tif (1 && !special_mem && !jit_n_addr_unsafe) {\n"); - } else { - // if Apdi and dstreg is included with mask: use indirect mode. - comprintf("\tif (1 && !special_mem && !jit_n_addr_unsafe && !(mask & (1 << (7 - dstreg)))) {\n"); - } -#endif - - comprintf("\tget_n_addr(srca,native,scratchie);\n"); - - if (table68k[opcode].dmode != Apdi) { - comprintf("\tfor (i=0;i<16 && mask;i++) {\n" - "\t\tif ((mask>>i)&1) {\n"); - switch (table68k[opcode].size) { - case sz_long: - comprintf("\t\t\tmov_l_rr(tmp,i);\n" - "\t\t\tmid_bswap_32(tmp);\n" - "\t\t\tmov_l_Rr(native,tmp,offset);\n" - "\t\t\toffset+=4;\n"); - break; - case sz_word: - comprintf("\t\t\tmov_l_rr(tmp,i);\n" - "\t\t\tmid_bswap_16(tmp);\n" - "\t\t\tmov_w_Rr(native,tmp,offset);\n" - "\t\t\toffset+=2;\n"); - break; - default: assert(0); - } - } else { /* Pre-decrement */ - comprintf("\tfor (i=0;i<16 && mask;i++) {\n" - "\t\tif ((mask>>i)&1) {\n"); - switch (table68k[opcode].size) { - case sz_long: - comprintf("\t\t\toffset-=4;\n" - "\t\t\tmov_l_rr(tmp,15-i);\n" - "\t\t\tmid_bswap_32(tmp);\n" - "\t\t\tmov_l_Rr(native,tmp,offset);\n" - ); - break; - case sz_word: - comprintf("\t\t\toffset-=2;\n" - "\t\t\tmov_l_rr(tmp,15-i);\n" - "\t\t\tmid_bswap_16(tmp);\n" - "\t\t\tmov_w_Rr(native,tmp,offset);\n" - ); - break; - default: assert(0); - } - } - - comprintf("\t\t}\n"); - comprintf("\t}\n"); - if (table68k[opcode].dmode == Apdi) { - comprintf("\t\t\tlea_l_brr(8+dstreg,srca,(uae_s32)offset);\n"); - } -#ifdef UAE - comprintf("\t} else {\n"); - - if (table68k[opcode].dmode != Apdi) { - comprintf("\tmov_l_rr(tmp,srca);\n"); - comprintf("\tfor (i=0;i<16 && mask;i++) {\n" - "\t\tif ((mask>>i)&1) {\n"); - switch (table68k[opcode].size) { - case sz_long: - comprintf("\t\t\twritelong(tmp,i,scratchie);\n" - "\t\t\tadd_l_ri(tmp,4);\n"); - break; - case sz_word: - comprintf("\t\t\twriteword(tmp,i,scratchie);\n" - "\t\t\tadd_l_ri(tmp,2);\n"); - break; - default: assert(0); - } - } else { /* Pre-decrement */ - comprintf("\tfor (i=0;i<16 && mask;i++) {\n" - "\t\tif ((mask>>i)&1) {\n"); - switch (table68k[opcode].size) { - case sz_long: - comprintf("\t\t\tsub_l_ri(srca,4);\n" - "\t\t\twritelong(srca,15-i,scratchie);\n"); - break; - case sz_word: - comprintf("\t\t\tsub_l_ri(srca,2);\n" - "\t\t\twriteword(srca,15-i,scratchie);\n"); - break; - default: assert(0); - } - } - - comprintf("\t\t}\n"); - comprintf("\t}\n"); - if (table68k[opcode].dmode == Apdi) { - comprintf("\t\t\tmov_l_rr(8+dstreg,srca);\n"); - } - comprintf("\t}\n"); -#endif -} - - -static void -duplicate_carry(void) -{ - comprintf("\tif (needed_flags&FLAG_X) {\n"); - comprintf("\tduplicate_carry();\n"); - comprintf("}\n"); -} - -typedef enum -{ - flag_logical_noclobber, flag_logical, flag_add, flag_sub, flag_cmp, - flag_addx, flag_subx, flag_zn, flag_av, flag_sv, flag_and, flag_or, - flag_eor, flag_mov -} -flagtypes; - - -static void -genflags(flagtypes type, wordsizes size, const char *value, const char *src, const char *dst) -{ - if (noflags) { - switch (type) { - case flag_cmp: - comprintf("\tdont_care_flags();\n"); - comprintf("/* Weird --- CMP with noflags ;-) */\n"); - return; - case flag_add: - case flag_sub: - comprintf("\tdont_care_flags();\n"); - { - const char *op; - switch (type) { - case flag_add: op = "add"; break; - case flag_sub: op = "sub"; break; - default: assert(0); - } - switch (size) - { - case sz_byte: - comprintf("\t%s_b(%s,%s);\n", op, dst, src); - break; - case sz_word: - comprintf("\t%s_w(%s,%s);\n", op, dst, src); - break; - case sz_long: - comprintf("\t%s_l(%s,%s);\n", op, dst, src); - break; - } - return; - } - break; - - case flag_and: - comprintf("\tdont_care_flags();\n"); - switch (size) - { - case sz_byte: - comprintf("if (kill_rodent(dst)) {\n"); - comprintf("\tzero_extend_8_rr(scratchie,%s);\n", src); - comprintf("\tor_l_ri(scratchie,0xffffff00);\n"); - comprintf("\tand_l(%s,scratchie);\n", dst); - comprintf("\tforget_about(scratchie);\n"); - comprintf("\t} else \n" - "\tand_b(%s,%s);\n", dst, src); - break; - case sz_word: - comprintf("if (kill_rodent(dst)) {\n"); - comprintf("\tzero_extend_16_rr(scratchie,%s);\n", src); - comprintf("\tor_l_ri(scratchie,0xffff0000);\n"); - comprintf("\tand_l(%s,scratchie);\n", dst); - comprintf("\tforget_about(scratchie);\n"); - comprintf("\t} else \n" - "\tand_w(%s,%s);\n", dst, src); - break; - case sz_long: - comprintf("\tand_l(%s,%s);\n", dst, src); - break; - } - return; - - case flag_mov: - comprintf("\tdont_care_flags();\n"); - switch (size) - { - case sz_byte: - comprintf("if (kill_rodent(dst)) {\n"); - comprintf("\tzero_extend_8_rr(scratchie,%s);\n", src); - comprintf("\tand_l_ri(%s,0xffffff00);\n", dst); - comprintf("\tor_l(%s,scratchie);\n", dst); - comprintf("\tforget_about(scratchie);\n"); - comprintf("\t} else \n" - "\tmov_b_rr(%s,%s);\n", dst, src); - break; - case sz_word: - comprintf("if (kill_rodent(dst)) {\n"); - comprintf("\tzero_extend_16_rr(scratchie,%s);\n", src); - comprintf("\tand_l_ri(%s,0xffff0000);\n", dst); - comprintf("\tor_l(%s,scratchie);\n", dst); - comprintf("\tforget_about(scratchie);\n"); - comprintf("\t} else \n" - "\tmov_w_rr(%s,%s);\n", dst, src); - break; - case sz_long: - comprintf("\tmov_l_rr(%s,%s);\n", dst, src); - break; - } - return; - - case flag_or: - case flag_eor: - comprintf("\tdont_care_flags();\n"); - start_brace(); - { - const char *op; - switch (type) { - case flag_or: op = "or"; break; - case flag_eor: op = "xor"; break; - default: assert(0); - } - switch (size) - { - case sz_byte: - comprintf("if (kill_rodent(dst)) {\n"); - comprintf("\tzero_extend_8_rr(scratchie,%s);\n", src); - comprintf("\t%s_l(%s,scratchie);\n", op, dst); - comprintf("\tforget_about(scratchie);\n"); - comprintf("\t} else \n" - "\t%s_b(%s,%s);\n", op, dst, src); - break; - case sz_word: - comprintf("if (kill_rodent(dst)) {\n"); - comprintf("\tzero_extend_16_rr(scratchie,%s);\n", src); - comprintf("\t%s_l(%s,scratchie);\n", op, dst); - comprintf("\tforget_about(scratchie);\n"); - comprintf("\t} else \n" - "\t%s_w(%s,%s);\n", op, dst, src); - break; - case sz_long: - comprintf("\t%s_l(%s,%s);\n", op, dst, src); - break; - } - close_brace(); - return; - } - - - case flag_addx: - case flag_subx: - comprintf("\tdont_care_flags();\n"); - { - const char *op; - switch (type) { - case flag_addx: op = "adc"; break; - case flag_subx: op = "sbb"; break; - default: assert(0); - } - comprintf("\trestore_carry();\n"); /* Reload the X flag into C */ - switch (size) - { - case sz_byte: - comprintf("\t%s_b(%s,%s);\n", op, dst, src); - break; - case sz_word: - comprintf("\t%s_w(%s,%s);\n", op, dst, src); - break; - case sz_long: - comprintf("\t%s_l(%s,%s);\n", op, dst, src); - break; - } - return; - } - break; - default: return; - } - } - - /* Need the flags, but possibly not all of them */ - switch (type) - { - case flag_logical_noclobber: - failure; - /* fall through */ - - case flag_and: - case flag_or: - case flag_eor: - comprintf("\tdont_care_flags();\n"); - start_brace(); - { - const char *op; - switch (type) { - case flag_and: op = "and"; break; - case flag_or: op = "or"; break; - case flag_eor: op = "xor"; break; - default: assert(0); - } - switch (size) - { - case sz_byte: - comprintf("\tstart_needflags();\n" - "\t%s_b(%s,%s);\n", op, dst, src); - break; - case sz_word: - comprintf("\tstart_needflags();\n" - "\t%s_w(%s,%s);\n", op, dst, src); - break; - case sz_long: - comprintf("\tstart_needflags();\n" - "\t%s_l(%s,%s);\n", op, dst, src); - break; - } - comprintf("\tlive_flags();\n"); - comprintf("\tend_needflags();\n"); - close_brace(); - return; - } - - case flag_mov: - comprintf("\tdont_care_flags();\n"); - start_brace(); - { - switch (size) - { - case sz_byte: - comprintf("\tif (%s!=%s) {\n", src, dst); - comprintf("\tmov_b_ri(%s,0);\n" - "\tstart_needflags();\n", dst); - comprintf("\tor_b(%s,%s);\n", dst, src); - comprintf("\t} else {\n"); - comprintf("\tmov_b_rr(%s,%s);\n", dst, src); - comprintf("\ttest_b_rr(%s,%s);\n", dst, dst); - comprintf("\t}\n"); - break; - case sz_word: - comprintf("\tif (%s!=%s) {\n", src, dst); - comprintf("\tmov_w_ri(%s,0);\n" - "\tstart_needflags();\n", dst); - comprintf("\tor_w(%s,%s);\n", dst, src); - comprintf("\t} else {\n"); - comprintf("\tmov_w_rr(%s,%s);\n", dst, src); - comprintf("\ttest_w_rr(%s,%s);\n", dst, dst); - comprintf("\t}\n"); - break; - case sz_long: - comprintf("\tif (%s!=%s) {\n", src, dst); - comprintf("\tmov_l_ri(%s,0);\n" - "\tstart_needflags();\n", dst); - comprintf("\tor_l(%s,%s);\n", dst, src); - comprintf("\t} else {\n"); - comprintf("\tmov_l_rr(%s,%s);\n", dst, src); - comprintf("\ttest_l_rr(%s,%s);\n", dst, dst); - comprintf("\t}\n"); - break; - } - comprintf("\tlive_flags();\n"); - comprintf("\tend_needflags();\n"); - close_brace(); - return; - } - - case flag_logical: - comprintf("\tdont_care_flags();\n"); - start_brace(); - switch (size) - { - case sz_byte: - comprintf("\tstart_needflags();\n" - "\ttest_b_rr(%s,%s);\n", value, value); - break; - case sz_word: - comprintf("\tstart_needflags();\n" - "\ttest_w_rr(%s,%s);\n", value, value); - break; - case sz_long: - comprintf("\tstart_needflags();\n" - "\ttest_l_rr(%s,%s);\n", value, value); - break; - } - comprintf("\tlive_flags();\n"); - comprintf("\tend_needflags();\n"); - close_brace(); - return; - - - case flag_add: - case flag_sub: - case flag_cmp: - comprintf("\tdont_care_flags();\n"); - { - const char *op; - switch (type) { - case flag_add: op = "add"; break; - case flag_sub: op = "sub"; break; - case flag_cmp: op = "cmp"; break; - default: assert(0); - } - switch (size) - { - case sz_byte: - comprintf("\tstart_needflags();\n" - "\t%s_b(%s,%s);\n", op, dst, src); - break; - case sz_word: - comprintf("\tstart_needflags();\n" - "\t%s_w(%s,%s);\n", op, dst, src); - break; - case sz_long: - comprintf("\tstart_needflags();\n" - "\t%s_l(%s,%s);\n", op, dst, src); - break; - } - comprintf("\tlive_flags();\n"); - comprintf("\tend_needflags();\n"); - if (type != flag_cmp) { - duplicate_carry(); - } - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - - return; - } - - case flag_addx: - case flag_subx: - uses_cmov; - comprintf("\tdont_care_flags();\n"); - { - const char *op; - switch (type) { - case flag_addx: op = "adc"; break; - case flag_subx: op = "sbb"; break; - default: assert(0); - } - start_brace(); - comprintf("\tint zero=scratchie++;\n" - "\tint one=scratchie++;\n" - "\tif (needed_flags&FLAG_Z) {\n" - "\tmov_l_ri(zero,0);\n" - "\tmov_l_ri(one,-1);\n" - "\tmake_flags_live();\n" - "\tcmov_l_rr(zero,one,%d);\n" - "\t}\n", NATIVE_CC_NE); - comprintf("\trestore_carry();\n"); /* Reload the X flag into C */ - switch (size) - { - case sz_byte: - comprintf("\tstart_needflags();\n" - "\t%s_b(%s,%s);\n", op, dst, src); - break; - case sz_word: - comprintf("\tstart_needflags();\n" - "\t%s_w(%s,%s);\n", op, dst, src); - break; - case sz_long: - comprintf("\tstart_needflags();\n" - "\t%s_l(%s,%s);\n", op, dst, src); - break; - } - comprintf("\tlive_flags();\n"); - comprintf("\tif (needed_flags&FLAG_Z) {\n"); - comprintf("\tcmov_l_rr(zero,one,%d);\n", NATIVE_CC_NE); - comprintf("\tset_zero(zero, one);\n"); /* No longer need one */ - comprintf("\tlive_flags();\n"); - comprintf("\t}\n"); - comprintf("\tend_needflags();\n"); - duplicate_carry(); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - return; - } - default: - failure; - break; - } -} - -static int /* returns zero for success, non-zero for failure */ -gen_opcode(unsigned int opcode) -{ - struct instr *curi = table68k + opcode; - const char *ssize = NULL; - - insn_n_cycles = 2; - global_failure = 0; - long_opcode = 0; - global_isjump = 0; - global_iscjump = 0; - global_isaddx = 0; - global_cmov = 0; - global_fpu = 0; - global_mayfail = 0; - hack_opcode = opcode; - endstr[0] = 0; - - start_brace(); - comprintf("\tuae_u8 scratchie=S1;\n"); - switch (curi->plev) - { - case 0: /* not privileged */ - break; - case 1: /* unprivileged only on 68000 */ - if (cpu_level == 0) - break; - if (next_cpu_level < 0) - next_cpu_level = 0; - - /* fall through */ - case 2: /* priviledged */ - failure; /* Easy ones first */ - break; - case 3: /* privileged if size == word */ - if (curi->size == sz_byte) - break; - failure; - break; - } - switch (curi->size) { - case sz_byte: ssize = "b"; break; - case sz_word: ssize = "w"; break; - case sz_long: ssize = "l"; break; - default: assert(0); - } - (void)ssize; - - switch (curi->mnemo) - { - case i_OR: - case i_AND: - case i_EOR: -#ifdef DISABLE_I_OR_AND_EOR - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - switch (curi->mnemo) { - case i_OR: genflags(flag_or, curi->size, "", "src", "dst"); break; - case i_AND: genflags(flag_and, curi->size, "", "src", "dst"); break; - case i_EOR: genflags(flag_eor, curi->size, "", "src", "dst"); break; - } - genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); - break; - - case i_ORSR: - case i_EORSR: - failure; - isjump; - break; - - case i_ANDSR: - failure; - isjump; - break; - - case i_SUB: -#ifdef DISABLE_I_SUB - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genflags(flag_sub, curi->size, "", "src", "dst"); - genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); - break; - - case i_SUBA: -#ifdef DISABLE_I_SUBA - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", sz_long, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tint tmp=scratchie++;\n"); - switch (curi->size) { - case sz_byte: comprintf("\tsign_extend_8_rr(tmp,src);\n"); break; - case sz_word: comprintf("\tsign_extend_16_rr(tmp,src);\n"); break; - case sz_long: comprintf("\ttmp=src;\n"); break; - default: assert(0); - } - comprintf("\tsub_l(dst,tmp);\n"); - genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; - - case i_SUBX: -#ifdef DISABLE_I_SUBX - failure; -#endif - isaddx; - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genflags(flag_subx, curi->size, "", "src", "dst"); - genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); - break; - - case i_SBCD: - failure; - /* I don't think so! */ - break; - - case i_ADD: -#ifdef DISABLE_I_ADD - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genflags(flag_add, curi->size, "", "src", "dst"); - genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); - break; - - case i_ADDA: -#ifdef DISABLE_I_ADDA - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", sz_long, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tint tmp=scratchie++;\n"); - switch (curi->size) { - case sz_byte: comprintf("\tsign_extend_8_rr(tmp,src);\n"); break; - case sz_word: comprintf("\tsign_extend_16_rr(tmp,src);\n"); break; - case sz_long: comprintf("\ttmp=src;\n"); break; - default: assert(0); - } - comprintf("\tadd_l(dst,tmp);\n"); - genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; - - case i_ADDX: -#ifdef DISABLE_I_ADDX - failure; -#endif - isaddx; - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - genflags(flag_addx, curi->size, "", "src", "dst"); - genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); - break; - - case i_ABCD: - failure; - /* No BCD maths for me.... */ - break; - - case i_NEG: -#ifdef DISABLE_I_NEG - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tint dst=scratchie++;\n"); - comprintf("\tmov_l_ri(dst,0);\n"); - genflags(flag_sub, curi->size, "", "src", "dst"); - genastore("dst", curi->smode, "srcreg", curi->size, "src"); - break; - - case i_NEGX: -#ifdef DISABLE_I_NEGX - failure; -#endif - isaddx; - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tint dst=scratchie++;\n"); - comprintf("\tmov_l_ri(dst,0);\n"); - genflags(flag_subx, curi->size, "", "src", "dst"); - genastore("dst", curi->smode, "srcreg", curi->size, "src"); - break; - - case i_NBCD: - failure; - /* Nope! */ - break; - - case i_CLR: -#ifdef DISABLE_I_CLR - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tint dst=scratchie++;\n"); - comprintf("\tmov_l_ri(dst,0);\n"); - genflags(flag_logical, curi->size, "dst", "", ""); - genastore("dst", curi->smode, "srcreg", curi->size, "src"); - break; - - case i_NOT: -#ifdef DISABLE_I_NOT - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tint dst=scratchie++;\n"); - comprintf("\tmov_l_ri(dst,0xffffffff);\n"); - genflags(flag_eor, curi->size, "", "src", "dst"); - genastore("dst", curi->smode, "srcreg", curi->size, "src"); - break; - - case i_TST: -#ifdef DISABLE_I_TST - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genflags(flag_logical, curi->size, "src", "", ""); - break; - case i_BCHG: - case i_BCLR: - case i_BSET: - case i_BTST: -#ifdef DISABLE_I_BCHG_BCLR_BSET_BTST - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tint s=scratchie++;\n" - "\tint tmp=scratchie++;\n" - "\tmov_l_rr(s,src);\n"); - if (curi->size == sz_byte) - comprintf("\tand_l_ri(s,7);\n"); - else - comprintf("\tand_l_ri(s,31);\n"); - - { - const char *op; - int need_write = 1; - - switch (curi->mnemo) { - case i_BCHG: op = "btc"; break; - case i_BCLR: op = "btr"; break; - case i_BSET: op = "bts"; break; - case i_BTST: op = "bt"; need_write = 0; break; - default: op = ""; assert(0); - } - comprintf("\t%s_l_rr(dst,s);\n" /* Answer now in C */ - "\tsbb_l(s,s);\n" /* s is 0 if bit was 0, -1 otherwise */ - "\tmake_flags_live();\n" /* Get the flags back */ - "\tdont_care_flags();\n", op); - if (!noflags) { - comprintf("\tstart_needflags();\n" - "\tset_zero(s,tmp);\n" - "\tlive_flags();\n" - "\tend_needflags();\n"); - } - if (need_write) - genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); - } - break; - - case i_CMPM: - case i_CMP: -#ifdef DISABLE_I_CMPM_CMP - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - genflags(flag_cmp, curi->size, "", "src", "dst"); - break; - - case i_CMPA: -#ifdef DISABLE_I_CMPA - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", sz_long, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tint tmps=scratchie++;\n"); - switch (curi->size) { - case sz_byte: comprintf("\tsign_extend_8_rr(tmps,src);\n"); break; - case sz_word: comprintf("\tsign_extend_16_rr(tmps,src);\n"); break; - case sz_long: comprintf("tmps=src;\n"); break; - default: assert(0); - } - genflags(flag_cmp, sz_long, "", "tmps", "dst"); - break; - /* The next two are coded a little unconventional, but they are doing - * weird things... */ - - case i_MVPRM: - isjump; - failure; - break; - - case i_MVPMR: - isjump; - failure; - break; - - case i_MOVE: -#ifdef DISABLE_I_MOVE - failure; -#endif - switch (curi->dmode) { - case Dreg: - case Areg: - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); - genflags(flag_mov, curi->size, "", "src", "dst"); - genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); - break; - default: /* It goes to memory, not a register */ - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); - genflags(flag_logical, curi->size, "src", "", ""); - genastore("src", curi->dmode, "dstreg", curi->size, "dst"); - break; - } - break; - - case i_MOVEA: -#ifdef DISABLE_I_MOVEA - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); - - start_brace(); - comprintf("\tint tmps=scratchie++;\n"); - switch (curi->size) { - case sz_word: comprintf("\tsign_extend_16_rr(dst,src);\n"); break; - case sz_long: comprintf("\tmov_l_rr(dst,src);\n"); break; - default: assert(0); - } - genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; - - case i_MVSR2: - isjump; - failure; - break; - - case i_MV2SR: - isjump; - failure; - break; - - case i_SWAP: -#ifdef DISABLE_I_SWAP - failure; -#endif - genamode(curi->smode, "srcreg", sz_long, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - comprintf("\tdont_care_flags();\n"); - comprintf("\trol_l_ri(src,16);\n"); - genflags(flag_logical, sz_long, "src", "", ""); - genastore("src", curi->smode, "srcreg", sz_long, "src"); - break; - - case i_EXG: -#ifdef DISABLE_I_EXG - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tint tmp=scratchie++;\n" - "\tmov_l_rr(tmp,src);\n"); - genastore("dst", curi->smode, "srcreg", curi->size, "src"); - genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); - break; - - case i_EXT: -#ifdef DISABLE_I_EXT - failure; -#endif - genamode(curi->smode, "srcreg", sz_long, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - comprintf("\tdont_care_flags();\n"); - start_brace(); - switch (curi->size) - { - case sz_byte: - comprintf("\tint dst = src;\n" - "\tsign_extend_8_rr(src,src);\n"); - break; - case sz_word: - comprintf("\tint dst = scratchie++;\n" - "\tsign_extend_8_rr(dst,src);\n"); - break; - case sz_long: - comprintf("\tint dst = src;\n" - "\tsign_extend_16_rr(src,src);\n"); - break; - default: - assert(0); - } - genflags(flag_logical, - curi->size == sz_word ? sz_word : sz_long, "dst", "", ""); - genastore("dst", curi->smode, "srcreg", - curi->size == sz_word ? sz_word : sz_long, "src"); - break; - - case i_MVMEL: -#ifdef DISABLE_I_MVMEL - failure; -#endif - genmovemel(opcode); - break; - - case i_MVMLE: -#ifdef DISABLE_I_MVMLE - failure; -#endif - genmovemle(opcode); - break; - - case i_TRAP: -#ifdef DISABLE_I_TRAP - failure; -#endif - isjump; - mayfail; - start_brace(); - comprintf(" int trapno = srcreg + 32;\n"); - gen_set_fault_pc(); - make_sr(); - comprintf(" compemu_enter_super(sr);\n"); - comprintf(" compemu_exc_make_frame(0, sr, ret, trapno, scratchie);\n"); - comprintf(" forget_about(ret);\n"); - /* m68k_setpc (get_long (regs.vbr + 4*nr)); */ - start_brace(); - comprintf(" int srca = scratchie++;\n"); - comprintf(" mov_l_rm(srca, (uintptr)®s.vbr);\n"); - comprintf(" mov_l_brR(srca, srca, MEMBaseDiff + trapno * 4); mid_bswap_32(srca);\n"); - comprintf(" mov_l_mr(JITPTR ®s.pc, srca);\n"); - comprintf(" get_n_addr_jmp(srca, PC_P, scratchie);\n"); - comprintf(" mov_l_mr(JITPTR ®s.pc_oldp, PC_P);\n"); - gen_update_next_handler(); - disasm_this_inst(); /* for debugging only */ - /* - * this currently deactivates this feature, since it does not work yet - */ - failure; - break; - - case i_MVR2USP: - isjump; - failure; - break; - - case i_MVUSP2R: - isjump; - failure; - break; - - case i_RESET: - isjump; - failure; - break; - - case i_NOP: - break; - - case i_STOP: - isjump; - failure; - break; - - case i_RTE: - isjump; - failure; - break; - - case i_RTD: -#ifdef DISABLE_I_RTD - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "offs", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - /* offs is constant */ - comprintf("\tadd_l_ri(offs,4);\n"); - start_brace(); - comprintf("\tint newad=scratchie++;\n" - "\treadlong(SP_REG,newad,scratchie);\n" - "\tmov_l_mr(JITPTR ®s.pc,newad);\n" - "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" - "\tmov_l_mr(JITPTR ®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n" - "\tadd_l(SP_REG,offs);\n"); - gen_update_next_handler(); - isjump; - break; - - case i_LINK: -#ifdef DISABLE_I_LINK - failure; -#endif - comprintf("\tif (srcreg == 7) {\n" - "\t\tm68k_pc_offset = m68k_pc_offset_thisinst;\n" - "\t\tFAIL(1);\n" - "\t\t" RETURN "\n" - "\t}\n"); - genamode(curi->smode, "srcreg", sz_long, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "offs", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - comprintf("\tsub_l_ri(SP_REG,4);\n" - "\twritelong_clobber(SP_REG,src,scratchie);\n" - "\tmov_l_rr(src,SP_REG);\n"); - if (curi->size == sz_word) - comprintf("\tsign_extend_16_rr(offs,offs);\n"); - comprintf("\tadd_l(SP_REG,offs);\n"); - genastore("src", curi->smode, "srcreg", sz_long, "src"); - break; - - case i_UNLK: -#ifdef DISABLE_I_UNLK - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - comprintf("\tmov_l_rr(SP_REG,src);\n" - "\treadlong(SP_REG,src,scratchie);\n" - "\tadd_l_ri(SP_REG,4);\n"); - genastore("src", curi->smode, "srcreg", curi->size, "src"); - break; - - case i_RTS: -#ifdef DISABLE_I_RTS - failure; -#endif - comprintf("\tint newad=scratchie++;\n" - "\treadlong(SP_REG,newad,scratchie);\n" - "\tmov_l_mr(JITPTR ®s.pc,newad);\n" - "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" - "\tmov_l_mr(JITPTR ®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n" - "\tlea_l_brr(SP_REG,SP_REG,4);\n"); - gen_update_next_handler(); - isjump; - break; - - case i_TRAPV: - isjump; - failure; - break; - - case i_RTR: - isjump; - failure; - break; - - case i_JSR: -#ifdef DISABLE_I_JSR - failure; -#endif - isjump; - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_NO_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tuae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset);\n"); - comprintf("\tint ret=scratchie++;\n" - "\tmov_l_ri(ret,retadd);\n" - "\tsub_l_ri(SP_REG,4);\n" - "\twritelong_clobber(SP_REG,ret,scratchie);\n"); - comprintf("\tmov_l_mr(JITPTR ®s.pc,srca);\n" - "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" - "\tmov_l_mr(JITPTR ®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n"); - gen_update_next_handler(); - break; - - case i_JMP: -#ifdef DISABLE_I_JMP - failure; -#endif - isjump; - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_NO_FETCH, GENA_MOVEM_DO_INC); - comprintf("\tmov_l_mr(JITPTR ®s.pc,srca);\n" - "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" - "\tmov_l_mr(JITPTR ®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n"); - gen_update_next_handler(); - break; - - case i_BSR: -#ifdef DISABLE_I_BSR - failure; -#endif - is_const_jump; - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - if (curi->size == sz_long) { - /* Sign-extend 32-bit displacement to pointer width for backward branches. - comp_get_ilong() returns uae_u32 which zero-extends to uintptr on 64-bit; - a negative displacement like 0xFFFFF000 must become 0xFFFFFFFFFFFFF000. - Uses get_const/mov_l_ri (accessible from generated code) instead of - isconst/live (static in compemu_support, not visible here). */ - comprintf("\tmov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src));\n"); - } - start_brace(); - comprintf("\tuae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset);\n"); - comprintf("\tint ret=scratchie++;\n" - "\tmov_l_ri(ret,retadd);\n" - "\tsub_l_ri(SP_REG,4);\n" - "\twritelong_clobber(SP_REG,ret,scratchie);\n"); - comprintf("\tadd_l_ri(src,m68k_pc_offset_thisinst+2);\n"); - comprintf("\tm68k_pc_offset=0;\n"); - comprintf("\tadd_l(PC_P,src);\n"); - - comprintf("\tcomp_pc_p=(uae_u8*)(uintptr)get_const(PC_P);\n"); - gen_update_next_handler(); - break; - - case i_Bcc: -#ifdef DISABLE_I_BCC - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - /* That source is an immediate, so we can clobber it with abandon */ - switch (curi->size) { - case sz_byte: comprintf("\tsign_extend_8_rr(src,src);\n"); break; - case sz_word: comprintf("\tsign_extend_16_rr(src,src);\n"); break; - case sz_long: - /* Sign-extend 32-bit displacement to pointer width for backward branches. - Same fix as BSR.L above. */ - comprintf("\tmov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src));\n"); - break; - } - comprintf("\tsub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2);\n"); - /* Leave the following as "add" --- it will allow it to be optimized - away due to src being a constant ;-) */ - comprintf("\tadd_l_ri(src,JITPTR comp_pc_p);\n"); - comprintf("\tmov_l_ri(PC_P,JITPTR comp_pc_p);\n"); - /* Now they are both constant. Might as well fold in m68k_pc_offset */ - comprintf("\tadd_l_ri(src,m68k_pc_offset);\n"); - comprintf("\tadd_l_ri(PC_P,m68k_pc_offset);\n"); - comprintf("\tm68k_pc_offset=0;\n"); - - if (curi->cc >= 2) { - comprintf("\tuintptr v1=get_const(PC_P);\n" - "\tuintptr v2=get_const(src);\n" - "\tregister_branch(v1,v2,%d);\n", - cond_codes[curi->cc]); - comprintf("\tmake_flags_live();\n"); /* Load the flags */ - isjump; - } else { - is_const_jump; - } - - switch (curi->cc) { - case 0: /* Unconditional jump */ - comprintf("\tmov_l_rr(PC_P,src);\n"); - comprintf("\tcomp_pc_p=(uae_u8*)(uintptr)get_const(PC_P);\n"); - break; - case 1: break; /* This is silly! */ - case 8: failure; break; /* Work out details! FIXME */ - case 9: failure; break; /* Not critical, though! */ - - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - break; - default: assert(0); - } - break; - - case i_LEA: -#ifdef DISABLE_I_LEA - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_NO_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); - genastore("srca", curi->dmode, "dstreg", curi->size, "dst"); - break; - - case i_PEA: -#ifdef DISABLE_I_PEA - failure; -#endif - if (table68k[opcode].smode == Areg || - table68k[opcode].smode == Aind || - table68k[opcode].smode == Aipi || - table68k[opcode].smode == Apdi || - table68k[opcode].smode == Ad16 || - table68k[opcode].smode == Ad8r) - comprintf("if (srcreg==7) dodgy=1;\n"); - - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_NO_FETCH, GENA_MOVEM_DO_INC); - genamode(Apdi, "7", sz_long, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); - genastore("srca", Apdi, "7", sz_long, "dst"); - break; - - case i_DBcc: -#ifdef DISABLE_I_DBCC - failure; -#endif - isjump; - uses_cmov; - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "offs", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - - /* That offs is an immediate, so we can clobber it with abandon */ - switch (curi->size) { - case sz_word: comprintf("\tsign_extend_16_rr(offs,offs);\n"); break; - default: assert(0); /* Seems this only comes in word flavour */ - } - comprintf("\tsub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2);\n"); - comprintf("\tadd_l_ri(offs,JITPTR comp_pc_p);\n"); /* New PC, - once the - offset_68k is - * also added */ - /* Let's fold in the m68k_pc_offset at this point */ - comprintf("\tadd_l_ri(offs,m68k_pc_offset);\n"); - comprintf("\tadd_l_ri(PC_P,m68k_pc_offset);\n"); - comprintf("\tm68k_pc_offset=0;\n"); - - start_brace(); - comprintf("\tint nsrc=scratchie++;\n"); - - if (curi->cc >= 2) { - comprintf("\tmake_flags_live();\n"); /* Load the flags */ - } - - assert(curi->size == sz_word); - - switch (curi->cc) { - case 0: /* This is an elaborate nop? */ - break; - case 1: - comprintf("\tstart_needflags();\n"); - comprintf("\tsub_w_ri(src,1);\n"); - comprintf("\tend_needflags();\n"); - start_brace(); - comprintf("\tuintptr v2;\n" - "\tuintptr v1=get_const(PC_P);\n"); - comprintf("\tv2=get_const(offs);\n" - "\tregister_branch(v1,v2,%d);\n", NATIVE_CC_CC); - break; - - case 8: failure; break; /* Work out details! FIXME */ - case 9: failure; break; /* Not critical, though! */ - - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - comprintf("\tmov_l_rr(nsrc,src);\n"); - comprintf("\tlea_l_brr(scratchie,src,(uae_s32)-1);\n" - "\tmov_w_rr(src,scratchie);\n"); - comprintf("\tcmov_l_rr(offs,PC_P,%d);\n", - cond_codes[curi->cc]); - comprintf("\tcmov_l_rr(src,nsrc,%d);\n", - cond_codes[curi->cc]); - /* OK, now for cc=true, we have src==nsrc and offs==PC_P, - so whether we move them around doesn't matter. However, - if cc=false, we have offs==jump_pc, and src==nsrc-1 */ - - comprintf("\tstart_needflags();\n"); - comprintf("\ttest_w_rr(nsrc,nsrc);\n"); - comprintf("\tend_needflags();\n"); - comprintf("\tcmov_l_rr(PC_P,offs,%d);\n", NATIVE_CC_NE); - break; - default: assert(0); - } - genastore("src", curi->smode, "srcreg", curi->size, "src"); - gen_update_next_handler(); - break; - - case i_Scc: -#ifdef DISABLE_I_SCC - failure; -#endif - genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); - start_brace(); - comprintf("\tint val = scratchie++;\n"); - - /* We set val to 0 if we really should use 255, and to 1 for real 0 */ - switch (curi->cc) { - case 0: /* Unconditional set */ - comprintf("\tmov_l_ri(val,0);\n"); - break; - case 1: - /* Unconditional not-set */ - comprintf("\tmov_l_ri(val,1);\n"); - break; - case 8: failure; break; /* Work out details! FIXME */ - case 9: failure; break; /* Not critical, though! */ - - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - comprintf("\tmake_flags_live();\n"); /* Load the flags */ - /* All condition codes can be inverted by changing the LSB */ - comprintf("\tsetcc(val,%d);\n", - cond_codes[curi->cc] ^ 1); break; - default: assert(0); - } - comprintf("\tsub_b_ri(val,1);\n"); - genastore("val", curi->smode, "srcreg", curi->size, "src"); - break; - - case i_DIVU: - isjump; - failure; - break; - - case i_DIVS: - isjump; - failure; - break; - - case i_MULU: -#ifdef DISABLE_I_MULU - failure; -#endif - comprintf("\tdont_care_flags();\n"); - genamode(curi->smode, "srcreg", sz_word, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", sz_word, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - /* To do 16x16 unsigned multiplication, we actually use - 32x32 signed, and zero-extend the registers first. - That solves the problem of MUL needing dedicated registers - on the x86 */ - comprintf("\tzero_extend_16_rr(scratchie,src);\n" - "\tzero_extend_16_rr(dst,dst);\n" - "\timul_32_32(dst,scratchie);\n"); - genflags(flag_logical, sz_long, "dst", "", ""); - genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; - - case i_MULS: -#ifdef DISABLE_I_MULS - failure; -#endif - comprintf("\tdont_care_flags();\n"); - genamode(curi->smode, "srcreg", sz_word, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", sz_word, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - comprintf("\tsign_extend_16_rr(scratchie,src);\n" - "\tsign_extend_16_rr(dst,dst);\n" - "\timul_32_32(dst,scratchie);\n"); - genflags(flag_logical, sz_long, "dst", "", ""); - genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; - - case i_CHK: - isjump; - failure; - break; - - case i_CHK2: - isjump; - failure; - break; - - case i_ASR: -#ifdef DISABLE_I_ASR - failure; -#endif - mayfail; - if (curi->smode == Dreg) { - comprintf( - " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " " RETURN "\n" - " }\n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - - genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - - start_brace(); - if (!noflags) - comprintf("\tstart_needflags();\n"); - if (curi->smode != immi) { - uses_cmov; - start_brace(); - comprintf("\tint cdata = scratchie++;\n"); - comprintf("\tint tmpcnt = scratchie++;\n"); - comprintf("\tint setval = scratchie++;\n"); - if (!noflags) { - comprintf("\tint odata = scratchie++;\n"); - } - comprintf("\tmov_l_ri(cdata, 0);\n"); - comprintf("\tmov_l_ri(setval, 0xffffffff);\n"); - // if high bit = 0: setval = 0x00000000, else setval = 0xffffffff - comprintf("\ttest_l_ri(data, 0x%08x);\n", curi->size == sz_byte ? 0x80 : (curi->size == sz_word ? 0x8000 : 0x80000000)); - comprintf("\tcmov_l_rr(setval, cdata, NATIVE_CC_EQ);\n"); - comprintf("\tmov_l_rr(cdata, setval);\n"); - if (!noflags) { - // setval -> odata - comprintf("\tmov_l_rr(odata, setval);\n"); - } - comprintf("\tmov_l_rr(tmpcnt, cnt);\n"); - comprintf("\tand_l_ri(tmpcnt, 63);\n"); - if (!noflags) { - // shift == 0: tmpcnt (0) -> odata (C is always zero) - comprintf("\tcmov_l_rr(odata, tmpcnt, NATIVE_CC_EQ);\n"); - } - - switch (curi->size) { - case sz_byte: - comprintf("\tcmp_b_ri(tmpcnt, 0x08);\n"); - // shift > 8: setval -> cdata - comprintf("\tcmov_l_rr(cdata, setval, NATIVE_CC_HI);\n"); - // shift <= 8: data -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshra_b_rr(cdata, tmpcnt);\n"); - break; - case sz_word: - comprintf("\tcmp_b_ri(tmpcnt, 0x10);\n"); - // shift > 16: setval -> cdata - comprintf("\tcmov_l_rr(cdata, setval, NATIVE_CC_HI);\n"); - // shift <= 16: data -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshra_w_rr(cdata, tmpcnt);\n"); - break; - case sz_long: - comprintf("\tcmp_b_ri(tmpcnt, 0x20);\n"); - // shift > 32: setval -> cdata - comprintf("\tcmov_l_rr(cdata, setval, NATIVE_CC_HI);\n"); - // shift == 32? 0 -> cdata (x86 masks count by 31, 680x0 uses mask 63) - comprintf("\tcmov_l_rr(data, setval, NATIVE_CC_EQ);\n"); - // shift <= 32: data -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshra_l_rr(cdata, tmpcnt);\n"); - break; - default: assert(0); - } - /* Result of shift is now in data. */ - } else { - switch (curi->size) { - case sz_byte: comprintf("\tshra_b_ri(data,srcreg);\n"); break; - case sz_word: comprintf("\tshra_w_ri(data,srcreg);\n"); break; - case sz_long: comprintf("\tshra_l_ri(data,srcreg);\n"); break; - default: assert(0); - } - } - /* And create the flags */ - if (!noflags) { - comprintf("\tlive_flags();\n"); - comprintf("\tend_needflags();\n"); - if (curi->smode != immi) { - comprintf("\tsetcc_for_cntzero(tmpcnt, cdata, odata, 0, %d, 0);\n", curi->size); - } else { - comprintf("\tduplicate_carry();\n"); - } - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - if (curi->smode != immi) { - switch (curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data, cdata);\n"); break; - case sz_word: comprintf("\tmov_w_rr(data, cdata);\n"); break; - case sz_long: comprintf("\tmov_l_rr(data, cdata);\n"); break; - default: assert(0); - } - } - - genastore("data", curi->dmode, "dstreg", curi->size, "data"); - break; - - case i_ASL: -#ifdef DISABLE_I_ASL - failure; -#endif - mayfail; - if (curi->smode == Dreg) { - comprintf( - " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " " RETURN "\n" - " }\n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - /* Except for the handling of the V flag, this is identical to - LSL. The handling of V is, uhm, unpleasant, so if it's needed, - let the normal emulation handle it. Shoulders of giants kinda - thing ;-) */ - comprintf( - " if (needed_flags & FLAG_V) {\n" - " FAIL(1);\n" - " " RETURN "\n" - " }\n"); - - genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - - start_brace(); - if (!noflags) - comprintf("\tstart_needflags();\n"); - if (curi->smode != immi) { - uses_cmov; - start_brace(); - comprintf("\tint cdata = scratchie++;\n"); - comprintf("\tint tmpcnt = scratchie++;\n"); - if (!noflags) { - comprintf("\tint odata = scratchie++;\n"); - comprintf("\tmov_l_rr(odata, data);\n"); - } - comprintf("\tmov_l_ri(cdata, 0);\n"); - comprintf("\tmov_l_rr(tmpcnt, cnt);\n"); - comprintf("\tand_l_ri(tmpcnt, 63);\n"); - if (!noflags) { - // shift == 0? cdata (0) -> odata (C is always zero) - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_EQ);\n"); - } - - switch (curi->size) { - case sz_byte: - // shift > 8? 0 -> odata (C is always zero) - comprintf("\tcmp_b_ri(tmpcnt, 0x08);\n"); - if (!noflags) { - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); - } - // shift <= 8? cdata -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshll_b_rr(cdata, tmpcnt);\n"); - break; - case sz_word: - // shift > 16? 0 -> odata (C is always zero) - comprintf("\tcmp_b_ri(tmpcnt, 0x10);\n"); - if (!noflags) { - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); - } - // shift <= 16? cdata -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshll_w_rr(cdata, tmpcnt);\n"); - break; - case sz_long: - // shift > 32? 0 -> odata (C is always zero) - comprintf("\tcmp_b_ri(tmpcnt, 0x20);\n"); - if (!noflags) { - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); - } - // shift == 32? 0 -> cdata (x86 masks count by 31, 680x0 uses mask 63) - comprintf("\tcmov_l_rr(data, cdata, NATIVE_CC_EQ);\n"); - // shift <= 32? cdata -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshll_l_rr(cdata, tmpcnt);\n"); - break; - default: assert(0); - } - /* Result of shift is now in data. */ - } else { - switch (curi->size) { - case sz_byte: comprintf("\tshll_b_ri(data,srcreg);\n"); break; - case sz_word: comprintf("\tshll_w_ri(data,srcreg);\n"); break; - case sz_long: comprintf("\tshll_l_ri(data,srcreg);\n"); break; - default: assert(0); - } - } - /* And create the flags */ - if (!noflags) { - comprintf("\tlive_flags();\n"); - comprintf("\tend_needflags();\n"); - if (curi->smode != immi) { - comprintf("\tsetcc_for_cntzero(tmpcnt, cdata, odata, 0, %d, 1);\n", curi->size); - } else { - comprintf("\tclear_overflow();\n"); - comprintf("\tduplicate_carry();\n"); - } - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - if (curi->smode != immi) { - switch (curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data, cdata);\n"); break; - case sz_word: comprintf("\tmov_w_rr(data, cdata);\n"); break; - case sz_long: comprintf("\tmov_l_rr(data, cdata);\n"); break; - default: assert(0); - } - } - genastore("data", curi->dmode, "dstreg", curi->size, "data"); - break; - - case i_LSR: -#ifdef DISABLE_I_LSR - failure; -#endif - mayfail; - if (curi->smode == Dreg) { - comprintf( - " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " " RETURN "\n" - " }\n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - - genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - - start_brace(); - if (!noflags) - comprintf("\tstart_needflags();\n"); - if (curi->smode != immi) { - uses_cmov; - start_brace(); - comprintf("\tint cdata = scratchie++;\n"); - comprintf("\tint tmpcnt = scratchie++;\n"); - if (!noflags) { - comprintf("\tint odata = scratchie++;\n"); - comprintf("\tmov_l_rr(odata, data);\n"); - } - comprintf("\tmov_l_ri(cdata, 0);\n"); - comprintf("\tmov_l_rr(tmpcnt, cnt);\n"); - comprintf("\tand_l_ri(tmpcnt, 63);\n"); - if (!noflags) { - // shift == 0? cdata (0) -> odata (C is always zero) - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_EQ);\n"); - } - - switch (curi->size) { - case sz_byte: - // shift > 8? 0 -> odata (C is always zero) - comprintf("\tcmp_b_ri(tmpcnt, 0x08);\n"); - if (!noflags) { - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); - } - // shift <= 8? cdata -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshrl_b_rr(cdata, tmpcnt);\n"); - break; - case sz_word: - // shift > 16? 0 -> odata (C is always zero) - comprintf("\tcmp_b_ri(tmpcnt, 0x10);\n"); - if (!noflags) { - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); - } - // shift <= 16? cdata -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshrl_w_rr(cdata, tmpcnt);\n"); - break; - case sz_long: - // shift > 32? 0 -> odata (C is always zero) - comprintf("\tcmp_b_ri(tmpcnt, 0x20);\n"); - if (!noflags) { - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); - } - // shift == 32? 0 -> cdata (x86 masks count by 31, 680x0 uses mask 63) - comprintf("\tcmov_l_rr(data, cdata, NATIVE_CC_EQ);\n"); - // shift <= 32? cdata -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshrl_l_rr(cdata, tmpcnt);\n"); - break; - default: assert(0); - } - /* Result of shift is now in data. */ - } else { - switch (curi->size) { - case sz_byte: comprintf("\tshrl_b_ri(data,srcreg);\n"); break; - case sz_word: comprintf("\tshrl_w_ri(data,srcreg);\n"); break; - case sz_long: comprintf("\tshrl_l_ri(data,srcreg);\n"); break; - default: assert(0); - } - } - /* And create the flags */ - if (!noflags) { - comprintf("\tlive_flags();\n"); - comprintf("\tend_needflags();\n"); - if (curi->smode != immi) { - comprintf("\tsetcc_for_cntzero(tmpcnt, cdata, odata, %d, %d, 1);\n", curi->size == sz_byte ? 7 : curi->size == sz_word ? 15 : 31, curi->size); - } else { - comprintf("\tduplicate_carry();\n"); - } - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - if (curi->smode != immi) { - switch (curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data, cdata);\n"); break; - case sz_word: comprintf("\tmov_w_rr(data, cdata);\n"); break; - case sz_long: comprintf("\tmov_l_rr(data, cdata);\n"); break; - default: assert(0); - } - } - genastore("data", curi->dmode, "dstreg", curi->size, "data"); - break; - - case i_LSL: -#ifdef DISABLE_I_LSL - failure; -#endif - mayfail; - if (curi->smode == Dreg) { - comprintf( - " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " " RETURN "\n" - " }\n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - - genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - - start_brace(); - if (!noflags) - comprintf("\tstart_needflags();\n"); - if (curi->smode != immi) { - uses_cmov; - start_brace(); - comprintf("\tint cdata = scratchie++;\n"); - comprintf("\tint tmpcnt = scratchie++;\n"); - if (!noflags) { - comprintf("\tint odata = scratchie++;\n"); - comprintf("\tmov_l_rr(odata, data);\n"); - } - comprintf("\tmov_l_ri(cdata, 0);\n"); - comprintf("\tmov_l_rr(tmpcnt, cnt);\n"); - comprintf("\tand_l_ri(tmpcnt, 63);\n"); - if (!noflags) { - // shift == 0? cdata (0) -> odata (C is always zero) - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_EQ);\n"); - } - - switch (curi->size) { - case sz_byte: - // shift > 8? 0 -> odata (C is always zero) - comprintf("\tcmp_b_ri(tmpcnt, 0x08);\n"); - if (!noflags) { - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); - } - // shift <= 8? cdata -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshll_b_rr(cdata, tmpcnt);\n"); - break; - case sz_word: - // shift > 16? 0 -> odata (C is always zero) - comprintf("\tcmp_b_ri(tmpcnt, 0x10);\n"); - if (!noflags) { - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); - } - // shift <= 16? cdata -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshll_w_rr(cdata, tmpcnt);\n"); - break; - case sz_long: - // shift > 32? 0 -> odata (C is always zero) - comprintf("\tcmp_b_ri(tmpcnt, 0x20);\n"); - if (!noflags) { - comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); - } - // shift == 32? 0 -> cdata (x86 masks count by 31, 680x0 uses mask 63) - comprintf("\tcmov_l_rr(data, cdata, NATIVE_CC_EQ);\n"); - // shift <= 32? cdata -> cdata ("normal" shift) - comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); - comprintf("\tshll_l_rr(cdata, tmpcnt);\n"); - break; - default: assert(0); - } - /* Result of shift is now in data. */ - } else { - switch (curi->size) { - case sz_byte: comprintf("\tshll_b_ri(data,srcreg);\n"); break; - case sz_word: comprintf("\tshll_w_ri(data,srcreg);\n"); break; - case sz_long: comprintf("\tshll_l_ri(data,srcreg);\n"); break; - default: assert(0); - } - } - /* And create the flags */ - if (!noflags) { - comprintf("\tlive_flags();\n"); - comprintf("\tend_needflags();\n"); - if (curi->smode != immi) { - comprintf("\tsetcc_for_cntzero(tmpcnt, cdata, odata, 0, %d, 1);\n", curi->size); - } else { - comprintf("\tclear_overflow();\n"); - comprintf("\tduplicate_carry();\n"); - } - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - if (curi->smode != immi) { - switch (curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data, cdata);\n"); break; - case sz_word: comprintf("\tmov_w_rr(data, cdata);\n"); break; - case sz_long: comprintf("\tmov_l_rr(data, cdata);\n"); break; - default: assert(0); - } - } - genastore("data", curi->dmode, "dstreg", curi->size, "data"); - break; - - case i_ROL: -#ifdef DISABLE_I_ROL - failure; -#endif - mayfail; - if (curi->smode == Dreg) { - comprintf( - " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " " RETURN "\n" - " }\n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - - switch (curi->size) { - case sz_long: comprintf("\trol_l_rr(data,cnt);\n"); break; - case sz_word: comprintf("\trol_w_rr(data,cnt);\n"); break; - case sz_byte: comprintf("\trol_b_rr(data,cnt);\n"); break; - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - - comprintf("\tint cdata = scratchie++;\n"); - comprintf("\tint zero = scratchie++;\n"); - comprintf("\tint tmpcnt = scratchie++;\n"); - comprintf("\tmov_l_rr(cdata,data);\n"); - comprintf("\tmov_l_rr(tmpcnt,cnt);\n"); - comprintf("\tmov_l_ri(zero,0);\n"); - // if shift count is zero: C is always cleared - comprintf("\tand_l_ri(tmpcnt,63);\n"); - comprintf("\tcmov_l_rr(cdata,zero,NATIVE_CC_EQ);\n"); - - /* - * x86 ROL instruction does not set ZF/SF, so we need extra checks here - */ - comprintf("\tif (needed_flags & FLAG_ZNV) {\n"); - switch (curi->size) { - case sz_byte: comprintf("\ttest_b_rr(data,data);\n"); break; - case sz_word: comprintf("\ttest_w_rr(data,data);\n"); break; - case sz_long: comprintf("\ttest_l_rr(data,data);\n"); break; - } - comprintf("}\n"); - comprintf("\tbt_l_ri(cdata,0x00);\n"); /* Set C */ - comprintf("\tlive_flags();\n"); - comprintf("\tend_needflags();\n"); - } - genastore("data", curi->dmode, "dstreg", curi->size, "data"); - break; - - case i_ROR: -#ifdef DISABLE_I_ROR - failure; -#endif - mayfail; - if (curi->smode == Dreg) { - comprintf( - " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " " RETURN "\n" - " }\n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - start_brace(); - - switch (curi->size) { - case sz_long: comprintf("\tror_l_rr(data,cnt);\n"); break; - case sz_word: comprintf("\tror_w_rr(data,cnt);\n"); break; - case sz_byte: comprintf("\tror_b_rr(data,cnt);\n"); break; - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - - comprintf("\tint cdata = scratchie++;\n"); - comprintf("\tint zero = scratchie++;\n"); - comprintf("\tint tmpcnt = scratchie++;\n"); - comprintf("\tmov_l_rr(cdata,data);\n"); - comprintf("\tmov_l_rr(tmpcnt,cnt);\n"); - comprintf("\tmov_l_ri(zero,0);\n"); - // if shift count is zero: C is always cleared - comprintf("\tand_l_ri(tmpcnt,63);\n"); - comprintf("\tcmov_l_rr(cdata,zero,NATIVE_CC_EQ);\n"); - /* - * x86 ROR instruction does not set ZF/SF, so we need extra checks here - */ - comprintf("\tif (needed_flags & FLAG_ZNV) {\n"); - switch (curi->size) { - case sz_byte: comprintf("\ttest_b_rr(data,data);\n"); break; - case sz_word: comprintf("\ttest_w_rr(data,data);\n"); break; - case sz_long: comprintf("\ttest_l_rr(data,data);\n"); break; - } - comprintf("}\n"); - switch (curi->size) { - case sz_byte: comprintf("\tbt_l_ri(cdata,0x07);\n"); break; - case sz_word: comprintf("\tbt_l_ri(cdata,0x0f);\n"); break; - case sz_long: comprintf("\tbt_l_ri(cdata,0x1f);\n"); break; - } - comprintf("\tlive_flags();\n"); - comprintf("\tend_needflags();\n"); - } - genastore("data", curi->dmode, "dstreg", curi->size, "data"); - break; - - case i_ROXL: - failure; - break; - - case i_ROXR: - failure; - break; - - case i_ASRW: - failure; - break; - - case i_ASLW: - failure; - break; - - case i_LSRW: - failure; - break; - - case i_LSLW: - failure; - break; - - case i_ROLW: - failure; - break; - - case i_RORW: - failure; - break; - - case i_ROXLW: - failure; - break; - - case i_ROXRW: - failure; - break; - - case i_MOVEC2: - isjump; - failure; - break; - - case i_MOVE2C: - isjump; - failure; - break; - - case i_CAS: - failure; - break; - - case i_CAS2: - failure; - break; - - case i_MOVES: /* ignore DFC and SFC because we have no MMU */ - isjump; - failure; - break; - - case i_BKPT: /* only needed for hardware emulators */ - isjump; - failure; - break; - - case i_CALLM: /* not present in 68030 */ - isjump; - failure; - break; - - case i_RTM: /* not present in 68030 */ - isjump; - failure; - break; - - case i_TRAPcc: - isjump; - failure; - break; - - case i_DIVL: - isjump; - failure; - break; - - case i_MULL: -#ifdef DISABLE_I_MULL - failure; -#endif - if (!noflags) { - failure; - break; - } - comprintf("\tuae_u16 extra=%s;\n", gen_nextiword()); - comprintf("\tint r2=(extra>>12)&7;\n" - "\tint tmp=scratchie++;\n"); - - genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); - /* The two operands are in dst and r2 */ - comprintf("\tif (extra&0x0400) {\n" /* Need full 64 bit result */ - "\tint r3=(extra&7);\n" - "\tmov_l_rr(r3,dst);\n"); /* operands now in r3 and r2 */ - comprintf("\tif (extra&0x0800) { \n" /* signed */ - "\t\timul_64_32(r2,r3);\n" - "\t} else { \n" - "\t\tmul_64_32(r2,r3);\n" - "\t} \n"); - /* The result is in r2/tmp, with r2 holding the lower 32 bits */ - comprintf("\t} else {\n"); /* Only want 32 bit result */ - /* operands in dst and r2, result foes into r2 */ - /* shouldn't matter whether it's signed or unsigned?!? */ - comprintf("\timul_32_32(r2,dst);\n" - "\t}\n"); - break; - - case i_BFTST: - case i_BFEXTU: - case i_BFCHG: - case i_BFEXTS: - case i_BFCLR: - case i_BFFFO: - case i_BFSET: - case i_BFINS: - failure; - break; - - case i_PACK: - failure; - break; - - case i_UNPK: - failure; - break; - - case i_TAS: - failure; - break; - - case i_FPP: -#ifdef DISABLE_I_FPP - failure; -#endif - uses_fpu; - mayfail; - comprintf("#ifdef USE_JIT_FPU\n"); - comprintf("\tuae_u16 extra=%s;\n", gen_nextiword()); - swap_opcode(); - comprintf("\tcomp_fpp_opp(opcode,extra);\n"); - comprintf("#else\n"); - comprintf("\tfailure = 1;\n"); - comprintf("#endif\n"); - break; - - case i_FBcc: -#ifdef DISABLE_I_FBCC - failure; -#endif - uses_fpu; - isjump; - uses_cmov; - mayfail; - comprintf("#ifdef USE_JIT_FPU\n"); - swap_opcode(); - comprintf("\tcomp_fbcc_opp(opcode);\n"); - comprintf("#else\n"); - comprintf("\tfailure = 1;\n"); - comprintf("#endif\n"); - break; - - case i_FDBcc: - uses_fpu; - isjump; - failure; - break; - - case i_FScc: -#ifdef DISABLE_I_FSCC - failure; -#endif - uses_fpu; - mayfail; - uses_cmov; - comprintf("#ifdef USE_JIT_FPU\n"); - comprintf("\tuae_u16 extra=%s;\n", gen_nextiword()); - swap_opcode(); - comprintf("\tcomp_fscc_opp(opcode,extra);\n"); - comprintf("#else\n"); - comprintf("\tfailure = 1;\n"); - comprintf("#endif\n"); - break; - - case i_FTRAPcc: - uses_fpu; - isjump; - failure; - break; - - case i_FSAVE: - uses_fpu; - failure; - break; - - case i_FRESTORE: - uses_fpu; - failure; - break; - - case i_CINVL: - case i_CINVP: - case i_CINVA: - isjump; /* Not really, but it's probably a good idea to stop - translating at this point */ - failure; - comprintf("\tflush_icache();\n"); /* Differentiate a bit more? */ - break; - - case i_CPUSHL: - case i_CPUSHP: - case i_CPUSHA: - isjump; /* Not really, but it's probably a good idea to stop - translating at this point */ - failure; - break; - - case i_MOVE16: -#ifdef DISABLE_I_MOVE16 - failure; -#endif - genmov16(opcode, curi); - break; - -#ifdef UAE - case i_MMUOP030: - case i_PFLUSHN: - case i_PFLUSH: - case i_PFLUSHAN: - case i_PFLUSHA: - case i_PLPAR: - case i_PLPAW: - case i_PTESTR: - case i_PTESTW: - case i_LPSTOP: - case i_PULSE: - case i_HALT: - isjump; - failure; - break; -#endif - -#ifdef WINUAE_ARANYM - case i_EMULOP_RETURN: - isjump; - failure; - break; - - case i_EMULOP: - failure; - break; - - case i_NATFEAT_ID: - case i_NATFEAT_CALL: - failure; - break; - - case i_MMUOP: - isjump; - failure; - break; -#endif - - default: - assert(0); - break; - } - comprintf("%s", endstr); - finish_braces(); - sync_m68k_pc(); - if (global_mayfail) { - comprintf("if (failure) {\n"); - comprintf("m68k_pc_offset = m68k_pc_offset_thisinst;\n"); - comprintf("}\n"); - } - return global_failure; -} - -static void -generate_includes(FILE *f) -{ - fprintf(f, "#include \"sysconfig.h\"\n"); - fprintf(f, "#if defined(JIT)\n"); - fprintf(f, "#include \"sysdeps.h\"\n"); -#ifdef UAE - fprintf(f, "#include \"options.h\"\n"); - fprintf(f, "#include \"uae/memory.h\"\n"); -#else - fprintf(f, "#include \"m68k.h\"\n"); - fprintf(f, "#include \"memory-uae.h\"\n"); -#endif - fprintf(f, "#include \"readcpu.h\"\n"); - fprintf(f, "#include \"newcpu.h\"\n"); - fprintf(f, "#include \"comptbl.h\"\n"); - fprintf(f, "#include \"debug.h\"\n"); -} - -static int postfix; - - -static char *decodeEA(amodes mode, wordsizes size) -{ - static char buffer[80]; - - buffer[0] = 0; - switch (mode) { - case Dreg: - strcpy(buffer, "Dn"); - break; - case Areg: - strcpy(buffer, "An"); - break; - case Aind: - strcpy(buffer, "(An)"); - break; - case Aipi: - strcpy(buffer, "(An)+"); - break; - case Apdi: - strcpy(buffer, "-(An)"); - break; - case Ad16: - strcpy(buffer, "(d16,An)"); - break; - case Ad8r: - strcpy(buffer, "(d8,An,Xn)"); - break; - case PC16: - strcpy(buffer, "(d16,PC)"); - break; - case PC8r: - strcpy(buffer, "(d8,PC,Xn)"); - break; - case absw: - strcpy(buffer, "(xxx).W"); - break; - case absl: - strcpy(buffer, "(xxx).L"); - break; - case imm: - switch (size) { - case sz_byte: - strcpy(buffer, "#.B"); - break; - case sz_word: - strcpy(buffer, "#.W"); - break; - case sz_long: - strcpy(buffer, "#.L"); - break; - default: - break; - } - break; - case imm0: - strcpy(buffer, "#.B"); - break; - case imm1: - strcpy(buffer, "#.W"); - break; - case imm2: - strcpy(buffer, "#.L"); - break; - case immi: - strcpy(buffer, "#"); - break; - - default: - break; - } - return buffer; -} - -static char *outopcode(const char *name, int opcode) -{ - static char out[100]; - struct instr *ins; - - ins = &table68k[opcode]; - strcpy(out, name); - if (ins->smode == immi) - strcat(out, "Q"); - if (ins->size == sz_byte) - strcat(out, ".B"); - if (ins->size == sz_word) - strcat(out, ".W"); - if (ins->size == sz_long) - strcat(out, ".L"); - strcat(out, " "); - if (ins->suse) - strcat(out, decodeEA(ins->smode, ins->size)); - if (ins->duse) { - if (ins->suse) strcat(out, ","); - strcat(out, decodeEA(ins->dmode, ins->size)); - } - return out; -} - - -static void -generate_one_opcode(int rp, int noflags) -{ - int i; - uae_u16 smsk, dmsk; - unsigned int opcode = opcode_map[rp]; - int aborted = 0; - int have_srcreg = 0; - int have_dstreg = 0; - const char *name; - const char *tbl = noflags ? "nf" : "ff"; - - if (table68k[opcode].mnemo == i_ILLG - || table68k[opcode].clev > cpu_level) - return; - - for (i = 0; lookuptab[i].name[0]; i++) - { - if (table68k[opcode].mnemo == lookuptab[i].mnemo) - break; - } - - if (table68k[opcode].handler != -1) - return; - - name = ua(lookuptab[i].name); - comprintf("/* %s */\n", outopcode(name, opcode)); - comprintf(RETTYPE " REGPARAM2 op_%x_%d_comp_%s(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, tbl, name); - - switch (table68k[opcode].stype) - { - case 0: - smsk = 7; - break; - case 1: - smsk = 255; - break; - case 2: - smsk = 15; - break; - case 3: - smsk = 7; - break; - case 4: - smsk = 7; - break; - case 5: - smsk = 63; - break; -#ifndef UAE - case 6: - smsk = 255; - break; -#endif - case 7: - smsk = 3; - break; - default: - smsk = 0; - assert(0); - } - dmsk = 7; - - next_cpu_level = -1; - if (table68k[opcode].suse - && table68k[opcode].smode != imm && table68k[opcode].smode != imm0 - && table68k[opcode].smode != imm1 && table68k[opcode].smode != imm2 - && table68k[opcode].smode != absw && table68k[opcode].smode != absl - && table68k[opcode].smode != PC8r && table68k[opcode].smode != PC16) - { - have_srcreg = 1; - if (table68k[opcode].spos == -1) - { - if (((int)table68k[opcode].sreg) >= 128) - comprintf("\tuae_s32 srcreg = (uae_s32)(uae_s8)%d;\n", (int)table68k[opcode].sreg); - else - comprintf("\tuae_s32 srcreg = %d;\n", (int)table68k[opcode].sreg); - } else - { - char source[100]; - int pos = table68k[opcode].spos; - -#ifndef UAE - comprintf("#if defined(HAVE_GET_WORD_UNSWAPPED) && !defined(FULLMMU)\n"); -#else - comprintf("#if defined(HAVE_GET_WORD_UNSWAPPED)\n"); -#endif - - if (pos < 8 && (smsk >> (8 - pos)) != 0) - sprintf(source, "(((opcode >> %d) | (opcode << %d)) & %d)", - pos ^ 8, 8 - pos, dmsk); - else if (pos != 8) - sprintf(source, "((opcode >> %d) & %d)", pos ^ 8, smsk); - else - sprintf(source, "(opcode & %d)", smsk); - - if (table68k[opcode].stype == 3) - comprintf("\tuae_u32 srcreg = imm8_table[%s];\n", source); - else if (table68k[opcode].stype == 1) - comprintf("\tuae_u32 srcreg = (uae_s32)(uae_s8)%s;\n", source); - else - comprintf("\tuae_u32 srcreg = %s;\n", source); - - comprintf("#else\n"); - - if (pos) - sprintf(source, "((opcode >> %d) & %d)", pos, smsk); - else - sprintf(source, "(opcode & %d)", smsk); - - if (table68k[opcode].stype == 3) - comprintf("\tuae_s32 srcreg = imm8_table[%s];\n", source); - else if (table68k[opcode].stype == 1) - comprintf("\tuae_s32 srcreg = (uae_s32)(uae_s8)%s;\n", source); - else - comprintf("\tuae_s32 srcreg = %s;\n", source); - - comprintf("#endif\n"); - } - } - if (table68k[opcode].duse - /* Yes, the dmode can be imm, in case of LINK or DBcc */ - && table68k[opcode].dmode != imm && table68k[opcode].dmode != imm0 - && table68k[opcode].dmode != imm1 && table68k[opcode].dmode != imm2 - && table68k[opcode].dmode != absw && table68k[opcode].dmode != absl) - { - have_dstreg = 1; - if (table68k[opcode].dpos == -1) - { - if (((int)table68k[opcode].dreg) >= 128) - comprintf("\tuae_s32 dstreg = (uae_s32)(uae_s8)%d;\n", (int)table68k[opcode].dreg); - else - comprintf("\tuae_s32 dstreg = %d;\n", (int)table68k[opcode].dreg); - } else - { - int pos = table68k[opcode].dpos; - -#ifndef UAE - comprintf("#if defined(HAVE_GET_WORD_UNSWAPPED) && !defined(FULLMMU)\n"); - - if (pos < 8 && (dmsk >> (8 - pos)) != 0) - comprintf("\tuae_u32 dstreg = ((opcode >> %d) | (opcode << %d)) & %d;\n", - pos ^ 8, 8 - pos, dmsk); - else if (pos != 8) - comprintf("\tuae_u32 dstreg = (opcode >> %d) & %d;\n", - pos ^ 8, dmsk); - else - comprintf("\tuae_u32 dstreg = opcode & %d;\n", dmsk); - - comprintf("#else\n"); -#endif - - if (pos) - comprintf("\tuae_u32 dstreg = (opcode >> %d) & %d;\n", - pos, dmsk); - else - comprintf("\tuae_u32 dstreg = opcode & %d;\n", dmsk); - -#ifndef UAE - comprintf("#endif\n"); -#endif - } - } - - if (have_srcreg && have_dstreg && - (table68k[opcode].dmode == Areg || - table68k[opcode].dmode == Aind || - table68k[opcode].dmode == Aipi || - table68k[opcode].dmode == Apdi || - table68k[opcode].dmode == Ad16 || - table68k[opcode].dmode == Ad8r) && - (table68k[opcode].smode == Areg || - table68k[opcode].smode == Aind || - table68k[opcode].smode == Aipi || - table68k[opcode].smode == Apdi || - table68k[opcode].smode == Ad16 || - table68k[opcode].smode == Ad8r) - ) { - comprintf("\tuae_u32 dodgy=(srcreg==(uae_s32)dstreg);\n"); - } else { - comprintf("\tuae_u32 dodgy=0;\n"); - } - comprintf("\tuae_u32 m68k_pc_offset_thisinst=m68k_pc_offset;\n"); - comprintf("\tm68k_pc_offset+=2;\n"); - - aborted = gen_opcode(opcode); - { - char flags[64 * 6]; - *flags = '\0'; - if (global_isjump) strcat(flags, "COMP_OPCODE_ISJUMP|"); - if (long_opcode) strcat(flags, "COMP_OPCODE_LONG_OPCODE|"); - if (global_cmov) strcat(flags, "COMP_OPCODE_CMOV|"); - if (global_isaddx) strcat(flags, "COMP_OPCODE_ISADDX|"); - if (global_iscjump) strcat(flags, "COMP_OPCODE_ISCJUMP|"); - if (global_fpu) strcat(flags, "COMP_OPCODE_USES_FPU|"); - if (*flags) - flags[strlen(flags) - 1] = '\0'; - else - strcpy(flags, "0"); - -#ifdef UAE /* RETTYPE != void */ - comprintf("return 0;\n"); -#endif - comprintf("}\n"); - - if (aborted) { - fprintf(stblfile, "{ NULL, %u, %s }, /* %s */\n", opcode, flags, name); - com_discard(); - } else { - fprintf(stblfile, "{ op_%x_%d_comp_%s, %u, %s }, /* %s */\n", opcode, postfix, tbl, opcode, flags, name); - fprintf(headerfile, "extern compop_func op_%x_%d_comp_%s;\n", opcode, postfix, tbl); - com_flush(); - } - } - opcode_next_clev[rp] = next_cpu_level; - opcode_last_postfix[rp] = postfix; -} - -static void -generate_func(int noflags) -{ - int i, j, rp; - const char *tbl = noflags ? "nf" : "ff"; - - using_prefetch = 0; - using_exception_3 = 0; - for (i = 0; i < 1; i++) /* We only do one level! */ - { - cpu_level = NEXT_CPU_LEVEL - i; - postfix = i; - - fprintf(stblfile, "const struct comptbl op_smalltbl_%d_comp_%s[] = {\n", postfix, tbl); - - /* sam: this is for people with low memory (eg. me :)) */ - printf("\n" - "#if !defined(PART_1) && !defined(PART_2) && " - "!defined(PART_3) && !defined(PART_4) && " - "!defined(PART_5) && !defined(PART_6) && " - "!defined(PART_7) && !defined(PART_8)" - "\n" - "#define PART_1 1\n" - "#define PART_2 1\n" - "#define PART_3 1\n" - "#define PART_4 1\n" - "#define PART_5 1\n" - "#define PART_6 1\n" - "#define PART_7 1\n" - "#define PART_8 1\n" -#ifdef UAE - "#endif\n"); - if (!noflags) - write_winuae_compemu_suffix(stdout); - printf("\n"); -#else - "#endif\n\n"); -#endif -#ifdef UAE - - printf("#ifdef USE_JIT_FPU\n"); - printf("extern void comp_fpp_opp();\n" - "extern void comp_fscc_opp();\n" - "extern void comp_fbcc_opp();\n"); - printf("#endif\n"); - printf("\n"); -#endif - - rp = 0; - for (j = 1; j <= 8; ++j) - { - int k = (j * nr_cpuop_funcs) / 8; - printf("#ifdef PART_%d\n", j); - for (; rp < k; rp++) - generate_one_opcode(rp, noflags); - printf("#endif\n\n"); - } - - fprintf(stblfile, "{ 0, 65536, 0 }};\n"); - } - -} - -#if (defined(OS_cygwin) || defined(OS_mingw)) && defined(EXTENDED_SIGSEGV) -void cygwin_mingw_abort() -{ -#undef abort - abort(); -} -#endif - -#if defined(FSUAE) && defined (WINDOWS) -#include "windows.h" -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) -#else -int main(void) -#endif -{ - init_table68k(); - - opcode_map = (int *)malloc(sizeof(int) * nr_cpuop_funcs); - opcode_last_postfix = (int *)malloc(sizeof(int) * nr_cpuop_funcs); - opcode_next_clev = (int *)malloc(sizeof(int) * nr_cpuop_funcs); - counts = (unsigned long *)malloc(65536 * sizeof(unsigned long)); - read_counts(); - - /* It would be a lot nicer to put all in one file (we'd also get rid of - * cputbl.h that way), but cpuopti can't cope. That could be fixed, but - * I don't dare to touch the 68k version. */ - - headerfile = fopen(GEN_PATH "comptbl.h", "wb"); -#ifdef UAE - write_winuae_header_prefix(headerfile); -#endif - fprintf(headerfile, "" - "extern const struct comptbl op_smalltbl_0_comp_nf[];\n" - "extern const struct comptbl op_smalltbl_0_comp_ff[];\n" - ""); - - stblfile = fopen(GEN_PATH "compstbl.cpp", "wb"); - if (freopen(GEN_PATH "compemu.cpp", "wb", stdout) == NULL) { - abort(); - } - -#ifdef UAE - write_winuae_source_prefix(stblfile, "arm/compstbl_arm.cpp"); - write_winuae_compemu_prefix(stdout); -#endif - generate_includes(stdout); - generate_includes(stblfile); - - printf("#include \"" JIT_PATH "compemu.h\"\n"); - printf("#include \"" JIT_PATH "flags_x86.h\"\n"); - - noflags = 0; - generate_func(noflags); - - free(opcode_map); - free(opcode_last_postfix); - free(opcode_next_clev); - free(counts); - - opcode_map = (int *)malloc(sizeof(int) * nr_cpuop_funcs); - opcode_last_postfix = (int *)malloc(sizeof(int) * nr_cpuop_funcs); - opcode_next_clev = (int *)malloc(sizeof(int) * nr_cpuop_funcs); - counts = (unsigned long *)malloc(65536 * sizeof(unsigned long)); - read_counts(); - noflags = 1; - generate_func(noflags); - - printf("#endif\n"); - fprintf(stblfile, "#endif\n"); -#ifdef UAE - write_winuae_source_suffix(stblfile); - write_winuae_header_suffix(headerfile); -#endif - - free(opcode_map); - free(opcode_last_postfix); - free(opcode_next_clev); - free(counts); - - free(table68k); - fclose(stblfile); - fclose(headerfile); - (void)disasm_this_inst; - return 0; -} - -#ifdef UAE -void write_log(const TCHAR *format, ...) -{ -} -#endif +#include "x86/gencomp.cpp" diff --git a/jit/codegen_x86.cpp b/jit/x86/codegen_x86.cpp similarity index 100% rename from jit/codegen_x86.cpp rename to jit/x86/codegen_x86.cpp diff --git a/jit/codegen_x86.h b/jit/x86/codegen_x86.h similarity index 100% rename from jit/codegen_x86.h rename to jit/x86/codegen_x86.h diff --git a/jit/x86/compemu_fpp_x86.cpp b/jit/x86/compemu_fpp_x86.cpp new file mode 100644 index 00000000..f18554f6 --- /dev/null +++ b/jit/x86/compemu_fpp_x86.cpp @@ -0,0 +1,2139 @@ +/* + * compiler/compemu_fpp.cpp - Dynamic translation of FPU instructions + * + * Copyright (c) 2001-2004 Milan Jurik of ARAnyM dev team (see AUTHORS) + * + * Inspired by Christian Bauer's Basilisk II + * + * This file is part of the ARAnyM project which builds a new and powerful + * TOS/FreeMiNT compatible virtual machine running on almost any hardware. + * + * JIT compiler m68k -> IA-32 and AMD64 + * + * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer + * Adaptation for Basilisk II and improvements, copyright 2000-2004 Gwenole Beauchesne + * Portions related to CPU detection come from linux/arch/i386/kernel/setup.c + * + * ARAnyM is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * ARAnyM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with ARAnyM; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +/* + * UAE - The Un*x Amiga Emulator + * + * MC68881 emulation + * + * Copyright 1996 Herman ten Brugge + * Adapted for JIT compilation (c) Bernd Meyer, 2000 + */ + +#include "sysdeps.h" + +#ifdef JIT + +#include +#include +#include + +#include "memory-uae.h" +#include "readcpu.h" +#include "newcpu.h" +#include "compemu_x86.h" +//#include "fpu/fpu.h" +//#include "fpu/flags.h" +//#include "fpu/exceptions.h" +//#include "fpu/rounding.h" + +//#define DEBUG 0 +#include "debug.h" + +struct jit_disable_opcodes jit_disable; + +#if defined(USE_LONG_DOUBLE) || defined(USE_QUAD_DOUBLE) +#define LD(x) x ## L +#else +#define LD(x) x +#endif + +// gb-- WARNING: get_fpcr() and set_fpcr() support is experimental +#define HANDLE_FPCR 0 + +// - IEEE-based fpu core must be used +#if defined(FPU_IEEE) +# define CAN_HANDLE_FPCR +#endif + +// - Generic rounding mode and precision modes are supported if set together +#if defined(FPU_USE_GENERIC_ROUNDING_MODE) && defined(FPU_USE_GENERIC_ROUNDING_PRECISION) +# define CAN_HANDLE_FPCR +#endif + +// - X86 rounding mode and precision modes are *not* supported but might work (?!) +#if defined(FPU_USE_X86_ROUNDING_MODE) && defined(FPU_USE_X86_ROUNDING_PRECISION) +# define CAN_HANDLE_FPCR +#endif + +#if HANDLE_FPCR && !defined(CAN_HANDLE_FPCR) +# warning "Can't handle FPCR, will FAIL(1) at runtime" +# undef HANDLE_FPCR +# define HANDLE_FPCR 0 +#endif + +//#define STATIC_INLINE static inline +#define MAKE_FPSR(r) do { fmov_rr(FP_RESULT,r); } while (0) + +#if 0 +#define delay nop() ;nop() +#define delay2 nop() ;nop() +#else +#define delay +#define delay2 +#endif + +#define UNKNOWN_EXTRA 0xFFFFFFFF +#if 0 +static void fpuop_illg(uae_u32 opcode, uae_u32 /* extra */) +{ +/* + if (extra == UNKNOWN_EXTRA) + printf("FPU opcode %x, extra UNKNOWN_EXTRA\n",opcode & 0xFFFF); + else + printf("FPU opcode %x, extra %x\n",opcode & 0xFFFF,extra & 0xFFFF); +*/ + op_illg(opcode); +} +#endif + +uae_s32 temp_fp[4]; /* To convert between FP/integer */ + +/* return register number, or -1 for failure */ +STATIC_INLINE int get_fp_value(uae_u32 opcode, uae_u16 extra) +{ + int size; + int mode; + int reg; + uae_u32 ad = 0; + static int const sz1[8] = { 4, 4, 12, 12, 2, 8, 1, 0 }; + static int const sz2[8] = { 4, 4, 12, 12, 2, 8, 2, 0 }; + + if ((extra & 0x4000) == 0) + { + return ((extra >> 10) & 7); + } + + mode = (opcode >> 3) & 7; + reg = opcode & 7; + size = (extra >> 10) & 7; + switch (mode) + { + case 0: /* Dn */ + switch (size) + { + case 6: /* byte */ + sign_extend_8_rr(S1, reg); + mov_l_mr(JITPTR temp_fp, S1); + delay2; + fmovi_rm(FS1, JITPTR temp_fp); + return FS1; + case 4: /* word */ + sign_extend_16_rr(S1, reg); + mov_l_mr(JITPTR temp_fp, S1); + delay2; + fmovi_rm(FS1, JITPTR temp_fp); + return FS1; + case 0: /* long */ + mov_l_mr(JITPTR temp_fp, reg); + delay2; + fmovi_rm(FS1, JITPTR temp_fp); + return FS1; + case 1: /* single precision */ + mov_l_mr(JITPTR temp_fp, reg); + delay2; + fmovs_rm(FS1, JITPTR temp_fp); + return FS1; + default: + return -1; + } + return -1; /* Should be unreachable */ + case 1: /* An */ + return -1; /* Genuine invalid instruction */ + default: + break; + } + + /* OK, we *will* have to load something from an address. Let's make + sure we know how to handle that, or quit early --- i.e. *before* + we do any postincrement/predecrement that we may regret */ + switch (size) + { + case 0: /* long */ + case 1: /* single precision */ + case 2: /* extended precision */ + case 4: /* word */ + case 5: /* double precision */ + case 6: /* byte */ + break; + case 3: /* packed decimal static */ + default: + return -1; + } + + switch (mode) + { + case 2: /* (An) */ + ad = S1; /* We will change it, anyway ;-) */ + mov_l_rr(ad, reg + 8); + break; + case 3: /* (An)+ */ + ad = S1; + mov_l_rr(ad, reg + 8); + lea_l_brr(reg + 8, reg + 8, (reg == 7 ? sz2[size] : sz1[size])); + break; + case 4: /* -(An) */ + ad = S1; + lea_l_brr(reg + 8, reg + 8, -(reg == 7 ? sz2[size] : sz1[size])); + mov_l_rr(ad, reg + 8); + break; + case 5: /* d16(An) */ + { + uae_u32 off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); + + ad = S1; + mov_l_rr(ad, reg + 8); + lea_l_brr(ad, ad, off); + } + break; + case 6: /* d8(An,Xn) */ + { + uae_u32 dp = comp_get_iword((m68k_pc_offset += 2) - 2); + + ad = S1; + calc_disp_ea_020(reg + 8, dp, ad, S2); + } + break; + case 7: + switch (reg) + { + case 0: /* abs.w */ + { + uae_u32 off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); + + ad = S1; + mov_l_ri(ad, off); + } + break; + case 1: /* abs.l */ + { + uae_u32 off = comp_get_ilong((m68k_pc_offset += 4) - 4); + + ad = S1; + mov_l_ri(ad, off); + } + break; + case 2: /* d16(pc) */ + { + uae_u32 address = (uae_u32)(start_pc + ((char *) comp_pc_p - (char *) start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); + + ad = S1; + mov_l_ri(ad, address + PC16off); + } + break; + case 3: /* d8(pc,Xn) */ + return -1; + case 4: /* #imm */ + { + uae_u32 address = (uae_u32)(start_pc + ((char *) comp_pc_p - (char *) start_pc_p) + m68k_pc_offset); + + ad = S1; + // Immediate addressing mode && Operation Length == Byte -> + // Use the low-order byte of the extension word. + if (size == 6) + address++; + mov_l_ri(ad, address); + m68k_pc_offset += sz2[size]; + } + break; + default: + return -1; + } + } + + switch (size) + { + case 0: /* long */ + readlong(ad, S2, S3); + mov_l_mr(JITPTR temp_fp, S2); + delay2; + fmovi_rm(FS1, JITPTR temp_fp); + break; + case 1: /* single precision */ + readlong(ad, S2, S3); + mov_l_mr(JITPTR temp_fp, S2); + delay2; + fmovs_rm(FS1, JITPTR temp_fp); + break; + case 2: /* extended precision */ + readword(ad, S2, S3); + mov_w_mr((JITPTR temp_fp) + 8, S2); + add_l_ri(ad, 4); + readlong(ad, S2, S3); + // always set the explicit integer bit. + or_l_ri(S2, 0x80000000); + mov_l_mr(JITPTR (temp_fp) + 4, S2); + add_l_ri(ad, 4); + readlong(ad, S2, S3); + mov_l_mr(JITPTR (temp_fp), S2); + delay2; + fmov_ext_rm(FS1, JITPTR (temp_fp)); + break; + case 3: /* packed decimal static */ + return -1; /* Some silly "packed" stuff */ + case 4: /* word */ + readword(ad, S2, S3); + sign_extend_16_rr(S2, S2); + mov_l_mr(JITPTR temp_fp, S2); + delay2; + fmovi_rm(FS1, JITPTR temp_fp); + break; + case 5: /* double precision */ + readlong(ad, S2, S3); + mov_l_mr((JITPTR temp_fp) + 4, S2); + add_l_ri(ad, 4); + readlong(ad, S2, S3); + mov_l_mr(JITPTR (temp_fp), S2); + delay2; + fmov_rm(FS1, JITPTR (temp_fp)); + break; + case 6: /* byte */ + readbyte(ad, S2, S3); + sign_extend_8_rr(S2, S2); + mov_l_mr(JITPTR temp_fp, S2); + delay2; + fmovi_rm(FS1, JITPTR temp_fp); + break; + default: + return -1; + } + return FS1; +} + +static struct { + fpu_register b[2]; + fpu_register w[2]; + fpu_register l[2]; +} clamp_bounds = { + { -128.0, 127.0 }, + { -32768.0, 32767.0 }, + { -2147483648.0, 2147483647.0 } +}; + +/* return of -1 means failure, >=0 means OK */ +STATIC_INLINE int put_fp_value(int val, uae_u32 opcode, uae_u16 extra) +{ + int size; + int mode; + int reg; + uae_u32 ad; + static int const sz1[8] = { 4, 4, 12, 12, 2, 8, 1, 0 }; + static int const sz2[8] = { 4, 4, 12, 12, 2, 8, 2, 0 }; + + if ((extra & 0x4000) == 0) + { + const int dest_reg = (extra >> 10) & 7; + + fmov_rr(dest_reg, val); + // gb-- status register is affected + MAKE_FPSR(dest_reg); + return 0; + } + + mode = (opcode >> 3) & 7; + reg = opcode & 7; + size = (extra >> 10) & 7; + ad = (uae_u32) -1; + switch (mode) + { + case 0: /* Dn */ + switch (size) + { + case 6: /* byte */ + fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.b); + delay; + mov_b_rm(reg, JITPTR temp_fp); + return 0; + case 4: /* word */ + fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.w); + delay; + mov_w_rm(reg, JITPTR temp_fp); + return 0; + case 0: /* long */ + fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.l); + fmovi_mr(JITPTR temp_fp, val); + delay; + mov_l_rm(reg, JITPTR temp_fp); + return 0; + case 1: /* single precision */ + fmovs_mr(JITPTR temp_fp, val); + delay; + mov_l_rm(reg, JITPTR temp_fp); + return 0; + default: + return -1; + } + case 1: /* An */ + return -1; /* genuine invalid instruction */ + default: + break; + } + + /* Let's make sure we get out *before* doing something silly if + we can't handle the size */ + switch (size) + { + case 0: /* long */ + case 1: /* single precision */ + case 2: /* extended precision */ + case 4: /* word */ + case 5: /* double precision */ + case 6: /* byte */ + break; + case 3: /* packed decimal static */ + default: + return -1; + } + + switch (mode) + { + case 2: /* (An) */ + ad = S1; + mov_l_rr(ad, reg + 8); + break; + case 3: /* (An)+ */ + ad = S1; + mov_l_rr(ad, reg + 8); + lea_l_brr(reg + 8, reg + 8, (reg == 7 ? sz2[size] : sz1[size])); + break; + case 4: /* -(An) */ + ad = S1; + lea_l_brr(reg + 8, reg + 8, -(reg == 7 ? sz2[size] : sz1[size])); + mov_l_rr(ad, reg + 8); + break; + case 5: /* d16(An) */ + { + uae_u32 off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); + + ad = S1; + mov_l_rr(ad, reg + 8); + add_l_ri(ad, off); + } + break; + case 6: /* d8(An,Xn) */ + { + uae_u32 dp = comp_get_iword((m68k_pc_offset += 2) - 2); + + ad = S1; + calc_disp_ea_020(reg + 8, dp, ad, S2); + } + break; + case 7: + switch (reg) + { + case 0: /* abs.w */ + { + uae_u32 off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); + + ad = S1; + mov_l_ri(ad, off); + } + break; + case 1: /* abs.l */ + { + uae_u32 off = comp_get_ilong((m68k_pc_offset += 4) - 4); + + ad = S1; + mov_l_ri(ad, off); + } + break; + case 2: /* d16(pc) */ + { + uae_u32 address = (uae_u32)(start_pc + ((char *) comp_pc_p - (char *) start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); + + ad = S1; + mov_l_ri(ad, address + PC16off); + } + break; + case 3: /* d8(pc,Xn) */ + return -1; + case 4: /* #imm */ + { + uae_u32 address = (uae_u32)(start_pc + ((char *) comp_pc_p - (char *) start_pc_p) + m68k_pc_offset); + + ad = S1; + mov_l_ri(ad, address); + m68k_pc_offset += sz2[size]; + } + break; + default: + return -1; + } + } + + switch (size) + { + case 0: /* long */ + fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.l); + delay; + mov_l_rm(S2, JITPTR temp_fp); + writelong_clobber(ad, S2, S3); + break; + case 1: /* single precision */ + fmovs_mr(JITPTR temp_fp, val); + delay; + mov_l_rm(S2, JITPTR temp_fp); + writelong_clobber(ad, S2, S3); + break; + case 2: /* extended precision */ + fmov_ext_mr(JITPTR temp_fp, val); + delay; + mov_w_rm(S2, JITPTR temp_fp + 8); + writeword_clobber(ad, S2, S3); + add_l_ri(ad, 4); + mov_l_rm(S2, JITPTR temp_fp + 4); + writelong_clobber(ad, S2, S3); + add_l_ri(ad, 4); + mov_l_rm(S2, JITPTR temp_fp); + writelong_clobber(ad, S2, S3); + break; + case 3: /* packed decimal static */ + return -1; /* Packed */ + case 4: /* word */ + fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.w); + delay; + mov_l_rm(S2, JITPTR temp_fp); + writeword_clobber(ad, S2, S3); + break; + case 5: /* double precision */ + fmov_mr(JITPTR temp_fp, val); + delay; + mov_l_rm(S2, JITPTR temp_fp + 4); + writelong_clobber(ad, S2, S3); + add_l_ri(ad, 4); + mov_l_rm(S2, JITPTR temp_fp); + writelong_clobber(ad, S2, S3); + break; + case 6: /* byte */ + fmovi_mrb(JITPTR temp_fp, val, clamp_bounds.b); + delay; + mov_l_rm(S2, JITPTR temp_fp); + writebyte(ad, S2, S3); + break; + default: + return -1; + } + return 0; +} + + +/* return -1 for failure, or register number for success */ +STATIC_INLINE int get_fp_ad(uae_u32 opcode) +{ + int mode; + int reg; + uae_s32 off; + + mode = (opcode >> 3) & 7; + reg = opcode & 7; + switch (mode) + { + case 0: /* Dn */ + case 1: /* An */ + return -1; + case 2: /* (An) */ + case 3: /* (An)+ */ + case 4: /* -(An) */ + mov_l_rr(S1, 8 + reg); + return S1; + case 5: /* d16(An) */ + off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); + mov_l_rr(S1, 8 + reg); + add_l_ri(S1, off); + return S1; + case 6: /* d8(An,Xn) */ + return -1; + break; + case 7: + switch (reg) + { + case 0: /* abs.w */ + off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); + mov_l_ri(S1, off); + return S1; + case 1: /* abs.l */ + off = comp_get_ilong((m68k_pc_offset += 4) - 4); + mov_l_ri(S1, off); + return S1; + case 2: /* d16(pc) */ + off = (uae_s32)(start_pc + ((char *) comp_pc_p - (char *) start_pc_p) + m68k_pc_offset); + off += (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); + mov_l_ri(S1, off); + return S1; + case 3: /* d8(pc,Xn) */ + return -1; + default: + return -1; + } + } + abort(); +} + + +/* return -1 for failure, or register number for success */ +void comp_fdbcc_opp (uae_u32 /* opcode */, uae_u16 /* extra */) +{ + if (jit_disable.fdbcc) + { + FAIL(1); + return; + } + FAIL(1); + return; +} + + +void comp_fscc_opp(uae_u32 opcode, uae_u16 extra) +{ + int reg; + + if (!currprefs.compfpu) + { + FAIL(1); + return; + } + if (jit_disable.fscc) + { + FAIL(1); + return; + } + + if (extra & 0x20) + { /* only cc from 00 to 1f are defined */ + FAIL(1); + return; + } + if ((opcode & 0x38) != 0) + { /* We can only do to integer register */ + FAIL(1); + return; + } + + fflags_into_flags(S2); + reg = (opcode & 7); + + mov_l_ri(S1, 255); + mov_l_ri(S4, 0); + switch (extra & 0x0f) + { /* according to fpp.c, the 0x10 bit is ignored + */ + case 0: + break; /* set never */ + case 1: + mov_l_rr(S2, S4); + cmov_l_rr(S4, S1, 4); + cmov_l_rr(S4, S2, 10); + break; + case 2: + cmov_l_rr(S4, S1, 7); + break; + case 3: + cmov_l_rr(S4, S1, 3); + break; + case 4: + mov_l_rr(S2, S4); + cmov_l_rr(S4, S1, 2); + cmov_l_rr(S4, S2, 10); + break; + case 5: + mov_l_rr(S2, S4); + cmov_l_rr(S4, S1, 6); + cmov_l_rr(S4, S2, 10); + break; + case 6: + cmov_l_rr(S4, S1, 5); + break; + case 7: + cmov_l_rr(S4, S1, 11); + break; + case 8: + cmov_l_rr(S4, S1, 10); + break; + case 9: + cmov_l_rr(S4, S1, 4); + break; + case 10: + cmov_l_rr(S4, S1, 10); + cmov_l_rr(S4, S1, 7); + break; + case 11: + cmov_l_rr(S4, S1, 4); + cmov_l_rr(S4, S1, 3); + break; + case 12: + cmov_l_rr(S4, S1, 2); + break; + case 13: + cmov_l_rr(S4, S1, 6); + break; + case 14: + cmov_l_rr(S4, S1, 5); + cmov_l_rr(S4, S1, 10); + break; + case 15: + mov_l_rr(S4, S1); + break; + } + + if ((opcode & 0x38) == 0) + { + mov_b_rr(reg, S4); + } else + { + abort(); +#if 0 + int cc; + + if (get_fp_ad(opcode) < 0) + { + FAIL(1); + } else + { + put_byte(ad, cc ? 0xff : 0x00); + } +#endif + } +} + + +void comp_ftrapcc_opp (uae_u32 /* opcode */, uaecptr /* oldpc */) +{ + FAIL(1); + return; +} + + +void comp_fbcc_opp(uae_u32 opcode) +{ + uae_u32 start_68k_offset = m68k_pc_offset; + uae_s32 off; + uintptr v1; + uintptr v2; + int cc; + + if (!currprefs.compfpu) + { + FAIL(1); + return; + } + if (jit_disable.fbcc) + { + FAIL(1); + return; + } + if (opcode & 0x20) + { /* only cc from 00 to 1f are defined */ + FAIL(1); + return; + } + if ((opcode & 0x40) == 0) + { + off = (uae_s32) (uae_s16) comp_get_iword((m68k_pc_offset += 2) - 2); + } else + { + off = (uae_s32) comp_get_ilong((m68k_pc_offset += 4) - 4); + } + /* Match the ARM64 FBcc fix: keep the signed displacement separate + * from the 64-bit host pointer so non-PC_P set_const paths do not + * lose pointer width or zero-extend backward branches. */ + { + uae_s32 displacement = off - (uae_s32)(m68k_pc_offset - start_68k_offset); + mov_l_ri(S1, (uintptr)(uae_s32)displacement); + add_l_ri(S1, (uintptr)comp_pc_p); + } + mov_l_ri(PC_P, JITPTR comp_pc_p); + + /* Now they are both constant. Might as well fold in m68k_pc_offset */ + add_l_ri(S1, m68k_pc_offset); + add_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + + /* according to fpp.c, the 0x10 bit is ignored + (it handles exception handling, which we don't + do, anyway ;-) */ + cc = opcode & 0x0f; + v1 = get_const(PC_P); + v2 = get_const(S1); + fflags_into_flags(S2); + + switch (cc) + { + case 0: + break; /* jump never */ + case 1: + mov_l_rr(S2, PC_P); + cmov_l_rr(PC_P, S1, 4); + cmov_l_rr(PC_P, S2, 10); + break; + case 2: + register_branch(v1, v2, 7); + break; + case 3: + register_branch(v1, v2, 3); + break; + case 4: + mov_l_rr(S2, PC_P); + cmov_l_rr(PC_P, S1, 2); + cmov_l_rr(PC_P, S2, 10); + break; + case 5: + mov_l_rr(S2, PC_P); + cmov_l_rr(PC_P, S1, 6); + cmov_l_rr(PC_P, S2, 10); + break; + case 6: + register_branch(v1, v2, 5); + break; + case 7: + register_branch(v1, v2, 11); + break; + case 8: + register_branch(v1, v2, 10); + break; + case 9: + register_branch(v1, v2, 4); + break; + case 10: + cmov_l_rr(PC_P, S1, 10); + cmov_l_rr(PC_P, S1, 7); + break; + case 11: + cmov_l_rr(PC_P, S1, 4); + cmov_l_rr(PC_P, S1, 3); + break; + case 12: + register_branch(v1, v2, 2); + break; + case 13: + register_branch(v1, v2, 6); + break; + case 14: + cmov_l_rr(PC_P, S1, 5); + cmov_l_rr(PC_P, S1, 10); + break; + case 15: + mov_l_rr(PC_P, S1); + break; + } +} + + + /* Floating point conditions + The "NotANumber" part could be problematic; Howver, when NaN is + encountered, the ftst instruction sets bot N and Z to 1 on the x87, + so quite often things just fall into place. This is probably not + accurate wrt the 68k FPU, but it is *as* accurate as this was before. + However, some more thought should go into fixing this stuff up so + it accurately emulates the 68k FPU. +>==> 13) & 0x7) + { + case 1: /* illegal */ + break; + + case 3: /* FMOVE Fpn, */ + /* 2nd most common */ + if (jit_disable.fmove) + { + FAIL(1); + return; + } + + if (put_fp_value((extra >> 7) & 7, opcode, extra) < 0) + { + FAIL(1); + return; + } + return; + + case 6: /* FMOVEM , */ + case 7: /* FMOVEM , */ + if (jit_disable.fmovem) + { + FAIL(1); + return; + } + + { + int ad; + uae_u32 list = 0; + int incr = 0; + + if (extra & 0x2000) + { + /* FMOVEM FPP->memory */ + switch ((extra >> 11) & 3) + { /* Get out early if failure */ + case 0: /* static pred */ + case 2: /* static postinc */ + break; + case 1: /* dynamic pred */ + case 3: /* dynamic postinc */ + default: + FAIL(1); + return; + } + if ((ad = get_fp_ad(opcode)) < 0) + { + FAIL(1); + return; + } + switch ((extra >> 11) & 3) + { + case 0: /* static pred */ + list = extra & 0xff; + incr = -1; + break; + case 2: /* static postinc */ + list = extra & 0xff; + incr = 1; + break; + case 1: /* dynamic pred */ + case 3: /* dynamic postinc */ + abort(); + } + if (incr < 0) + { /* Predecrement */ + for (reg = 7; reg >= 0; reg--) + { + if (list & 0x80) + { + fmov_ext_mr(JITPTR temp_fp, reg); + delay; + sub_l_ri(ad, 4); + mov_l_rm(S2, JITPTR temp_fp); + writelong_clobber(ad, S2, S3); + sub_l_ri(ad, 4); + mov_l_rm(S2, JITPTR temp_fp + 4); + writelong_clobber(ad, S2, S3); + sub_l_ri(ad, 4); + mov_w_rm(S2, JITPTR temp_fp + 8); + writeword_clobber(ad, S2, S3); + } + list <<= 1; + } + } else + { /* Postincrement */ + for (reg = 0; reg < 8; reg++) + { + if (list & 0x80) + { + fmov_ext_mr(JITPTR temp_fp, reg); + delay; + mov_w_rm(S2, JITPTR temp_fp + 8); + writeword_clobber(ad, S2, S3); + add_l_ri(ad, 4); + mov_l_rm(S2, JITPTR temp_fp + 4); + writelong_clobber(ad, S2, S3); + add_l_ri(ad, 4); + mov_l_rm(S2, JITPTR temp_fp); + writelong_clobber(ad, S2, S3); + add_l_ri(ad, 4); + } + list <<= 1; + } + } + if ((opcode & 0x38) == 0x18) + mov_l_rr((opcode & 7) + 8, ad); + if ((opcode & 0x38) == 0x20) + mov_l_rr((opcode & 7) + 8, ad); + } else + { + /* FMOVEM memory->FPP */ + + int ad; + + switch ((extra >> 11) & 3) + { /* Get out early if failure */ + case 0: /* static pred */ + case 2: /* static postinc */ + break; + case 1: /* dynamic pred */ + case 3: /* dynamic postinc */ + default: + FAIL(1); + return; + } + ad = get_fp_ad(opcode); + if (ad < 0) + { + D(bug("no ad\n")); + FAIL(1); + return; + } + switch ((extra >> 11) & 3) + { + case 0: /* static pred */ + list = extra & 0xff; + incr = -1; + break; + case 2: /* static postinc */ + list = extra & 0xff; + incr = 1; + break; + case 1: /* dynamic pred */ + case 3: /* dynamic postinc */ + abort(); + } + + if (incr < 0) + { + // not reached + for (reg = 7; reg >= 0; reg--) + { + if (list & 0x80) + { + sub_l_ri(ad, 4); + readlong(ad, S2, S3); + mov_l_mr(JITPTR (temp_fp), S2); + sub_l_ri(ad, 4); + readlong(ad, S2, S3); + mov_l_mr(JITPTR (temp_fp) + 4, S2); + sub_l_ri(ad, 4); + readword(ad, S2, S3); + mov_w_mr((JITPTR temp_fp) + 8, S2); + delay2; + fmov_ext_rm(reg, JITPTR (temp_fp)); + } + list <<= 1; + } + } else + { + for (reg = 0; reg < 8; reg++) + { + if (list & 0x80) + { + readword(ad, S2, S3); + mov_w_mr((JITPTR temp_fp) + 8, S2); + add_l_ri(ad, 4); + readlong(ad, S2, S3); + mov_l_mr(JITPTR (temp_fp) + 4, S2); + add_l_ri(ad, 4); + readlong(ad, S2, S3); + mov_l_mr(JITPTR(temp_fp), S2); + add_l_ri(ad, 4); + delay2; + fmov_ext_rm(reg, JITPTR (temp_fp)); + } + list <<= 1; + } + } + if ((opcode & 0x38) == 0x18) + mov_l_rr((opcode & 7) + 8, ad); + if ((opcode & 0x38) == 0x20) + mov_l_rr((opcode & 7) + 8, ad); + } + } + return; + + case 4: /* FMOVEM , */ + case 5: /* FMOVEM , */ + if (jit_disable.fmovec) + { + FAIL(1); + return; + } + + /* rare */ + if ((opcode & 0x30) == 0) + { + /* = Dn or An */ + if (extra & 0x2000) + { + if (extra & 0x1000) + { +#if HANDLE_FPCR + mov_l_rm(opcode & 15, (uintptr) & fpu.fpcr.rounding_mode); + or_l_rm(opcode & 15, (uintptr) & fpu.fpcr.rounding_precision); +#else + FAIL(1); + return; +#endif + } + if (extra & 0x0800) + { + FAIL(1); + return; + } + if (extra & 0x0400) + { + /* FPIAR: fixme; we cannot correctly return the address from compiled code */ +#ifdef UAE + mov_l_rm(opcode & 15, JITPTR ®s.fpiar); +#else + mov_l_rm(opcode & 15, JITPTR &fpu.instruction_address); +#endif + return; + } + } else + { + // gb-- moved here so that we may FAIL() without generating any code + if (extra & 0x0800) + { + // set_fpsr(m68k_dreg (regs, opcode & 15)); + FAIL(1); + return; + } + if (extra & 0x1000) + { +#if HANDLE_FPCR +#if defined(FPU_USE_X86_ROUNDING_MODE) && defined(FPU_USE_X86_ROUNDING_PRECISION) + FAIL(1); + return; +#endif + mov_l_rr(S1, opcode & 15); + mov_l_rr(S2, opcode & 15); + and_l_ri(S1, FPCR_ROUNDING_PRECISION); + and_l_ri(S2, FPCR_ROUNDING_MODE); + mov_l_mr((uintptr) & fpu.fpcr.rounding_precision, S1); + mov_l_mr((uintptr) & fpu.fpcr.rounding_mode, S2); +#else + FAIL(1); + return; +#endif + } + if (extra & 0x0400) + { + /* FPIAR: does that make sense at all? */ +#ifdef UAE + mov_l_mr(JITPTR ®s.fpiar, opcode & 15); +#else + mov_l_mr(JITPTR &fpu.instruction_address, opcode & 15); +#endif + } + return; + } + } else if ((opcode & 0x3f) == 0x3c) + { + /* = #imm */ + if ((extra & 0x2000) == 0) + { + // gb-- moved here so that we may FAIL() without generating any code + if (extra & 0x0800) + { + FAIL(1); + return; + } + if (extra & 0x1000) + { + comp_get_ilong((m68k_pc_offset += 4) - 4); +#if HANDLE_FPCR +#if defined(FPU_USE_X86_ROUNDING_MODE) && defined(FPU_USE_X86_ROUNDING_PRECISION) + FAIL(1); + return; +#endif + // mov_l_mi((uintptr)®s.fpcr,val); + mov_l_ri(S1, val); + mov_l_ri(S2, val); + and_l_ri(S1, FPCR_ROUNDING_PRECISION); + and_l_ri(S2, FPCR_ROUNDING_MODE); + mov_l_mr((uintptr) & fpu.fpcr.rounding_precision, S1); + mov_l_mr((uintptr) & fpu.fpcr.rounding_mode, S2); +#else + FAIL(1); + return; +#endif + } + if (extra & 0x0400) + { + uae_u32 val = comp_get_ilong((m68k_pc_offset += 4) - 4); +#ifdef UAE + mov_l_mi(JITPTR ®s.fpiar, val); +#else + mov_l_mi(JITPTR &fpu.instruction_address, val); +#endif + } + return; + } + FAIL(1); + return; + } else if (extra & 0x2000) + { + FAIL(1); + return; + } else + { + FAIL(1); + return; + } + FAIL(1); + return; + + case 0: + case 2: /* Extremely common */ + reg = (extra >> 7) & 7; + if ((extra & 0xfc00) == 0x5c00) + { + if (jit_disable.fmovecr) + { + FAIL(1); + return; + } + + switch (extra & 0x7f) + { + case 0x00: + fmov_pi(reg); + break; + case 0x0b: + fmov_log10_2(reg); + break; + case 0x0c: +#if defined(USE_LONG_DOUBLE) || defined(USE_QUAD_DOUBLE) + fmov_ext_rm(reg, (uintptr) & const_e); +#else + fmov_rm(reg, (uintptr) & const_e); +#endif + break; + case 0x0d: + fmov_log2_e(reg); + break; + case 0x0e: +#if defined(USE_LONG_DOUBLE) || defined(USE_QUAD_DOUBLE) + fmov_ext_rm(reg, (uintptr) & const_log10_e); +#else + fmov_rm(reg, (uintptr) & const_log10_e); +#endif + break; + case 0x0f: + fmov_0(reg); + break; + case 0x30: + fmov_loge_2(reg); + break; + case 0x31: +#if defined(USE_LONG_DOUBLE) || defined(USE_QUAD_DOUBLE) + fmov_ext_rm(reg, (uintptr) & const_loge_10); +#else + fmov_rm(reg, (uintptr) & const_loge_10); +#endif + break; + case 0x32: + fmov_1(reg); + break; + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3a: + case 0x3b: +#if defined(USE_LONG_DOUBLE) || defined(USE_QUAD_DOUBLE) + case 0x3c: + case 0x3d: + case 0x3e: + case 0x3f: + fmov_ext_rm(reg, (uintptr) (power10 + (extra & 0x7f) - 0x32)); +#else + fmov_rm(reg, (uintptr) (power10 + (extra & 0x7f) - 0x32)); +#endif + break; + default: + /* This is not valid, so we fail */ + FAIL(1); + return; + } + return; + } + + switch (extra & 0x7f) + { + case 0x00: /* FMOVE */ + case 0x40: /* FSMOVE: Explicit rounding. This is just a quick fix. Same + * for all other cases that have three choices */ + case 0x44: /* FDMOVE */ + if (jit_disable.fmove) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fmov_rr(reg, src); + MAKE_FPSR(src); + break; + case 0x01: /* FINT */ + if (jit_disable.fint) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x02: /* FSINH */ + if (jit_disable.fsinh) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x03: /* FINTRZ */ + if (jit_disable.fintrz) + { + FAIL(1); + return; + } +#ifdef USE_X86_FPUCW + /* If we have control over the CW, we can do this */ + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + mov_l_ri(S1, 16); /* Switch to "round to zero" mode */ + fldcw_m_indexed(S1, JITPTR x86_fpucw); + + frndint_rr(reg, src); + + /* restore control word */ + mov_l_rm(S1, JITPTR ®s.fpcr); + and_l_ri(S1, 0x000000f0); + fldcw_m_indexed(S1, JITPTR x86_fpucw); + + MAKE_FPSR(reg); + break; +#endif + FAIL(1); + return; + break; + case 0x04: /* FSQRT */ + case 0x41: /* FSSQRT */ + case 0x45: /* FDSQRT */ + if (jit_disable.fsqrt) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fsqrt_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x06: /* FLOGNP1 */ + if (jit_disable.flognp1) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x08: /* FETOXM1 */ + if (jit_disable.fetoxm1) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x09: /* FTANH */ + if (jit_disable.ftanh) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x0a: /* FATAN */ + if (jit_disable.fatan) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x0c: /* FASIN */ + if (jit_disable.fasin) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x0d: /* FATANH */ + if (jit_disable.fatanh) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x0e: /* FSIN */ + if (jit_disable.fsin) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fsin_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x0f: /* FTAN */ + if (jit_disable.ftan) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x10: /* FETOX */ + if (jit_disable.fetox) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fetox_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x11: /* FTWOTOX */ + if (jit_disable.ftwotox) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + ftwotox_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x12: /* FTENTOX */ + if (jit_disable.ftentox) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x14: /* FLOGN */ + if (jit_disable.flogn) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x15: /* FLOG10 */ + if (jit_disable.flog10) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x16: /* FLOG2 */ + if (jit_disable.flog2) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + flog2_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x18: /* FABS */ + case 0x58: /* FSABS */ + case 0x5c: /* FDABS */ + if (jit_disable.fabs) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fabs_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x19: /* FCOSH */ + if (jit_disable.fcosh) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x1a: /* FNEG */ + case 0x5a: /* FSNEG */ + case 0x5e: /* FDNEG */ + if (jit_disable.fneg) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fneg_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x1c: /* FACOS */ + if (jit_disable.facos) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x1d: /* FCOS */ + if (jit_disable.fcos) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fcos_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x1e: /* FGETEXP */ + if (jit_disable.fgetexp) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x1f: /* FGETMAN */ + if (jit_disable.fgetman) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x20: /* FDIV */ + case 0x60: /* FSDIV */ + case 0x64: /* FDDIV */ + if (jit_disable.fdiv) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fdiv_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x21: /* FMOD */ + if (jit_disable.fmod) + { + FAIL(1); + return; + } + + // FIXME: the quotient byte must be computed + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + frem_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x22: /* FADD */ + case 0x62: /* FSADD */ + case 0x66: /* FDADD */ + if (jit_disable.fadd) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fadd_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x23: /* FMUL */ + case 0x63: /* FSMUL */ + case 0x67: /* FDMUL */ + if (jit_disable.fmul) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fmul_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x24: /* FSGLDIV */ + if (jit_disable.fsgldiv) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fdiv_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x25: /* FREM */ + if (jit_disable.frem) + { + FAIL(1); + return; + } + // gb-- disabled because the quotient byte must be computed + // otherwise, free rotation in ClarisWorks doesn't work. + FAIL(1); + return; + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + frem1_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x26: /* FSCALE */ + if (jit_disable.fscale) + { + FAIL(1); + return; + } + + FAIL(1); + return; + break; + case 0x27: /* FSGLMUL */ + if (jit_disable.fsglmul) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fmul_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x28: /* FSUB */ + case 0x68: /* FSSUB */ + case 0x6c: /* FDSUB */ + if (jit_disable.fsub) + { + FAIL(1); + return; + } + + dont_care_fflags(); + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fsub_rr(reg, src); + MAKE_FPSR(reg); + break; + case 0x30: /* FSINCOS */ + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + if (jit_disable.fsincos) + { + FAIL(1); + return; + } + + FAIL(1); + return; + dont_care_fflags(); + break; + case 0x38: /* FCMP */ + if (jit_disable.fcmp) + { + FAIL(1); + return; + } + + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fmov_rr(FP_RESULT, reg); + fsub_rr(FP_RESULT, src); /* Right way? */ + break; + case 0x3a: /* FTST */ + if (jit_disable.ftst) + { + FAIL(1); + return; + } + + src = get_fp_value(opcode, extra); + if (src < 0) + { + FAIL(1); /* Illegal instruction */ + return; + } + fmov_rr(FP_RESULT, src); + break; + default: + FAIL(1); + return; + break; + } + return; + } + FAIL(1); +} + +#endif diff --git a/jit/compemu_midfunc_x86.cpp b/jit/x86/compemu_midfunc_x86.cpp similarity index 100% rename from jit/compemu_midfunc_x86.cpp rename to jit/x86/compemu_midfunc_x86.cpp diff --git a/jit/compemu_midfunc_x86.h b/jit/x86/compemu_midfunc_x86.h similarity index 100% rename from jit/compemu_midfunc_x86.h rename to jit/x86/compemu_midfunc_x86.h diff --git a/jit/x86/compemu_support_x86.cpp b/jit/x86/compemu_support_x86.cpp new file mode 100644 index 00000000..cbd4f733 --- /dev/null +++ b/jit/x86/compemu_support_x86.cpp @@ -0,0 +1,6476 @@ +/* + * compiler/compemu_support.cpp - Core dynamic translation engine + * + * Copyright (c) 2001-2009 Milan Jurik of ARAnyM dev team (see AUTHORS) + * + * Inspired by Christian Bauer's Basilisk II + * + * This file is part of the ARAnyM project which builds a new and powerful + * TOS/FreeMiNT compatible virtual machine running on almost any hardware. + * + * JIT compiler m68k -> IA-32 and AMD64 / ARM + * + * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer + * Adaptation for Basilisk II and improvements, copyright 2000-2004 Gwenole Beauchesne + * Portions related to CPU detection come from linux/arch/i386/kernel/setup.c + * + * ARAnyM is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * ARAnyM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with ARAnyM; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include "sysdeps.h" + +#ifdef UAE + +#define writemem_special writemem +#define readmem_special readmem + +#else +#if !FIXED_ADDRESSING +#error "Only Fixed Addressing is supported with the JIT Compiler" +#endif + +#if defined(X86_ASSEMBLY) && !SAHF_SETO_PROFITABLE +#error "Only [LS]AHF scheme to [gs]et flags is supported with the JIT Compiler" +#endif + +/* NOTE: support for AMD64 assumes translation cache and other code + * buffers are allocated into a 32-bit address space because (i) B2/JIT + * code is not 64-bit clean and (ii) it's faster to resolve branches + * that way. + */ +#if !defined(CPU_i386) && !defined(CPU_x86_64) && !defined(CPU_arm) && !defined(CPU_AARCH64) +#error "Only IA-32, X86-64, ARM and ARM64 targets are supported with the JIT Compiler" +#endif +#endif + +#define USE_MATCH 0 + +/* kludge for Brian, so he can compile under MSVC++ */ +#define USE_NORMAL_CALLING_CONVENTION 0 + +#include "sysconfig.h" +#include "sysdeps.h" + +#ifdef JIT + +#ifdef UAE +#define bug write_log +#include "options.h" +#include "events.h" +#include "uae/memory.h" +#include "custom.h" +#else +#include "cpu_emulation.h" +#include "main.h" +#include "vm_alloc.h" + +#include "m68k.h" +#include "memory-uae.h" +#include "readcpu.h" +#endif +#include "newcpu.h" +#include "comptbl_x86.h" +#ifdef UAE +#include "compemu_x86.h" +#ifdef FSUAE +#include "codegen_udis86.h" +#endif +#else +#include "compiler/compemu.h" +#include "fpu/fpu.h" +#include "fpu/flags.h" +#include "parameters.h" +static void build_comp(void); +#endif +#ifndef UAE +#include "verify.h" +#endif + +#ifdef UAE +#ifdef FSUAE +#include "uae/fs.h" +#endif +#include "uae/log.h" + +/* PIE is now supported on x86-64: the anchor-based JIT allocator + * keeps code within RIP-relative range of globals. FreeBSD still + * requires -fno-pie (ADDR32+MAP_32BIT strategy). */ + +#include "uae/vm.h" +#if defined(CPU_x86_64) && !defined(_WIN32) +#include +#endif +#if defined(CPU_x86_64) && defined(__APPLE__) +#include +#include +#include +#endif +#define VM_PAGE_READ UAE_VM_READ +#define VM_PAGE_WRITE UAE_VM_WRITE +#define VM_PAGE_EXECUTE UAE_VM_EXECUTE +#define VM_MAP_FAILED UAE_VM_ALLOC_FAILED +#define VM_MAP_DEFAULT 0 +#define VM_MAP_32BIT 1 +#define vm_protect(address, size, protect) uae_vm_protect(address, size, protect) +#define vm_release(address, size) uae_vm_free(address, size) + +#if defined(CPU_x86_64) +/* + * JIT cache allocation strategy (PIE-compatible): + * + * x86-64 JIT uses RIP-relative [RIP+disp32] addressing to access globals + * (regs, regflags, etc.) via the _r_X() macro. This requires the JIT code + * cache to be within +/-2GB of .data. + * + * Under non-PIE, .data is at a fixed low address and MAP_32BIT suffices. + * Under PIE+ASLR, .data can be anywhere in the 47-bit VA space. + * + * We use an anchor-based probe: &data_anchor is a reference point in .data, + * and we search outward from it for a free VA range. This mirrors the + * Windows strategy (VirtualQuery walk from data_anchor). + * + * The probe covers +/-1.75GB at 2MB intervals, well within the +/-2GB + * RIP-relative limit. + */ + +/* jit_vm_acquire() uses this as the RIP-relative allocation anchor. + * Set to the JIT cache base after alloc_cache() succeeds. + * All x86-64 platforms need this since RIP-relative addressing + * requires JIT allocations within +/-2GB of both code and globals. */ +static uae_u8* vm_acquire_anchor = NULL; +#endif + +static inline bool jit_vm_alloc_failed(const void *ptr) +{ + return ptr == NULL || ptr == VM_MAP_FAILED; +} + +#if defined(CPU_x86_64) && defined(__linux__) +/* VMA-aware near-address allocator - Linux equivalent of the Windows + * VirtualQuery walk. Parses /proc/self/maps to find the closest gap + * to `base` that can hold `size` bytes within `range`. + * Returns mmap'd pointer on success, NULL on failure. */ +static void *find_nearest_gap(uintptr base, uae_u32 size, uintptr range) +{ + FILE *maps = fopen("/proc/self/maps", "r"); + if (!maps) + return NULL; + + const uintptr granularity = 0x10000; /* 64KB, matches Windows path */ + uintptr lo = (base > range) ? (base - range) : granularity; + uintptr hi = base + range; + + void *best = NULL; + uintptr best_dist = UINTPTR_MAX; + uintptr prev_end = 0; + + char line[512]; + while (fgets(line, sizeof(line), maps)) { + unsigned long vma_start, vma_end; + if (sscanf(line, "%lx-%lx", &vma_start, &vma_end) != 2) + continue; + + /* Check the gap between prev_end and this VMA's start */ + if (vma_start > prev_end && prev_end > 0) { + uintptr gap_start = prev_end; + uintptr gap_end = vma_start; + uintptr gap_size = gap_end - gap_start; + + if (gap_size >= size && gap_start < hi && gap_end > lo) { + /* Find the address in this gap closest to base */ + uintptr alloc_at; + if (base >= gap_start && base + size <= gap_end) { + /* Gap contains base - ideal */ + alloc_at = base & ~(granularity - 1); + } else if (gap_end <= base) { + /* Gap is below base - use highest aligned addr */ + alloc_at = (gap_end - size) & ~(granularity - 1); + } else { + /* Gap is above base - use lowest aligned addr */ + alloc_at = (gap_start + granularity - 1) & ~(granularity - 1); + } + + if (alloc_at >= gap_start && alloc_at + size <= gap_end && + alloc_at >= lo && alloc_at + size <= hi) { + uintptr dist = (alloc_at >= base) + ? (alloc_at - base) : (base - alloc_at); + if (dist < best_dist) { + best = (void *)alloc_at; + best_dist = dist; + } + } + } + } + prev_end = vma_end; + } + fclose(maps); + + if (!best) + return NULL; + + /* Try atomic claim with MAP_FIXED_NOREPLACE first */ +#ifdef MAP_FIXED_NOREPLACE + void *result = mmap(best, size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED_NOREPLACE, -1, 0); + if (result != MAP_FAILED) + return result; +#endif + /* Fallback: hint-based (kernel may slide it) */ + void *result2 = mmap(best, size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (result2 != MAP_FAILED) { + uintptr dist = ((uintptr)result2 >= base) + ? ((uintptr)result2 - base) : (base - (uintptr)result2); + if (dist < range) + return result2; + munmap(result2, size); + } + return NULL; +} +#endif /* CPU_x86_64 && __linux__ */ + +#if defined(CPU_x86_64) && defined(__APPLE__) +#ifndef VM_FLAGS_FIXED +#define VM_FLAGS_FIXED 0 +#endif + +static void *mach_vm_allocate_fixed(uintptr try_addr, uae_u32 size) +{ + mach_vm_address_t address = (mach_vm_address_t)try_addr; + const kern_return_t kr = mach_vm_allocate( + mach_task_self(), &address, size, VM_FLAGS_FIXED); + if (kr != KERN_SUCCESS) + return NULL; + if ((uintptr)address == try_addr) + return (void *)address; + mach_vm_deallocate(mach_task_self(), address, size); + return NULL; +} + +static void *mach_vm_try_gap(uintptr gap_start, uintptr gap_end, uintptr base, + uae_u32 size, uintptr page, void *best, uintptr *best_dist) +{ + if (gap_end <= gap_start || gap_end - gap_start < size) + return best; + + uintptr alloc_at; + if (base >= gap_start && base + size <= gap_end) { + alloc_at = base & ~(page - 1); + if (alloc_at < gap_start) + alloc_at += page; + } else if (gap_end <= base) { + alloc_at = (gap_end - size) & ~(page - 1); + } else { + alloc_at = (gap_start + page - 1) & ~(page - 1); + } + if (alloc_at < gap_start || alloc_at + size > gap_end) + return best; + + const uintptr dist = (alloc_at >= base) ? (alloc_at - base) : (base - alloc_at); + if (dist >= *best_dist) + return best; + + void *candidate = mach_vm_allocate_fixed(alloc_at, size); + if (!candidate) + return best; + if (best) + mach_vm_deallocate(mach_task_self(), (mach_vm_address_t)best, size); + *best_dist = dist; + return candidate; +} + +static void *mach_vm_acquire_near(uintptr base, uae_u32 size, uintptr range) +{ + const uintptr page = (uintptr)uae_vm_page_size(); + const uintptr lo = (base > range) ? (base - range) : page; + const uintptr hi = base + range; + const uintptr rounded_size = (size + page - 1) & ~(page - 1); + + void *best = NULL; + uintptr best_dist = UINTPTR_MAX; + uintptr prev_end = lo; + mach_vm_address_t address = (mach_vm_address_t)lo; + + while ((uintptr)address < hi) { + mach_vm_size_t region_size = 0; + natural_t depth = 0; + vm_region_submap_info_data_64_t info; + mach_msg_type_number_t count = VM_REGION_SUBMAP_INFO_COUNT_64; + const kern_return_t kr = mach_vm_region_recurse( + mach_task_self(), &address, ®ion_size, &depth, + (vm_region_recurse_info_t)&info, &count); + if (kr != KERN_SUCCESS) + break; + + uintptr region_start = (uintptr)address; + uintptr region_end = region_start + (uintptr)region_size; + if (region_start > hi) + region_start = hi; + if (region_start > prev_end) { + best = mach_vm_try_gap(prev_end, region_start, base, + (uae_u32)rounded_size, page, best, &best_dist); + if (best_dist == 0) + return best; + } + if (region_end <= prev_end) + region_end = prev_end + page; + prev_end = region_end; + address = (mach_vm_address_t)region_end; + } + + if (prev_end < hi) { + best = mach_vm_try_gap(prev_end, hi, base, + (uae_u32)rounded_size, page, best, &best_dist); + } + if (best) + return best; + + const uintptr stride = rounded_size > 0x10000 ? 0x10000 : page; + for (uintptr offset = 0; offset < range; offset += stride) { + for (int dir = 0; dir < 2; dir++) { + if (offset == 0 && dir == 1) + continue; + if (dir == 1 && base <= offset) + continue; + uintptr try_addr = dir == 0 ? base + offset : base - offset; + try_addr &= ~(page - 1); + if (try_addr < lo || try_addr + rounded_size > hi) + continue; + void *candidate = mach_vm_allocate_fixed(try_addr, (uae_u32)rounded_size); + if (candidate) + return candidate; + } + } + return best; +} +#endif /* CPU_x86_64 && __APPLE__ */ + +void *jit_vm_acquire(uae_u32 size, int options) +{ +#if defined(CPU_x86_64) + if (!(options & VM_MAP_32BIT)) { +#ifdef _WIN32 + /* RIP-relative addressing (the _r_X macro in codegen_x86.h) + * requires all targets within +/-2GB of the JIT code that + * references them. Anchor at compiled_code (JIT cache base) + * when available; fall back to a .data anchor for the first + * allocation (the JIT cache itself). + * Use VirtualQuery to find the closest free region within + * +/-1.75GB - this avoids the blind 16MB-step probe that + * exhausts in congested ASLR address spaces. */ + uintptr base; + if (vm_acquire_anchor) { + base = (uintptr)vm_acquire_anchor; + } else { + static int anchor; + base = (uintptr)&anchor; + } + base &= ~(uintptr)0xFFFF; + const uintptr range = 0x70000000ULL; /* 1.75GB */ + const uintptr granularity = 0x10000; /* Windows 64KB alloc granularity */ + uintptr lo = (base > range) ? (base - range) : 0; + uintptr hi = base + range; + + /* Walk the address space with VirtualQuery to find the + * closest free region large enough for this allocation. */ + void *best = NULL; + uintptr best_dist = UINTPTR_MAX; + uintptr addr = lo; + while (addr < hi) { + MEMORY_BASIC_INFORMATION mbi; + if (VirtualQuery((void *)addr, &mbi, sizeof(mbi)) == 0) + break; + uintptr region_base = (uintptr)mbi.BaseAddress; + uintptr region_end = region_base + mbi.RegionSize; + if (mbi.State == MEM_FREE && mbi.RegionSize >= size) { + /* Pick the address in this region closest to base */ + uintptr alloc_at; + if (base >= region_base && base < region_end) { + /* Region contains base - ideal */ + alloc_at = base & ~(granularity - 1); + } else if (region_end <= base) { + /* Region is below base - use highest aligned addr */ + alloc_at = (region_end - size) & ~(granularity - 1); + } else { + /* Region is above base - use lowest aligned addr */ + alloc_at = (region_base + granularity - 1) & ~(granularity - 1); + } + if (alloc_at >= region_base && alloc_at + size <= region_end && + alloc_at >= lo && alloc_at + size <= hi) { + uintptr dist = (alloc_at >= base) ? (alloc_at - base) : (base - alloc_at); + if (dist < best_dist) { + best = (void *)alloc_at; + best_dist = dist; + } + } + } + /* Advance to next region */ + if (region_end <= addr) break; /* overflow protection */ + addr = region_end; + } + void *result = NULL; + if (best) { + result = VirtualAlloc(best, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + } + if (!result) { + /* Last resort: OS choice - range-check the result to avoid + * silent RIP-relative overflow in pool allocations that + * bypass alloc_cache()'s post-hoc distance check. */ + result = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + if (result) { + intptr_t dist = (intptr_t)result - (intptr_t)base; + if (llabs(dist) >= (intptr_t)range) { + VirtualFree(result, 0, MEM_RELEASE); + result = NULL; + } + } + } + return result; +#else +#if defined(__FreeBSD__) + /* FreeBSD: ASLR defeats anchor-based hints. Delegate to + * uae_vm_alloc with UAE_VM_32BIT (MAP_32BIT), guaranteeing + * allocation below 2GB where ADDR32 absolute addressing works. */ + return uae_vm_alloc(size, UAE_VM_32BIT, UAE_VM_READ_WRITE); +#else + /* Linux/POSIX x86-64: RIP-relative addressing (the _r_X macro) + * requires all JIT allocations within +/-2GB of both the JIT code + * and global variables in the .data segment. Use compiled_code + * as anchor when available, otherwise a .data section anchor. + * Try mmap with hints near the anchor; fall back to unanchored. */ + static int data_anchor; + uintptr base = vm_acquire_anchor + ? (uintptr)vm_acquire_anchor + : (uintptr)&data_anchor; + base &= ~(uintptr)0xFFFF; + const uintptr range = 0x70000000ULL; /* 1.75GB */ + + uintptr lo = (base > range) ? (base - range) : 0x10000; + uintptr hi = base + range; + void *result = NULL; + +#ifdef __linux__ + result = find_nearest_gap(base, size, range); + if (result) + return result; +#endif +#ifdef __APPLE__ + result = mach_vm_acquire_near(base, size, range); + if (result) + return result; +#endif + +#ifdef MAP_FIXED_NOREPLACE + int extra_flags = MAP_FIXED_NOREPLACE; +#else + int extra_flags = 0; +#endif + + uintptr stride = (size + 0xFFFF) & ~(uintptr)0xFFFF; + if (stride < 0x10000) + stride = 0x10000; + + for (uintptr offset = 0; offset < range && !result; offset += stride) { + /* Try above anchor */ + uintptr try_addr = base + offset; + if (try_addr >= lo && try_addr + size <= hi) { + result = mmap((void *)try_addr, size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS | extra_flags, -1, 0); + if (result != MAP_FAILED) { + uintptr dist = ((uintptr)result >= base) + ? ((uintptr)result - base) : (base - (uintptr)result); + if (dist < range) + break; + munmap(result, size); + result = NULL; + } else { + result = NULL; + } + } + if (offset == 0) + continue; + /* Try below anchor */ + if (base > offset) { + try_addr = base - offset; + if (try_addr >= lo && try_addr + size <= hi) { + result = mmap((void *)try_addr, size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS | extra_flags, -1, 0); + if (result != MAP_FAILED) { + uintptr dist = ((uintptr)result >= base) + ? ((uintptr)result - base) : (base - (uintptr)result); + if (dist < range) + break; + munmap(result, size); + result = NULL; + } else { + result = NULL; + } + } + } + } + if (!result) { + for (int attempt = 0; attempt < 2 && !result; attempt++) { + void *try_alloc = (attempt == 0) + ? uae_vm_alloc(size, UAE_VM_32BIT, UAE_VM_READ_WRITE) + : uae_vm_alloc(size, 0, UAE_VM_READ_WRITE); + if (jit_vm_alloc_failed(try_alloc)) + continue; + intptr_t dist = (intptr_t)try_alloc - (intptr_t)base; + if (llabs(dist) >= (intptr_t)range) { + uae_vm_free(try_alloc, size); + continue; + } + result = try_alloc; + } + if (!result) { + write_log("JIT: WARNING: could not allocate within 2GB of globals " + "(anchor=%p)\n", (void *)base); + } + } + return result; +#endif /* !__FreeBSD__ */ +#endif /* !_WIN32 */ + } +#endif + return uae_vm_alloc(size, UAE_VM_32BIT, UAE_VM_READ_WRITE); +} + +#define UNUSED(x) +#include "uae.h" +#include "uae/log.h" +#define jit_log(format, ...) \ + write_log("JIT: " format "\n", ##__VA_ARGS__); +#define jit_log2(format, ...) + +#define MEMBaseDiff ((uintptr)NATMEM_OFFSET) + +#ifdef NATMEM_OFFSET +#define FIXED_ADDRESSING 1 +#endif + +// %%% BRIAN KING WAS HERE %%% +extern bool canbang; +extern int jit_n_addr_unsafe; +extern int jit_n_addr_bank_unsafe; + +#include "../compemu_prefs.cpp" + +#define uint32 uae_u32 +#define uint8 uae_u8 + +static inline int distrust_check(int value) +{ +#ifdef JIT_ALWAYS_DISTRUST + return 1; +#else + int distrust = value; +#ifdef FSUAE + switch (value) { + case 0: distrust = 0; break; + case 1: distrust = 1; break; + case 2: distrust = ((start_pc & 0xF80000) == 0xF80000); break; + case 3: distrust = !have_done_picasso; break; + default: abort(); + } +#endif + return distrust; +#endif +} + +static inline int distrust_byte(void) +{ + return distrust_check(currprefs.comptrustbyte); +} + +static inline int distrust_word(void) +{ + return distrust_check(currprefs.comptrustword); +} + +static inline int distrust_long(void) +{ + return distrust_check(currprefs.comptrustlong); +} + +static inline int distrust_addr(void) +{ + return distrust_check(currprefs.comptrustnaddr); +} + +static inline bool jit_use_memory_helpers(void) +{ + return jit_n_addr_bank_unsafe || (jit_n_addr_unsafe && !canbang); +} + +static inline bool jit_use_compile_fallbacks(void) +{ + return jit_n_addr_bank_unsafe; +} + +#else +#define DEBUG 0 +#include "debug.h" + +#define NATMEM_OFFSET MEMBaseDiff +#define canbang 1 +#define op_illg op_illg_1 + +#ifdef WINUAE_ARANYM +void jit_abort(const char *format, ...) +{ + va_list args; + va_start(args, format); + ndebug::pdbvprintf(format, args); + va_end(args); + abort(); +} +#endif + +#if DEBUG +#define PROFILE_COMPILE_TIME 1 +#define PROFILE_UNTRANSLATED_INSNS 1 +#endif +#endif + +# include +# include +# include +# include + +#if defined(CPU_x86_64) && 0 +#define RECORD_REGISTER_USAGE 1 +#endif + +#ifdef JIT_DEBUG +#undef abort +#define abort() do { \ + fprintf(stderr, "Abort in file %s at line %d\n", __FILE__, __LINE__); \ + compiler_dumpstate(); \ + exit(EXIT_FAILURE); \ +} while (0) +#endif + +#ifdef RECORD_REGISTER_USAGE +static uint64 reg_count[16]; +static uint64 reg_count_local[16]; + +static int reg_count_compare(const void *ap, const void *bp) +{ + const int a = *((int *)ap); + const int b = *((int *)bp); + return reg_count[b] - reg_count[a]; +} +#endif + +#ifdef PROFILE_COMPILE_TIME +#include +static uae_u32 compile_count = 0; +static clock_t compile_time = 0; +static clock_t emul_start_time = 0; +static clock_t emul_end_time = 0; +#endif + +#ifdef PROFILE_UNTRANSLATED_INSNS +static const int untranslated_top_ten = 50; +static uae_u32 raw_cputbl_count[65536] = { 0, }; +static uae_u16 opcode_nums[65536]; + + +static int __cdecl untranslated_compfn(const void *e1, const void *e2) +{ + int v1 = *(const uae_u16*)e1; + int v2 = *(const uae_u16*)e2; + return (int)raw_cputbl_count[v2] - (int)raw_cputbl_count[v1]; +} +#endif + +static compop_func *compfunctbl[65536]; +static compop_func *nfcompfunctbl[65536]; +#ifdef NOFLAGS_SUPPORT_GENCOMP +static cpuop_func *nfcpufunctbl[65536]; +#endif +uae_u8* comp_pc_p; + +#ifdef UAE +/* defined in uae.h */ +#else +// External variables +#endif + +// gb-- Extra data for Basilisk II/JIT +#ifdef JIT_DEBUG +#define JITDebug bx_options.jit.jitdebug // Enable runtime disassemblers through mon? +#else +#define JITDebug false // Don't use JIT debug mode at all +#endif +#if USE_INLINING +#ifdef UAE +#define follow_const_jumps (currprefs.comp_constjump != 0) +#else +static bool follow_const_jumps = true; // Flag: translation through constant jumps +#endif +#else +const bool follow_const_jumps = false; +#endif + +static uae_u32 cache_size = 0; // Size of total cache allocated for compiled blocks +static uae_u32 current_cache_size = 0; // Cache grows upwards: how much has been consumed already +// Flag: compile FPU instructions ? +#ifdef UAE +#ifdef USE_JIT_FPU +#define avoid_fpu (!currprefs.compfpu) +#define lazy_flush (!currprefs.comp_hardflush) +#else +#define avoid_fpu (true) +#define lazy_flush (true) +#endif +#else +#ifdef USE_JIT_FPU +#define avoid_fpu (!bx_options.jit.jitfpu) +#else +#define avoid_fpu (true) +#endif +#endif +static bool have_cmov = false; // target has CMOV instructions ? +static bool have_rat_stall = true; // target has partial register stalls ? +const bool tune_alignment = true; // Tune code alignments for running CPU ? +const bool tune_nop_fillers = true; // Tune no-op fillers for architecture +static bool setzflg_uses_bsf = false; // setzflg virtual instruction can use native BSF instruction correctly? +static int align_loops = 32; // Align the start of loops +static int align_jumps = 32; // Align the start of jumps +static int optcount[10] = { +#ifdef UAE + 4, // How often a block has to be executed before it is translated +#else + 10, // How often a block has to be executed before it is translated +#endif + 0, // How often to use naive translation + 0, 0, 0, 0, + -1, -1, -1, -1 +}; + +#ifdef UAE +op_properties prop[65536]; +#else +static op_properties prop[65536]; + +static inline int end_block(uae_u32 opcode) +{ + return (prop[opcode].cflow & fl_end_block); +} +#endif + +static inline bool is_const_jump(uae_u32 opcode) +{ + return (prop[opcode].cflow == fl_const_jump); +} + +static inline bool is_dbcc_opcode(uae_u32 opcode) +{ + return (opcode & 0xf0f8) == 0x50c8; +} + +static inline bool is_cmp_w_an_postinc_dn_opcode(uae_u32 opcode) +{ + return (opcode & 0xf1f8) == 0xb058; +} + +#if 0 +static inline bool may_trap(uae_u32 opcode) +{ + return (prop[opcode].cflow & fl_trap); +} +#endif + +static inline unsigned int cft_map (unsigned int f) +{ +#ifdef UAE +#if !defined(HAVE_GET_WORD_UNSWAPPED) + return f; +#else + return do_byteswap_16(f); +#endif +#else +#if !defined(HAVE_GET_WORD_UNSWAPPED) || defined(FULLMMU) + return f; +#else + return ((f >> 8) & 255) | ((f & 255) << 8); +#endif +#endif +} + +uae_u8* start_pc_p; +uae_u32 start_pc; +uintptr current_block_pc_p; +static uintptr current_block_start_target; +uae_u32 needed_flags; +static uintptr next_pc_p; +static uintptr taken_pc_p; +static int branch_cc; +static int redo_current_block; + +#ifdef UAE +int segvcount=0; +#endif +static uae_u8* current_compile_p=NULL; +static uae_u8* max_compile_start; +static uae_u8* compiled_code=NULL; +static uae_s32 reg_alloc_run; +const int POPALLSPACE_SIZE = 2048; /* That should be enough space */ +static uae_u8 *popallspace=NULL; + +void* pushall_call_handler=NULL; +static void* popall_do_nothing=NULL; +static void* popall_exec_nostats=NULL; +static void* popall_execute_normal=NULL; +static void* popall_cache_miss=NULL; +static void* popall_recompile_block=NULL; +static void* popall_check_checksum=NULL; + +/* The 68k only ever executes from even addresses. So right now, we + * waste half the entries in this array + * UPDATE: We now use those entries to store the start of the linked + * lists that we maintain for each hash result. + */ +static cacheline cache_tags[TAGSIZE]; +static int cache_enabled=0; +static blockinfo* hold_bi[MAX_HOLD_BI]; +static blockinfo* active; +static blockinfo* dormant; + +#ifdef NOFLAGS_SUPPORT_GENCOMP +/* 68040 */ +extern const struct cputbl op_smalltbl_0[]; +#endif +extern const struct comptbl op_smalltbl_0_comp_nf[]; +extern const struct comptbl op_smalltbl_0_comp_ff[]; + +static void flush_icache_hard(int); +static void flush_icache_lazy(int); +static void flush_icache_none(int); +//void (*flush_icache)(int) = flush_icache_none; + +#ifdef UAE +void disable_jit_on_runtime_alloc_failure(const char *what) +{ + if (!cache_enabled && currprefs.cachesize == 0 && changed_prefs.cachesize == 0) + return; + + write_log("JIT: WARNING: %s\n", what); + write_log("JIT: WARNING: Disabling JIT and falling back to the interpreter.\n"); + + cache_enabled = 0; + currprefs.cachesize = 0; + changed_prefs.cachesize = 0; +} +#endif + +static bigstate live; +static smallstate empty_ss; +static smallstate default_ss; +static int optlev; + +static int writereg(int r, int size); +static void unlock2(int r); +static void setlock(int r); +static int readreg_specific(int r, int size, int spec); +static int writereg_specific(int r, int size, int spec); + +static void inline write_jmp_target(uae_u32 *jmpaddr, cpuop_func* a); + +uae_u32 m68k_pc_offset; + +/* Some arithmetic operations can be optimized away if the operands + * are known to be constant. But that's only a good idea when the + * side effects they would have on the flags are not important. This + * variable indicates whether we need the side effects or not + */ +static uae_u32 needflags=0; + +/* Flag handling is complicated. + * + * x86 instructions create flags, which quite often are exactly what we + * want. So at times, the "68k" flags are actually in the x86 flags. + * + * Then again, sometimes we do x86 instructions that clobber the x86 + * flags, but don't represent a corresponding m68k instruction. In that + * case, we have to save them. + * + * We used to save them to the stack, but now store them back directly + * into the regflags.cznv of the traditional emulation. Thus some odd + * names. + * + * So flags can be in either of two places (used to be three; boy were + * things complicated back then!); And either place can contain either + * valid flags or invalid trash (and on the stack, there was also the + * option of "nothing at all", now gone). A couple of variables keep + * track of the respective states. + * + * To make things worse, we might or might not be interested in the flags. + * by default, we are, but a call to dont_care_flags can change that + * until the next call to live_flags. If we are not, pretty much whatever + * is in the register and/or the native flags is seen as valid. + */ + +static inline blockinfo* get_blockinfo(uae_u32 cl) +{ + return cache_tags[cl+1].bi; +} + +static inline blockinfo* get_blockinfo_addr(void* addr) +{ + blockinfo* bi=get_blockinfo(cacheline(addr)); + + while (bi) { + if (bi->pc_p==addr) + return bi; + bi=bi->next_same_cl; + } + return NULL; +} + +#ifdef WINUAE_ARANYM +/******************************************************************* + * Disassembler support * + *******************************************************************/ + +#define TARGET_M68K 0 +#define TARGET_POWERPC 1 +#define TARGET_X86 2 +#define TARGET_X86_64 3 +#define TARGET_ARM 4 +#if defined(CPU_i386) +#define TARGET_NATIVE TARGET_X86 +#endif +#if defined(CPU_powerpc) +#define TARGET_NATIVE TARGET_POWERPC +#endif +#if defined(CPU_x86_64) +#define TARGET_NATIVE TARGET_X86_64 +#endif +#if defined(CPU_arm) +#define TARGET_NATIVE TARGET_ARM +#endif +#include "disasm-glue.h" + +bool disasm_this_inst; + +#if defined(JIT_DEBUG) || (defined(HAVE_DISASM_NATIVE) && defined(HAVE_DISASM_M68K)) +static void disasm_block(int disasm_target, const uint8 *start, size_t length) +{ + UNUSED(start); + UNUSED(length); + switch (disasm_target) + { + case TARGET_M68K: +#if defined(HAVE_DISASM_M68K) + { + char buf[256]; + + disasm_info.memory_vma = ((memptr)((uintptr_t)(start) - MEMBaseDiff)); + while (length > 0) + { + int isize = m68k_disasm_to_buf(&disasm_info, buf, 1); + bug("%s", buf); + if (isize < 0) + break; + if ((uintptr)isize > length) + break; + length -= isize; + } + } +#endif + break; + case TARGET_X86: + case TARGET_X86_64: +#if defined(HAVE_DISASM_X86) + { + const uint8 *end = start + length; + char buf[256]; + + while (start < end) + { + start = x86_disasm(start, buf, 1); + bug("%s", buf); + } + } +#endif + break; + case TARGET_ARM: +#if defined(HAVE_DISASM_ARM) + { + const uint8 *end = start + length; + char buf[256]; + + while (start < end) + { + start = arm_disasm(start, buf, 1); + bug("%s", buf); + } + } +#endif + break; + } +} + +static inline void disasm_native_block(const uint8 *start, size_t length) +{ + disasm_block(TARGET_NATIVE, start, length); +} + +static inline void disasm_m68k_block(const uint8 *start, size_t length) +{ + disasm_block(TARGET_M68K, start, length); +} +#endif +#endif /* WINUAE_ARANYM */ + + +/******************************************************************* + * All sorts of list related functions for all of the lists * + *******************************************************************/ + +static inline void remove_from_cl_list(blockinfo* bi) +{ + uae_u32 cl=cacheline(bi->pc_p); + + if (bi->prev_same_cl_p) + *(bi->prev_same_cl_p)=bi->next_same_cl; + if (bi->next_same_cl) + bi->next_same_cl->prev_same_cl_p=bi->prev_same_cl_p; + if (cache_tags[cl+1].bi) + cache_tags[cl].handler=cache_tags[cl+1].bi->handler_to_use; + else + cache_tags[cl].handler=(cpuop_func*)popall_execute_normal; +} + +static inline void remove_from_list(blockinfo* bi) +{ + if (bi->prev_p) + *(bi->prev_p)=bi->next; + if (bi->next) + bi->next->prev_p=bi->prev_p; +} + +#if 0 +static inline void remove_from_lists(blockinfo* bi) +{ + remove_from_list(bi); + remove_from_cl_list(bi); +} +#endif + +static inline void add_to_cl_list(blockinfo* bi) +{ + uae_u32 cl=cacheline(bi->pc_p); + + if (cache_tags[cl+1].bi) + cache_tags[cl+1].bi->prev_same_cl_p=&(bi->next_same_cl); + bi->next_same_cl=cache_tags[cl+1].bi; + + cache_tags[cl+1].bi=bi; + bi->prev_same_cl_p=&(cache_tags[cl+1].bi); + + cache_tags[cl].handler=bi->handler_to_use; +} + +static inline void raise_in_cl_list(blockinfo* bi) +{ + remove_from_cl_list(bi); + add_to_cl_list(bi); +} + +static inline void add_to_active(blockinfo* bi) +{ + if (active) + active->prev_p=&(bi->next); + bi->next=active; + + active=bi; + bi->prev_p=&active; +} + +static inline void add_to_dormant(blockinfo* bi) +{ + if (dormant) + dormant->prev_p=&(bi->next); + bi->next=dormant; + + dormant=bi; + bi->prev_p=&dormant; +} + +static inline void remove_dep(dependency* d) +{ + if (d->prev_p) + *(d->prev_p)=d->next; + if (d->next) + d->next->prev_p=d->prev_p; + d->prev_p=NULL; + d->next=NULL; +} + +/* This block's code is about to be thrown away, so it no longer + depends on anything else */ +static inline void remove_deps(blockinfo* bi) +{ + remove_dep(&(bi->dep[0])); + remove_dep(&(bi->dep[1])); +} + +static inline void adjust_jmpdep(dependency* d, cpuop_func* a) +{ + write_jmp_target(d->jmp_off, a); +} + +/******************************************************************** + * Soft flush handling support functions * + ********************************************************************/ + +static inline void set_dhtu(blockinfo* bi, cpuop_func *dh) +{ + jit_log2("bi is %p",bi); + if (dh!=bi->direct_handler_to_use) { + dependency* x=bi->deplist; + jit_log2("bi->deplist=%p",bi->deplist); + while (x) { + jit_log2("x is %p",x); + jit_log2("x->next is %p",x->next); + jit_log2("x->prev_p is %p",x->prev_p); + + if (x->jmp_off) { + adjust_jmpdep(x,dh); + } + x=x->next; + } + bi->direct_handler_to_use=dh; + } +} + +static inline void invalidate_block(blockinfo* bi) +{ + int i; + + bi->optlevel=0; + bi->count=optcount[0]-1; + bi->handler=NULL; + bi->handler_to_use=(cpuop_func*)popall_execute_normal; + bi->direct_handler=NULL; + set_dhtu(bi,bi->direct_pen); + bi->needed_flags=0xff; + bi->status=BI_INVALID; + for (i=0;i<2;i++) { + bi->dep[i].jmp_off=NULL; + bi->dep[i].target=NULL; + } + remove_deps(bi); +} + +static inline void create_jmpdep(blockinfo* bi, int i, uae_u32* jmpaddr, uintptr target) +{ + blockinfo* tbi=get_blockinfo_addr((void*)(uintptr)target); + + Dif(!tbi) { + jit_abort("Could not create jmpdep!"); + } + bi->dep[i].jmp_off=jmpaddr; + bi->dep[i].source=bi; + bi->dep[i].target=tbi; + bi->dep[i].next=tbi->deplist; + if (bi->dep[i].next) + bi->dep[i].next->prev_p=&(bi->dep[i].next); + bi->dep[i].prev_p=&(tbi->deplist); + tbi->deplist=&(bi->dep[i]); +} + +static inline void block_need_recompile(blockinfo * bi) +{ + uae_u32 cl = cacheline(bi->pc_p); + + set_dhtu(bi, bi->direct_pen); + bi->direct_handler = bi->direct_pen; + + bi->handler_to_use = (cpuop_func *)popall_execute_normal; + bi->handler = (cpuop_func *)popall_execute_normal; + if (bi == cache_tags[cl + 1].bi) + cache_tags[cl].handler = (cpuop_func *)popall_execute_normal; + bi->status = BI_NEED_RECOMP; +} + +#if USE_MATCH +static inline void mark_callers_recompile(blockinfo * bi) +{ + dependency *x = bi->deplist; + + while (x) { + dependency *next = x->next; /* This disappears when we mark for + * recompilation and thus remove the + * blocks from the lists */ + if (x->jmp_off) { + blockinfo *cbi = x->source; + + Dif(cbi->status == BI_INVALID) { + jit_log("invalid block in dependency list"); // FIXME? + // abort(); + } + if (cbi->status == BI_ACTIVE || cbi->status == BI_NEED_CHECK) { + block_need_recompile(cbi); + mark_callers_recompile(cbi); + } + else if (cbi->status == BI_COMPILING) { + redo_current_block = 1; + } + else if (cbi->status == BI_NEED_RECOMP) { + /* nothing */ + } + else { + jit_log2("Status %d in mark_callers",cbi->status); // FIXME? + } + } + x = next; + } +} +#endif + +static inline blockinfo* get_blockinfo_addr_new(void* addr, int /* setstate */) +{ + blockinfo* bi=get_blockinfo_addr(addr); + int i; + + if (!bi) { + for (i=0;ipc_p=(uae_u8*)addr; + invalidate_block(bi); + add_to_active(bi); + add_to_cl_list(bi); + + } + } + } + if (!bi) { +#ifdef UAE + disable_jit_on_runtime_alloc_failure("Looking for blockinfo, can't find free one"); + return NULL; +#else + jit_abort("Looking for blockinfo, can't find free one"); +#endif + } + return bi; +} + +static void prepare_block(blockinfo* bi); + +/* Management of blockinfos. + + A blockinfo struct is allocated whenever a new block has to be + compiled. If the list of free blockinfos is empty, we allocate a new + pool of blockinfos and link the newly created blockinfos altogether + into the list of free blockinfos. Otherwise, we simply pop a structure + of the free list. + + Blockinfo are lazily deallocated, i.e. chained altogether in the + list of free blockinfos whenvever a translation cache flush (hard or + soft) request occurs. +*/ + +template< class T > +class LazyBlockAllocator +{ + enum { + kPoolSize = 1 + (16384 - sizeof(T) - sizeof(void *)) / sizeof(T) + }; + struct Pool { + T chunk[kPoolSize]; + Pool * next; + }; + Pool * mPools; + T * mChunks; +public: + LazyBlockAllocator() : mPools(0), mChunks(0) { } +#ifdef UAE +#else + ~LazyBlockAllocator(); +#endif + T * acquire(); + void release(T * const); +}; + +#ifdef UAE +/* uae_vm_release may do logging, which isn't safe to do when the application + * is shutting down. Better to release memory manually with a function call + * to a release_all method on shutdown, or even simpler, just let the OS + * handle it (we're shutting down anyway). */ +#else +template< class T > +LazyBlockAllocator::~LazyBlockAllocator() +{ + Pool * currentPool = mPools; + while (currentPool) { + Pool * deadPool = currentPool; + currentPool = currentPool->next; + vm_release(deadPool, sizeof(Pool)); + } +} +#endif + +template< class T > +T * LazyBlockAllocator::acquire() +{ + if (!mChunks) { + // There is no chunk left, allocate a new pool and link the + // chunks into the free list +#if defined(CPU_x86_64) && defined(__FreeBSD__) + Pool * newPool = (Pool *)jit_vm_acquire(sizeof(Pool), VM_MAP_DEFAULT | VM_MAP_32BIT); +#elif defined(CPU_x86_64) + Pool * newPool = (Pool *)jit_vm_acquire(sizeof(Pool), VM_MAP_DEFAULT); +#else + Pool * newPool = (Pool *)jit_vm_acquire(sizeof(Pool), VM_MAP_DEFAULT | VM_MAP_32BIT); +#endif + if (jit_vm_alloc_failed(newPool)) { +#ifdef UAE + disable_jit_on_runtime_alloc_failure("Could not allocate block pool!"); + return NULL; +#else + jit_abort("Could not allocate block pool!"); +#endif + } + for (T * chunk = &newPool->chunk[0]; chunk < &newPool->chunk[kPoolSize]; chunk++) { + chunk->next = mChunks; + mChunks = chunk; + } + newPool->next = mPools; + mPools = newPool; + } + T * chunk = mChunks; + mChunks = chunk->next; + return chunk; +} + +template< class T > +void LazyBlockAllocator::release(T * const chunk) +{ + chunk->next = mChunks; + mChunks = chunk; +} + +template< class T > +class HardBlockAllocator +{ +public: + T * acquire() { + T * data = (T *)current_compile_p; + current_compile_p += sizeof(T); + return data; + } + + void release(T * const ) { + // Deallocated on invalidation + } +}; + +#if USE_SEPARATE_BIA +static LazyBlockAllocator BlockInfoAllocator; +static LazyBlockAllocator ChecksumInfoAllocator; +#else +static HardBlockAllocator BlockInfoAllocator; +static HardBlockAllocator ChecksumInfoAllocator; +#endif + +static inline checksum_info *alloc_checksum_info(void) +{ + checksum_info *csi = ChecksumInfoAllocator.acquire(); + if (!csi) + return NULL; + csi->next = NULL; + return csi; +} + +static inline void free_checksum_info(checksum_info *csi) +{ + if (!csi) + return; + csi->next = NULL; + ChecksumInfoAllocator.release(csi); +} + +static inline void free_checksum_info_chain(checksum_info *csi) +{ + while (csi != NULL) { + checksum_info *csi2 = csi->next; + free_checksum_info(csi); + csi = csi2; + } +} + +static inline blockinfo *alloc_blockinfo(void) +{ + blockinfo *bi = BlockInfoAllocator.acquire(); + if (!bi) + return NULL; +#if USE_CHECKSUM_INFO + bi->csi = NULL; +#endif + return bi; +} + +static inline void free_blockinfo(blockinfo *bi) +{ + if (!bi) + return; +#if USE_CHECKSUM_INFO + free_checksum_info_chain(bi->csi); + bi->csi = NULL; +#endif + BlockInfoAllocator.release(bi); +} + +static inline bool alloc_blockinfos(void) +{ + int i; + blockinfo* bi; + + for (i=0;i data_endpos || get_target_noopt() + codesize - data_writepos > DATA_BUFFER_MAXOFFSET) + { + // Start new buffer +#if DEBUG + if(data_writepos < data_endpos) + data_wasted += data_endpos - data_writepos; +#endif + compemu_raw_branch(DATA_BUFFER_SIZE); + data_writepos = get_target_noopt(); + data_endpos = data_writepos + DATA_BUFFER_SIZE; + set_target(get_target_noopt() + DATA_BUFFER_SIZE); + } +} + +static inline long data_word_offs(uae_u16 x) +{ + data_check_end(4, 4); +#ifdef WORDS_BIGENDIAN + *((uae_u16*)data_writepos)=x; + data_writepos += 2; + *((uae_u16*)data_writepos)=0; + data_writepos += 2; +#else + *((uae_u32*)data_writepos)=x; + data_writepos += 4; +#endif + return (long)data_writepos - (long)get_target_noopt() - 12; +} + +static inline long data_long(uae_u32 x, long codesize) +{ + data_check_end(4, codesize); + *((uae_u32*)data_writepos)=x; + data_writepos += 4; + return (long)data_writepos - 4; +} + +static inline long data_long_offs(uae_u32 x) +{ + data_check_end(4, 4); + *((uae_u32*)data_writepos)=x; + data_writepos += 4; + return (long)data_writepos - (long)get_target_noopt() - 12; +} + +static inline long get_data_offset(long t) +{ + return t - (long)get_target_noopt() - 8; +} + +static inline void reset_data_buffer(void) +{ + data_writepos = 0; + data_endpos = 0; +} + +#endif +/******************************************************************** + * Getting the information about the target CPU * + ********************************************************************/ + +#if defined(CPU_arm) +#include "codegen_arm.cpp" +#endif +#if defined(CPU_i386) || defined(CPU_x86_64) +#include "codegen_x86.cpp" +#endif + + +/******************************************************************** + * Flags status handling. EMIT TIME! * + ********************************************************************/ + +static void bt_l_ri_noclobber(RR4 r, IMM i); + +static void make_flags_live_internal(void) +{ + if (live.flags_in_flags==VALID) + return; + Dif (live.flags_on_stack==TRASH) { + jit_abort("Want flags, got something on stack, but it is TRASH"); + } + if (live.flags_on_stack==VALID) { + int tmp; + tmp=readreg_specific(FLAGTMP,4,FLAG_NREG2); + raw_reg_to_flags(tmp); + unlock2(tmp); + + live.flags_in_flags=VALID; + return; + } + jit_abort("Huh? live.flags_in_flags=%d, live.flags_on_stack=%d, but need to make live", + live.flags_in_flags,live.flags_on_stack); +} + +static void flags_to_stack(void) +{ + if (live.flags_on_stack==VALID) + return; + if (!live.flags_are_important) { + live.flags_on_stack=VALID; + return; + } + Dif (live.flags_in_flags!=VALID) + jit_abort("flags_to_stack != VALID"); + else { + int tmp; + tmp=writereg_specific(FLAGTMP,4,FLAG_NREG1); + raw_flags_to_reg(tmp); + unlock2(tmp); + } + live.flags_on_stack=VALID; +} + +static inline void clobber_flags(void) +{ + if (live.flags_in_flags==VALID && live.flags_on_stack!=VALID) + flags_to_stack(); + live.flags_in_flags=TRASH; +} + +/* Prepare for leaving the compiled stuff */ +static inline void flush_flags(void) +{ + flags_to_stack(); + return; +} + +int touchcnt; + +/******************************************************************** + * Partial register flushing for optimized calls * + ********************************************************************/ + +struct regusage { + uae_u16 rmask; + uae_u16 wmask; +}; + +#if 0 +static inline void ru_set(uae_u16 *mask, int reg) +{ +#if USE_OPTIMIZED_CALLS + *mask |= 1 << reg; +#else + UNUSED(mask); + UNUSED(reg); +#endif +} + +static inline bool ru_get(const uae_u16 *mask, int reg) +{ +#if USE_OPTIMIZED_CALLS + return (*mask & (1 << reg)); +#else + UNUSED(mask); + UNUSED(reg); + /* Default: instruction reads & write to register */ + return true; +#endif +} + +static inline void ru_set_read(regusage *ru, int reg) +{ + ru_set(&ru->rmask, reg); +} + +static inline void ru_set_write(regusage *ru, int reg) +{ + ru_set(&ru->wmask, reg); +} + +static inline bool ru_read_p(const regusage *ru, int reg) +{ + return ru_get(&ru->rmask, reg); +} + +static inline bool ru_write_p(const regusage *ru, int reg) +{ + return ru_get(&ru->wmask, reg); +} + +static void ru_fill_ea(regusage *ru, int reg, amodes mode, + wordsizes size, int write_mode) +{ + switch (mode) { + case Areg: + reg += 8; + /* fall through */ + case Dreg: + ru_set(write_mode ? &ru->wmask : &ru->rmask, reg); + break; + case Ad16: + /* skip displacement */ + m68k_pc_offset += 2; + case Aind: + case Aipi: + case Apdi: + ru_set_read(ru, reg+8); + break; + case Ad8r: + ru_set_read(ru, reg+8); + /* fall through */ + case PC8r: { + uae_u16 dp = comp_get_iword((m68k_pc_offset+=2)-2); + reg = (dp >> 12) & 15; + ru_set_read(ru, reg); + if (dp & 0x100) + m68k_pc_offset += (((dp & 0x30) >> 3) & 7) + ((dp & 3) * 2); + break; + } + case PC16: + case absw: + case imm0: + case imm1: + m68k_pc_offset += 2; + break; + case absl: + case imm2: + m68k_pc_offset += 4; + break; + case immi: + m68k_pc_offset += (size == sz_long) ? 4 : 2; + break; + } +} + +/* TODO: split into a static initialization part and a dynamic one + (instructions depending on extension words) */ + +static void ru_fill(regusage *ru, uae_u32 opcode) +{ + m68k_pc_offset += 2; + + /* Default: no register is used or written to */ + ru->rmask = 0; + ru->wmask = 0; + + uae_u32 real_opcode = cft_map(opcode); + struct instr *dp = &table68k[real_opcode]; + + bool rw_dest = true; + bool handled = false; + + /* Handle some instructions specifically */ + uae_u16 ext; + switch (dp->mnemo) { + case i_BFCHG: + case i_BFCLR: + case i_BFEXTS: + case i_BFEXTU: + case i_BFFFO: + case i_BFINS: + case i_BFSET: + case i_BFTST: + ext = comp_get_iword((m68k_pc_offset+=2)-2); + if (ext & 0x800) ru_set_read(ru, (ext >> 6) & 7); + if (ext & 0x020) ru_set_read(ru, ext & 7); + ru_fill_ea(ru, dp->dreg, (amodes)dp->dmode, (wordsizes)dp->size, 1); + if (dp->dmode == Dreg) + ru_set_read(ru, dp->dreg); + switch (dp->mnemo) { + case i_BFEXTS: + case i_BFEXTU: + case i_BFFFO: + ru_set_write(ru, (ext >> 12) & 7); + break; + case i_BFINS: + ru_set_read(ru, (ext >> 12) & 7); + /* fall through */ + case i_BFCHG: + case i_BFCLR: + case i_BSET: + if (dp->dmode == Dreg) + ru_set_write(ru, dp->dreg); + break; + } + handled = true; + rw_dest = false; + break; + + case i_BTST: + rw_dest = false; + break; + + case i_CAS: + { + ext = comp_get_iword((m68k_pc_offset+=2)-2); + int Du = ext & 7; + ru_set_read(ru, Du); + int Dc = (ext >> 6) & 7; + ru_set_read(ru, Dc); + ru_set_write(ru, Dc); + break; + } + case i_CAS2: + { + int Dc1, Dc2, Du1, Du2, Rn1, Rn2; + ext = comp_get_iword((m68k_pc_offset+=2)-2); + Rn1 = (ext >> 12) & 15; + Du1 = (ext >> 6) & 7; + Dc1 = ext & 7; + ru_set_read(ru, Rn1); + ru_set_read(ru, Du1); + ru_set_read(ru, Dc1); + ru_set_write(ru, Dc1); + ext = comp_get_iword((m68k_pc_offset+=2)-2); + Rn2 = (ext >> 12) & 15; + Du2 = (ext >> 6) & 7; + Dc2 = ext & 7; + ru_set_read(ru, Rn2); + ru_set_read(ru, Du2); + ru_set_write(ru, Dc2); + break; + } + case i_DIVL: case i_MULL: + m68k_pc_offset += 2; + break; + case i_LEA: + case i_MOVE: case i_MOVEA: case i_MOVE16: + rw_dest = false; + break; + case i_PACK: case i_UNPK: + rw_dest = false; + m68k_pc_offset += 2; + break; + case i_TRAPcc: + m68k_pc_offset += (dp->size == sz_long) ? 4 : 2; + break; + case i_RTR: + /* do nothing, just for coverage debugging */ + break; + /* TODO: handle EXG instruction */ + } + + /* Handle A-Traps better */ + if ((real_opcode & 0xf000) == 0xa000) { + handled = true; + } + + /* Handle EmulOps better */ + if ((real_opcode & 0xff00) == 0x7100) { + handled = true; + ru->rmask = 0xffff; + ru->wmask = 0; + } + + if (dp->suse && !handled) + ru_fill_ea(ru, dp->sreg, (amodes)dp->smode, (wordsizes)dp->size, 0); + + if (dp->duse && !handled) + ru_fill_ea(ru, dp->dreg, (amodes)dp->dmode, (wordsizes)dp->size, 1); + + if (rw_dest) + ru->rmask |= ru->wmask; + + handled = handled || dp->suse || dp->duse; + + /* Mark all registers as used/written if the instruction may trap */ + if (may_trap(opcode)) { + handled = true; + ru->rmask = 0xffff; + ru->wmask = 0xffff; + } + + if (!handled) { + jit_abort("ru_fill: %04x = { %04x, %04x }", + real_opcode, ru->rmask, ru->wmask); + } +} +#endif + +/******************************************************************** + * register allocation per block logging * + ********************************************************************/ + +static uae_s8 vstate[VREGS]; +static uae_s8 vwritten[VREGS]; +static uae_s8 nstate[N_REGS]; + +#define L_UNKNOWN -127 +#define L_UNAVAIL -1 +#define L_NEEDED -2 +#define L_UNNEEDED -3 + +#if USE_MATCH +static inline void big_to_small_state(bigstate * /* b */, smallstate * s) +{ + int i; + + for (i = 0; i < VREGS; i++) + s->virt[i] = vstate[i]; + for (i = 0; i < N_REGS; i++) + s->nat[i] = nstate[i]; +} + +static inline int callers_need_recompile(bigstate * /* b */, smallstate * s) +{ + int i; + int reverse = 0; + + for (i = 0; i < VREGS; i++) { + if (vstate[i] != L_UNNEEDED && s->virt[i] == L_UNNEEDED) + return 1; + if (vstate[i] == L_UNNEEDED && s->virt[i] != L_UNNEEDED) + reverse++; + } + for (i = 0; i < N_REGS; i++) { + if (nstate[i] >= 0 && nstate[i] != s->nat[i]) + return 1; + if (nstate[i] < 0 && s->nat[i] >= 0) + reverse++; + } + if (reverse >= 2 && USE_MATCH) + return 1; /* In this case, it might be worth recompiling the + * callers */ + return 0; +} +#endif + +static inline void log_startblock(void) +{ + int i; + + for (i = 0; i < VREGS; i++) { + vstate[i] = L_UNKNOWN; + vwritten[i] = 0; + } + for (i = 0; i < N_REGS; i++) + nstate[i] = L_UNKNOWN; +} + +/* Using an n-reg for a temp variable */ +static inline void log_isused(int n) +{ + if (nstate[n] == L_UNKNOWN) + nstate[n] = L_UNAVAIL; +} + +static inline void log_visused(int r) +{ + if (vstate[r] == L_UNKNOWN) + vstate[r] = L_NEEDED; +} + +static inline void do_load_reg(int n, int r) +{ + if (r == FLAGTMP) + raw_load_flagreg(n); + else if (r == FLAGX) + raw_load_flagx(n); +#if X86_TARGET_64BIT + else if (r == PC_P) { + /* PC_P holds a 64-bit host pointer - must use 64-bit load */ + raw_mov_q_rm(n, (uintptr)live.state[r].mem); + } +#endif + else + compemu_raw_mov_l_rm(n, JITPTR live.state[r].mem); +} + +#if 0 +static inline void check_load_reg(int n, int r) +{ + compemu_raw_mov_l_rm(n, (uintptr) live.state[r].mem); +} +#endif + +static inline void log_vwrite(int r) +{ + vwritten[r] = 1; +} + +/* Using an n-reg to hold a v-reg */ +static inline void log_isreg(int n, int r) +{ + if (nstate[n] == L_UNKNOWN && r < 16 && !vwritten[r] && USE_MATCH) + nstate[n] = r; + else { + do_load_reg(n, r); + if (nstate[n] == L_UNKNOWN) + nstate[n] = L_UNAVAIL; + } + if (vstate[r] == L_UNKNOWN) + vstate[r] = L_NEEDED; +} + +static inline void log_clobberreg(int r) +{ + if (vstate[r] == L_UNKNOWN) + vstate[r] = L_UNNEEDED; +} + +/* This ends all possibility of clever register allocation */ + +static inline void log_flush(void) +{ + int i; + + for (i = 0; i < VREGS; i++) + if (vstate[i] == L_UNKNOWN) + vstate[i] = L_NEEDED; + for (i = 0; i < N_REGS; i++) + if (nstate[i] == L_UNKNOWN) + nstate[i] = L_UNAVAIL; +} + +static inline void log_dump(void) +{ + int i; + + return; + + jit_log("----------------------"); + for (i = 0; i < N_REGS; i++) { + switch (nstate[i]) { + case L_UNKNOWN: + jit_log("Nat %d : UNKNOWN", i); + break; + case L_UNAVAIL: + jit_log("Nat %d : UNAVAIL", i); + break; + default: + jit_log("Nat %d : %d", i, nstate[i]); + break; + } + } + for (i = 0; i < VREGS; i++) { + if (vstate[i] == L_UNNEEDED) { + jit_log("Virt %d: UNNEEDED", i); + } + } +} + +/******************************************************************** + * register status handling. EMIT TIME! * + ********************************************************************/ + +static inline void set_status(int r, int status) +{ + if (status == ISCONST) + log_clobberreg(r); + live.state[r].status=status; +} + +static inline int isinreg(int r) +{ + return live.state[r].status==CLEAN || live.state[r].status==DIRTY; +} + +static inline void adjust_nreg(int r, uintptr val) +{ + if (!val) + return; + compemu_raw_lea_l_brr(r,r,val); +} + +#if X86_TARGET_64BIT +static inline void free_nreg(int r); + +static inline bool x86_imm_fits_s32(uintptr i) +{ + const intptr_t si = static_cast(i); + return si >= static_cast(-2147483647 - 1) && + si <= static_cast(2147483647); +} + +static inline int get_unlocked_scratch_nreg_excluding(int avoid1, int avoid2) +{ + static const int candidates[] = { + R11_INDEX, R10_INDEX, R9_INDEX, R8_INDEX, + EAX_INDEX, ECX_INDEX, EDX_INDEX, EBX_INDEX, + EBP_INDEX, ESI_INDEX, EDI_INDEX, R13_INDEX, R14_INDEX + }; + + for (int r : candidates) { + if (r != avoid1 && r != avoid2 && !live.nat[r].locked) + return r; + } + + jit_abort("No unlocked scratch register for 64-bit pointer operation"); + return R11_INDEX; +} + +static inline int get_unlocked_scratch_nreg(void) +{ + return get_unlocked_scratch_nreg_excluding(-1, -1); +} + +static inline void x86_add_q_ri_ptr(int d, uintptr i, int avoid = -1) +{ + if (x86_imm_fits_s32(i)) { + ADDQir(static_cast(i), d); + } else { + const int scratch = get_unlocked_scratch_nreg_excluding(d, avoid); + free_nreg(scratch); + MOVQir(i, scratch); + ADDQrr(scratch, d); + } +} + +static inline void copy_vreg_nreg(int vreg, int dst, int src) +{ + if (vreg == PC_P) { + MOVQrr(src, dst); + } else { + compemu_raw_mov_l_rr(dst, src); + } +} + +static inline void adjust_vreg_nreg(int vreg, int nreg, uintptr val) +{ + if (!val) + return; + if (vreg == PC_P) { + const intptr_t svalue = static_cast(val); + if (svalue >= static_cast(-2147483647 - 1) && + svalue <= static_cast(2147483647)) { + LEAQmr(static_cast(svalue), nreg, X86_NOREG, 1, nreg); + } else { + x86_add_q_ri_ptr(nreg, val); + } + } else { + adjust_nreg(nreg, val); + } +} +#else +static inline void copy_vreg_nreg(int /* vreg */, int dst, int src) +{ + compemu_raw_mov_l_rr(dst, src); +} + +static inline void adjust_vreg_nreg(int /* vreg */, int nreg, uintptr val) +{ + adjust_nreg(nreg, val); +} +#endif + +static void tomem(int r) +{ + int rr=live.state[r].realreg; + + if (isinreg(r)) { + if (live.state[r].val && live.nat[rr].nholds==1 + && !live.nat[rr].locked) { + jit_log2("RemovingA offset %x from reg %d (%d) at %p", live.state[r].val,r,rr,target); + adjust_vreg_nreg(r,rr,live.state[r].val); + live.state[r].val=0; + live.state[r].dirtysize=4; + set_status(r,DIRTY); + } + } + + if (live.state[r].status==DIRTY) { + switch (live.state[r].dirtysize) { + case 1: compemu_raw_mov_b_mr(JITPTR live.state[r].mem,rr); break; + case 2: compemu_raw_mov_w_mr(JITPTR live.state[r].mem,rr); break; + case 4: +#if X86_TARGET_64BIT + if (r == PC_P) { + /* PC_P holds a 64-bit host pointer - must use 64-bit store */ + raw_mov_q_mr((uintptr)live.state[r].mem, rr); + } else +#endif + { + compemu_raw_mov_l_mr(JITPTR live.state[r].mem, rr); + } + break; + default: abort(); + } + log_vwrite(r); + set_status(r,CLEAN); + live.state[r].dirtysize=0; + } +} + +static inline int isconst(int r) +{ + return live.state[r].status==ISCONST; +} + +#if X86_TARGET_64BIT +static inline void store_const_q_mi(uintptr d, uintptr s) +{ + int scratch = get_unlocked_scratch_nreg(); + free_nreg(scratch); + raw_mov_q_ri(scratch, s); + raw_mov_q_mr(d, scratch); +} +#endif + +int is_const(int r) +{ + return isconst(r); +} + +static inline void writeback_const(int r) +{ + if (!isconst(r)) + return; + Dif (live.state[r].needflush==NF_HANDLER) { + jit_abort("Trying to write back constant NF_HANDLER!"); + } + +#if X86_TARGET_64BIT + if (r == PC_P) { + /* PC_P holds a 64-bit host pointer and needs allocator-aware scratch use. */ + store_const_q_mi((uintptr)live.state[r].mem, live.state[r].val); + } else +#endif + { + compemu_raw_mov_l_mi(JITPTR live.state[r].mem, live.state[r].val); + } + log_vwrite(r); + live.state[r].val=0; + set_status(r,INMEM); +} + +static inline void tomem_c(int r) +{ + if (isconst(r)) { + writeback_const(r); + } + else + tomem(r); +} + +static void evict(int r) +{ + int rr; + + if (!isinreg(r)) + return; + tomem(r); + rr=live.state[r].realreg; + + Dif (live.nat[rr].locked && + live.nat[rr].nholds==1) { + jit_abort("register %d in nreg %d is locked!",r,live.state[r].realreg); + } + + live.nat[rr].nholds--; + if (live.nat[rr].nholds!=live.state[r].realind) { /* Was not last */ + int topreg=live.nat[rr].holds[live.nat[rr].nholds]; + int thisind=live.state[r].realind; + + live.nat[rr].holds[thisind]=topreg; + live.state[topreg].realind=thisind; + } + live.state[r].realreg=-1; + set_status(r,INMEM); +} + +static inline void free_nreg(int r) +{ + int i=live.nat[r].nholds; + + while (i) { + int vr; + + --i; + vr=live.nat[r].holds[i]; + evict(vr); + } + Dif (live.nat[r].nholds!=0) { + jit_abort("Failed to free nreg %d, nholds is %d",r,live.nat[r].nholds); + } +} + +/* Use with care! */ +static inline void isclean(int r) +{ + if (!isinreg(r)) + return; + live.state[r].validsize=4; + live.state[r].dirtysize=0; + live.state[r].val=0; + set_status(r,CLEAN); +} + +static inline void disassociate(int r) +{ + isclean(r); + evict(r); +} + +static inline void set_const(int r, uintptr val) +{ + disassociate(r); +#if X86_TARGET_64BIT + /* Guest Dn/An/flag virtual registers are 32-bit M68K values. + PC_P is the only virtual register that may hold a 64-bit host pointer. */ + if (r != PC_P) + val = (uae_u32)val; +#endif + live.state[r].val=val; + set_status(r,ISCONST); +} + +static inline uae_u32 get_offset(int r) +{ + return live.state[r].val; +} + +static int alloc_reg_hinted(int r, int size, int willclobber, int hint) +{ + int bestreg; + uae_s32 when; + int i; + uae_s32 badness=0; /* to shut up gcc */ + bestreg=-1; + when=2000000000; + + /* XXX use a regalloc_order table? */ + for (i=0;i0) { + free_nreg(bestreg); + } + if (isinreg(r)) { + int rr=live.state[r].realreg; + /* This will happen if we read a partially dirty register at a + bigger size */ + Dif (willclobber || live.state[r].validsize>=size) + jit_abort("willclobber || live.state[r].validsize>=size"); + Dif (live.nat[rr].nholds!=1) + jit_abort("live.nat[rr].nholds!=1"); + if (size==4 && live.state[r].validsize==2) { + log_isused(bestreg); + log_visused(r); + compemu_raw_mov_l_rm(bestreg, JITPTR live.state[r].mem); + compemu_raw_bswap_32(bestreg); + compemu_raw_zero_extend_16_rr(rr,rr); + compemu_raw_zero_extend_16_rr(bestreg,bestreg); + compemu_raw_bswap_32(bestreg); + compemu_raw_lea_l_rr_indexed(rr, rr, bestreg, 1); + live.state[r].validsize=4; + live.nat[rr].touched=touchcnt++; + return rr; + } + if (live.state[r].validsize==1) { + /* Nothing yet */ + } + evict(r); + } + + if (!willclobber) { + if (live.state[r].status!=UNDEF) { + if (isconst(r)) { +#if X86_TARGET_64BIT + if (r == PC_P || live.state[r].val > (uintptr)0xffffffff) { + /* PC_P and temporary host pointers need the full 64-bit value. */ + raw_mov_q_ri(bestreg, live.state[r].val); + } else +#endif + { + compemu_raw_mov_l_ri(bestreg, live.state[r].val); + } + live.state[r].val=0; + live.state[r].dirtysize=4; + set_status(r,DIRTY); + log_isused(bestreg); + } + else { + log_isreg(bestreg, r); /* This will also load it! */ + live.state[r].dirtysize=0; + set_status(r,CLEAN); + } + } + else { + live.state[r].val=0; + live.state[r].dirtysize=0; + set_status(r,CLEAN); + log_isused(bestreg); + } + live.state[r].validsize=4; + } + else { /* this is the easiest way, but not optimal. FIXME! */ + /* Now it's trickier, but hopefully still OK */ + if (!isconst(r) || size==4) { + live.state[r].validsize=size; + live.state[r].dirtysize=size; + live.state[r].val=0; + set_status(r,DIRTY); + if (size == 4) { + log_clobberreg(r); + log_isused(bestreg); + } + else { + log_visused(r); + log_isused(bestreg); + } + } + else { + if (live.state[r].status!=UNDEF) { +#if X86_TARGET_64BIT + if (r == PC_P || live.state[r].val > (uintptr)0xffffffff) { + raw_mov_q_ri(bestreg, live.state[r].val); + } else +#endif + { + compemu_raw_mov_l_ri(bestreg, live.state[r].val); + } + } + live.state[r].val=0; + live.state[r].validsize=4; + live.state[r].dirtysize=4; + set_status(r,DIRTY); + log_isused(bestreg); + } + } + live.state[r].realreg=bestreg; + live.state[r].realind=live.nat[bestreg].nholds; + live.nat[bestreg].touched=touchcnt++; + live.nat[bestreg].holds[live.nat[bestreg].nholds]=r; + live.nat[bestreg].nholds++; + + return bestreg; +} + +/* +static int alloc_reg(int r, int size, int willclobber) +{ + return alloc_reg_hinted(r,size,willclobber,-1); +} +*/ + +static void unlock2(int r) +{ + Dif (!live.nat[r].locked) + jit_abort("unlock2 %d not locked", r); + live.nat[r].locked--; +} + +static void setlock(int r) +{ + live.nat[r].locked++; +} + + +static void mov_nregs(int d, int s) +{ + int nd=live.nat[d].nholds; + int i; + + if (s==d) + return; + + if (nd>0) + free_nreg(d); + + log_isused(d); + compemu_raw_mov_l_rr(d,s); + + for (i=0;i=size) { + n=live.state[r].realreg; + switch(size) { + case 1: + if (live.nat[n].canbyte || spec>=0) { + answer=n; + } + break; + case 2: + if (live.nat[n].canword || spec>=0) { + answer=n; + } + break; + case 4: + answer=n; + break; + default: abort(); + } + if (answer<0) + evict(r); + } + /* either the value was in memory to start with, or it was evicted and + is in memory now */ + if (answer<0) { + answer=alloc_reg_hinted(r,spec>=0?4:size,0,spec); + } + + if (spec>=0 && spec!=answer) { + /* Too bad */ + mov_nregs(spec,answer); + answer=spec; + } + live.nat[answer].locked++; + live.nat[answer].touched=touchcnt++; + return answer; +} + + + +static int readreg(int r, int size) +{ + return readreg_general(r,size,-1,0); +} + +static int readreg_specific(int r, int size, int spec) +{ + return readreg_general(r,size,spec,0); +} + +static int readreg_offset(int r, int size) +{ + return readreg_general(r,size,-1,1); +} + +/* writereg_general(r, size, spec) + * + * INPUT + * - r : mid-layer register + * - size : requested size (1/2/4) + * - spec : -1 if find or make a register free, otherwise specifies + * the physical register to use in any case + * + * OUTPUT + * - hard (physical, x86 here) register allocated to virtual register r + */ +static inline int writereg_general(int r, int size, int spec) +{ + int n; + int answer=-1; + + record_register(r); + if (size<4) { + remove_offset(r,spec); + } + + make_exclusive(r,size,spec); + if (isinreg(r)) { + int nvsize=size>live.state[r].validsize?size:live.state[r].validsize; + int ndsize=size>live.state[r].dirtysize?size:live.state[r].dirtysize; + n=live.state[r].realreg; + + Dif (live.nat[n].nholds!=1) + jit_abort("live.nat[%d].nholds!=1", n); + switch(size) { + case 1: + if (live.nat[n].canbyte || spec>=0) { + live.state[r].dirtysize=ndsize; + live.state[r].validsize=nvsize; + answer=n; + } + break; + case 2: + if (live.nat[n].canword || spec>=0) { + live.state[r].dirtysize=ndsize; + live.state[r].validsize=nvsize; + answer=n; + } + break; + case 4: + live.state[r].dirtysize=ndsize; + live.state[r].validsize=nvsize; + answer=n; + break; + default: abort(); + } + if (answer<0) + evict(r); + } + /* either the value was in memory to start with, or it was evicted and + is in memory now */ + if (answer<0) { + answer=alloc_reg_hinted(r,size,1,spec); + } + if (spec>=0 && spec!=answer) { + mov_nregs(spec,answer); + answer=spec; + } + if (live.state[r].status==UNDEF) + live.state[r].validsize=4; + live.state[r].dirtysize=size>live.state[r].dirtysize?size:live.state[r].dirtysize; + live.state[r].validsize=size>live.state[r].validsize?size:live.state[r].validsize; + + live.nat[answer].locked++; + live.nat[answer].touched=touchcnt++; + if (size==4) { + live.state[r].val=0; + } + else { + Dif (live.state[r].val) { + jit_abort("Problem with val"); + } + } + set_status(r,DIRTY); + return answer; +} + +static int writereg(int r, int size) +{ + return writereg_general(r,size,-1); +} + +static int writereg_specific(int r, int size, int spec) +{ + return writereg_general(r,size,spec); +} + +static inline int rmw_general(int r, int wsize, int rsize, int spec) +{ + int n; + int answer=-1; + + record_register(r); + if (live.state[r].status==UNDEF) { + jit_log("WARNING: Unexpected read of undefined register %d",r); + } + remove_offset(r,spec); + make_exclusive(r,0,spec); + + Dif (wsize=rsize) { + n=live.state[r].realreg; + Dif (live.nat[n].nholds!=1) + jit_abort("live.nat[%d].nholds!=1", n); + + switch(rsize) { + case 1: + if (live.nat[n].canbyte || spec>=0) { + answer=n; + } + break; + case 2: + if (live.nat[n].canword || spec>=0) { + answer=n; + } + break; + case 4: + answer=n; + break; + default: abort(); + } + if (answer<0) + evict(r); + } + /* either the value was in memory to start with, or it was evicted and + is in memory now */ + if (answer<0) { + answer=alloc_reg_hinted(r,spec>=0?4:rsize,0,spec); + } + + if (spec>=0 && spec!=answer) { + /* Too bad */ + mov_nregs(spec,answer); + answer=spec; + } + if (wsize>live.state[r].dirtysize) + live.state[r].dirtysize=wsize; + if (wsize>live.state[r].validsize) + live.state[r].validsize=wsize; + set_status(r,DIRTY); + + live.nat[answer].locked++; + live.nat[answer].touched=touchcnt++; + + Dif (live.state[r].val) { + jit_abort("Problem with val(rmw)"); + } + return answer; +} + +static int rmw(int r, int wsize, int rsize) +{ + return rmw_general(r,wsize,rsize,-1); +} + +static int rmw_specific(int r, int wsize, int rsize, int spec) +{ + return rmw_general(r,wsize,rsize,spec); +} + + +/* needed for restoring the carry flag on non-P6 cores */ +static void bt_l_ri_noclobber(RR4 r, IMM i) +{ + int size=4; + if (i<16) + size=2; + r=readreg(r,size); + compemu_raw_bt_l_ri(r,i); + unlock2(r); +} + +/******************************************************************** + * FPU register status handling. EMIT TIME! * + ********************************************************************/ + +static void f_tomem(int r) +{ + if (live.fate[r].status==DIRTY) { +#ifdef USE_LONG_DOUBLE + if (use_long_double) { + raw_fmov_ext_mr((uintptr)live.fate[r].mem, live.fate[r].realreg); + } else { +#endif + raw_fmov_mr((uintptr)live.fate[r].mem, live.fate[r].realreg); +#ifdef USE_LONG_DOUBLE + } +#endif + live.fate[r].status=CLEAN; + } +} + +static void f_tomem_drop(int r) +{ + if (live.fate[r].status==DIRTY) { +#ifdef USE_LONG_DOUBLE + if (use_long_double) { + raw_fmov_ext_mr_drop((uintptr)live.fate[r].mem, live.fate[r].realreg); + } else { +#endif + raw_fmov_mr_drop((uintptr)live.fate[r].mem,live.fate[r].realreg); +#ifdef USE_LONG_DOUBLE + } +#endif + live.fate[r].status=INMEM; + } +} + + +static inline int f_isinreg(int r) +{ + return live.fate[r].status==CLEAN || live.fate[r].status==DIRTY; +} + +static void f_evict(int r) +{ + int rr; + + if (!f_isinreg(r)) + return; + rr=live.fate[r].realreg; + if (live.fat[rr].nholds==1) + f_tomem_drop(r); + else + f_tomem(r); + + Dif (live.fat[rr].locked && + live.fat[rr].nholds==1) { + jit_abort("FPU register %d in nreg %d is locked!",r,live.fate[r].realreg); + } + + live.fat[rr].nholds--; + if (live.fat[rr].nholds!=live.fate[r].realind) { /* Was not last */ + int topreg=live.fat[rr].holds[live.fat[rr].nholds]; + int thisind=live.fate[r].realind; + live.fat[rr].holds[thisind]=topreg; + live.fate[topreg].realind=thisind; + } + live.fate[r].status=INMEM; + live.fate[r].realreg=-1; +} + +static inline void f_free_nreg(int r) +{ + int i=live.fat[r].nholds; + + while (i) { + int vr; + + --i; + vr=live.fat[r].holds[i]; + f_evict(vr); + } + Dif (live.fat[r].nholds!=0) { + jit_abort("Failed to free nreg %d, nholds is %d",r,live.fat[r].nholds); + } +} + + +/* Use with care! */ +static inline void f_isclean(int r) +{ + if (!f_isinreg(r)) + return; + live.fate[r].status=CLEAN; +} + +static inline void f_disassociate(int r) +{ + f_isclean(r); + f_evict(r); +} + + + +static int f_alloc_reg(int r, int willclobber) +{ + int bestreg; + uae_s32 when; + int i; + uae_s32 badness; + bestreg=-1; + when=2000000000; + for (i=N_FREGS;i--;) { + badness=live.fat[i].touched; + if (live.fat[i].nholds==0) + badness=0; + + if (!live.fat[i].locked && badness0) { + f_free_nreg(bestreg); + } + if (f_isinreg(r)) { + f_evict(r); + } + + if (!willclobber) { + if (live.fate[r].status!=UNDEF) { +#ifdef USE_LONG_DOUBLE + if (use_long_double) { + raw_fmov_ext_rm(bestreg, (uintptr)live.fate[r].mem); + } else { +#endif + raw_fmov_rm(bestreg,(uintptr)live.fate[r].mem); +#ifdef USE_LONG_DOUBLE + } +#endif + } + live.fate[r].status=CLEAN; + } + else { + live.fate[r].status=DIRTY; + } + live.fate[r].realreg=bestreg; + live.fate[r].realind=live.fat[bestreg].nholds; + live.fat[bestreg].touched=touchcnt++; + live.fat[bestreg].holds[live.fat[bestreg].nholds]=r; + live.fat[bestreg].nholds++; + + return bestreg; +} + +static void f_unlock(int r) +{ + Dif (!live.fat[r].locked) + jit_abort ("unlock %d", r); + live.fat[r].locked--; +} + +static void f_setlock(int r) +{ + live.fat[r].locked++; +} + +static inline int f_readreg(int r) +{ + int n; + int answer=-1; + + if (f_isinreg(r)) { + n=live.fate[r].realreg; + answer=n; + } + /* either the value was in memory to start with, or it was evicted and + is in memory now */ + if (answer<0) + answer=f_alloc_reg(r,0); + + live.fat[answer].locked++; + live.fat[answer].touched=touchcnt++; + return answer; +} + +static inline void f_make_exclusive(int r, int clobber) +{ + freg_status oldstate; + int rr=live.fate[r].realreg; + int nr; + int nind; + int ndirt=0; + int i; + + if (!f_isinreg(r)) + return; + if (live.fat[rr].nholds==1) + return; + for (i=0;i= (uintptr)kickmem_bank.baseaddr && + addr < (uintptr)kickmem_bank.baseaddr + 8 * 65536) { + return 1; + } + if (rtarea_bank.baseaddr && + addr >= (uintptr)rtarea_bank.baseaddr && + addr < (uintptr)rtarea_bank.baseaddr + 65536) { + return 1; + } + return 0; +#else + return ((addr >= (uintptr)ROMBaseHost) && (addr < (uintptr)ROMBaseHost + ROMSize)); +#endif +} + +#if defined(UAE) || defined(FLIGHT_RECORDER) +static void flush_all(void) +{ + int i; + + log_flush(); + for (i=0;i0) + free_nreg(i); + + for (i=0;i0) + f_free_nreg(i); + + live.flags_in_flags=TRASH; /* Note: We assume we already rescued the + flags at the very start of the call_r + functions! */ +} +#endif + +#if defined(CPU_arm) +#include "compemu_midfunc_arm.cpp" + +#if defined(USE_JIT2) +#include "compemu_midfunc_arm2.cpp" +#endif +#endif + +#if defined(CPU_i386) || defined(CPU_x86_64) +#include "compemu_midfunc_x86.cpp" +#endif + + +/******************************************************************** + * Support functions exposed to gencomp. CREATE time * + ********************************************************************/ + +void set_zero(int r, int tmp) +{ + if (setzflg_uses_bsf) + bsf_l_rr(r,r); + else + simulate_bsf(tmp,r); +} + +int kill_rodent(int r) +{ + return KILLTHERAT && + have_rat_stall && + (live.state[r].status==INMEM || + live.state[r].status==CLEAN || + live.state[r].status==ISCONST || + live.state[r].dirtysize==4); +} + +uintptr get_const(int r) +{ + Dif (!isconst(r)) { + jit_abort("Register %d should be constant, but isn't",r); + } + return live.state[r].val; +} + +void sync_m68k_pc(void) +{ + if (m68k_pc_offset) { + add_l_ri(PC_P,m68k_pc_offset); + comp_pc_p+=m68k_pc_offset; + m68k_pc_offset=0; + } +} + +static inline uae_u32 get_virtual_compile_pc(uintptr native_pc) +{ + uae_u32 m68k_pc = (uae_u32)(start_pc + ((char*)native_pc - (char*)start_pc_p)); +#ifdef NATMEM_OFFSET + if (natmem_offset && native_pc >= (uintptr)natmem_offset && + native_pc < (uintptr)natmem_offset + (uintptr)0x100000000ULL) { + m68k_pc = (uae_u32)(native_pc - (uintptr)natmem_offset); + } +#endif + return m68k_pc; +} + +static uintptr compiled_exception_native_pc; +static uae_u32 compiled_exception_opcode; +static bool compiled_exception_state_valid; +static bool compiled_exception_state_emitted; + +static inline void prepare_compiled_exception_state(uintptr native_pc, uae_u32 opcode) +{ + compiled_exception_native_pc = native_pc; + compiled_exception_opcode = opcode; + compiled_exception_state_valid = true; + compiled_exception_state_emitted = false; +} + +static inline void sync_compiled_exception_state(void) +{ + if (!compiled_exception_state_valid || compiled_exception_state_emitted) + return; + + uae_u32 m68k_pc = get_virtual_compile_pc(compiled_exception_native_pc); + raw_mov_l_mi((uintptr)®s.instruction_pc, m68k_pc); + raw_mov_w_mi((uintptr)®s.opcode, compiled_exception_opcode); + raw_mov_w_mi((uintptr)®s.ir, compiled_exception_opcode); + compiled_exception_state_emitted = true; +} + +/* for building exception frames */ +void compemu_exc_make_frame(int format, int sr, int ret, int nr, int tmp) +{ + lea_l_brr(SP_REG, SP_REG, -2); + mov_l_ri(tmp, (format << 12) + (nr * 4)); /* format | vector */ + writeword(SP_REG, tmp, tmp); + + lea_l_brr(SP_REG, SP_REG, -4); + writelong(SP_REG, ret, tmp); + + lea_l_brr(SP_REG, SP_REG, -2); + writeword_clobber(SP_REG, sr, tmp); + remove_offset(SP_REG, -1); + if (isinreg(SP_REG)) + evict(SP_REG); + else + flush_reg(SP_REG); +} + +void compemu_make_sr(int sr, int tmp) +{ + flush_flags(); /* low level */ + flush_reg(FLAGX); + +#if defined (OPTIMIZED_FLAGS) || defined(UAE) + + /* + * x86 EFLAGS: (!SAHF_SETO_PROFITABLE) + * FEDCBA98 76543210 + * ----V--- NZ-----C + * + * <--AH--> <--AL--> (SAHF_SETO_PROFITABLE) + * FEDCBA98 76543210 + * NZxxxxxC xxxxxxxV + * + * arm RFLAGS: + * FEDCBA98 76543210 FEDCBA98 76543210 + * NZCV---- -------- -------- -------- + * + * -> m68k SR: + * --S--III ---XNZVC + * + * Master-Bit and traceflags are ignored here, + * since they are not emulated in JIT code + */ + mov_l_rm(sr, uae_p32(live.state[FLAGTMP].mem)); + mov_l_ri(tmp, FLAGVAL_N|FLAGVAL_Z|FLAGVAL_V|FLAGVAL_C); + and_l(sr, tmp); + mov_l_rr(tmp, sr); + +#if (defined(CPU_i386) && defined(X86_ASSEMBLY)) || (defined(CPU_x86_64) && defined(X86_64_ASSEMBLY)) +#ifndef SAHF_SETO_PROFITABLE + ror_b_ri(sr, FLAGBIT_N - 3); /* move NZ into position; C->4 */ + shrl_w_ri(tmp, FLAGBIT_V - 1); /* move V into position in tmp */ + or_l(sr, tmp); /* or V flag to SR */ + mov_l_rr(tmp, sr); + shrl_b_ri(tmp, (8 - (FLAGBIT_N - 3)) - FLAGBIT_C); /* move C into position in tmp */ + or_l(sr, tmp); /* or C flag to SR */ +#else + ror_w_ri(sr, FLAGBIT_N - 3); /* move NZ in position; V->4, C->12 */ + shrl_w_ri(tmp, (16 - (FLAGBIT_N - 3)) - FLAGBIT_V - 1); /* move V into position in tmp; C->9 */ + or_l(sr, tmp); /* or V flag to SR */ + shrl_w_ri(tmp, FLAGBIT_C + FLAGBIT_V - 1); /* move C into position in tmp */ + or_l(sr, tmp); /* or C flag to SR */ +#endif + mov_l_ri(tmp, 0x0f); + and_l(sr, tmp); + + mov_b_rm(tmp, uae_p32(®flags.x)); + and_l_ri(tmp, FLAGVAL_X); + shll_l_ri(tmp, 4); + or_l(sr, tmp); + +#elif defined(CPU_arm) && defined(ARM_ASSEMBLY) + shrl_l_ri(sr, FLAGBIT_N - 3); /* move NZ into position */ + ror_l_ri(tmp, FLAGBIT_C - 1); /* move C into position in tmp; V->31 */ + and_l_ri(sr, 0xc); + or_l(sr, tmp); /* or C flag to SR */ + shrl_l_ri(tmp, 31); /* move V into position in tmp */ + or_l(sr, tmp); /* or V flag to SR */ + + mov_b_rm(tmp, uae_p32(®flags.x)); + and_l_ri(tmp, FLAGVAL_X); + shrl_l_ri(tmp, FLAGBIT_X - 4); + or_l(sr, tmp); + +#else +#error "unknown CPU" +#endif + +#else + + xor_l(sr, sr); + xor_l(tmp, tmp); + mov_b_rm(tmp, uae_p32(®s.c)); + shll_l_ri(tmp, 0); + or_l(sr, tmp); + mov_b_rm(tmp, uae_p32(®s.v)); + shll_l_ri(tmp, 1); + or_l(sr, tmp); + mov_b_rm(tmp, uae_p32(®s.z)); + shll_l_ri(tmp, 2); + or_l(sr, tmp); + mov_b_rm(tmp, uae_p32(®s.n)); + shll_l_ri(tmp, 3); + or_l(sr, tmp); + +#endif /* OPTIMIZED_FLAGS */ + + mov_b_rm(tmp, uae_p32(®s.s)); + shll_l_ri(tmp, 13); + or_l(sr, tmp); + mov_l_rm(tmp, uae_p32(®s.intmask)); + shll_l_ri(tmp, 8); + or_l(sr, tmp); + and_l_ri(sr, 0x271f); + mov_w_mr(uae_p32(®s.sr), sr); +} + +void compemu_enter_super(int sr) +{ +#if 0 + fprintf(stderr, "enter_super: isinreg=%d rr=%d nholds=%d\n", isinreg(SP_REG), live.state[SP_REG].realreg, isinreg(SP_REG) ? live.nat[live.state[SP_REG].realreg].nholds : -1); +#endif + remove_offset(SP_REG, -1); + if (isinreg(SP_REG)) + evict(SP_REG); + else + flush_reg(SP_REG); + /* + * equivalent to: + * if (!regs.s) + * { + * regs.usp = m68k_areg(regs, 7); + * m68k_areg(regs, 7) = regs.isp; + * regs.s = 1; + * mmu_set_super(1); + * } + */ + test_l_ri(sr, 0x2000); +#if defined(CPU_i386) || defined(CPU_x86_64) + compemu_raw_jnz_b_oponly(); + uae_u8 *branchadd = get_target(); + skip_byte(); +#elif defined(CPU_arm) + compemu_raw_jnz_b_oponly(); + uae_u8 *branchadd = get_target(); + skip_byte(); +#endif + mov_l_mr(JITPTR ®s.usp, SP_REG); + mov_l_rm(SP_REG, uae_p32(®s.isp)); + mov_b_mi(uae_p32(®s.s), 1); +#if defined(CPU_i386) || defined(CPU_x86_64) + *branchadd = JITPTR get_target() - (JITPTR branchadd + 1); +#elif defined(CPU_arm) + *((uae_u32 *)branchadd - 3) = get_target() - (branchadd + 1); +#endif +} + +/******************************************************************** + * Scratch registers management * + ********************************************************************/ + +struct scratch_t { + uae_u32 regs[VREGS]; + fpu_register fregs[VFREGS]; +}; + +static scratch_t scratch; + +/******************************************************************** + * Support functions exposed to newcpu * + ********************************************************************/ + +static inline const char *str_on_off(bool b) +{ + return b ? "on" : "off"; +} + +void compiler_init(void) +{ + static bool initialized = false; + if (initialized) + return; + + flush_icache = flush_icache_none; + +#ifdef UAE + flush_icache = lazy_flush ? flush_icache_lazy : flush_icache_hard; +#else + jit_log(" : enable runtime disassemblers : %s", JITDebug ? "yes" : "no"); + + jit_log(" : compile FPU instructions : %s", !avoid_fpu ? "yes" : "no"); + + // Get size of the translation cache (in KB) + cache_size = bx_options.jit.jitcachesize; + jit_log(" : requested translation cache size : %d KB", cache_size); + + setzflg_uses_bsf = target_check_bsf(); + jit_log(" : target processor has CMOV instructions : %s", have_cmov ? "yes" : "no"); + jit_log(" : target processor can suffer from partial register stalls : %s", have_rat_stall ? "yes" : "no"); + jit_log(" : alignment for loops, jumps are %d, %d", align_loops, align_jumps); +#if defined(CPU_i386) || defined(CPU_x86_64) + jit_log(" : target processor has SSE2 instructions : %s", cpuinfo.x86_has_xmm2 ? "yes" : "no"); + jit_log(" : cache linesize is %lu", (unsigned long)cpuinfo.x86_clflush_size); +#endif + + // Translation cache flush mechanism + lazy_flush = (bx_options.jit.jitlazyflush == 0) ? false : true; + jit_log(" : lazy translation cache invalidation : %s", str_on_off(lazy_flush)); + flush_icache = lazy_flush ? flush_icache_lazy : flush_icache_hard; + + // Compiler features + jit_log(" : register aliasing : %s", str_on_off(1)); + jit_log(" : FP register aliasing : %s", str_on_off(USE_F_ALIAS)); + jit_log(" : lazy constant offsetting : %s", str_on_off(USE_OFFSET)); +#if USE_INLINING + follow_const_jumps = bx_options.jit.jitinline; +#endif + jit_log(" : block inlining : %s", str_on_off(follow_const_jumps)); + jit_log(" : separate blockinfo allocation : %s", str_on_off(USE_SEPARATE_BIA)); + + // Build compiler tables + init_table68k(); + build_comp(); +#endif + + initialized = true; + +#ifdef PROFILE_UNTRANSLATED_INSNS + jit_log(" : gather statistics on untranslated insns count"); +#endif + +#ifdef PROFILE_COMPILE_TIME + jit_log(" : gather statistics on translation time"); + emul_start_time = clock(); +#endif +} + +void compiler_exit(void) +{ +#ifdef PROFILE_COMPILE_TIME + emul_end_time = clock(); +#endif + +#ifdef UAE +#else +#if DEBUG +#if defined(USE_DATA_BUFFER) + jit_log("data_wasted = %ld bytes", data_wasted); +#endif +#endif + + // Deallocate translation cache + if (compiled_code) { + vm_release(compiled_code, cache_size * 1024); + compiled_code = 0; + } + + // Deallocate popallspace + if (popallspace) { + vm_release(popallspace, POPALLSPACE_SIZE); + popallspace = 0; + } +#endif + +#ifdef PROFILE_COMPILE_TIME + jit_log("### Compile Block statistics"); + jit_log("Number of calls to compile_block : %d", compile_count); + uae_u32 emul_time = emul_end_time - emul_start_time; + jit_log("Total emulation time : %.1f sec", double(emul_time)/double(CLOCKS_PER_SEC)); + jit_log("Total compilation time : %.1f sec (%.1f%%)", double(compile_time)/double(CLOCKS_PER_SEC), 100.0*double(compile_time)/double(emul_time)); +#endif + +#ifdef PROFILE_UNTRANSLATED_INSNS + uae_u64 untranslated_count = 0; + for (int i = 0; i < 65536; i++) { + opcode_nums[i] = i; + untranslated_count += raw_cputbl_count[i]; + } + bug("Sorting out untranslated instructions count, total %llu...\n", untranslated_count); + qsort(opcode_nums, 65536, sizeof(uae_u16), untranslated_compfn); + jit_log("Rank Opc Count Name\n"); + for (int i = 0; i < untranslated_top_ten; i++) { + uae_u32 count = raw_cputbl_count[opcode_nums[i]]; + struct instr *dp; + struct mnemolookup *lookup; + if (!count) + break; + dp = table68k + opcode_nums[i]; + for (lookup = lookuptab; lookup->mnemo != (instrmnem)dp->mnemo; lookup++) + ; + bug(_T("%03d: %04x %10u %s\n"), i, opcode_nums[i], count, lookup->name); + } +#endif + +#ifdef RECORD_REGISTER_USAGE + int reg_count_ids[16]; + uint64 tot_reg_count = 0; + for (int i = 0; i < 16; i++) { + reg_count_ids[i] = i; + tot_reg_count += reg_count[i]; + } + qsort(reg_count_ids, 16, sizeof(int), reg_count_compare); + uint64 cum_reg_count = 0; + for (int i = 0; i < 16; i++) { + int r = reg_count_ids[i]; + cum_reg_count += reg_count[r]; + jit_log("%c%d : %16ld %2.1f%% [%2.1f]", r < 8 ? 'D' : 'A', r % 8, + reg_count[r], + 100.0*double(reg_count[r])/double(tot_reg_count), + 100.0*double(cum_reg_count)/double(tot_reg_count)); + } +#endif + + exit_table68k(); +} + +static void init_comp(void) +{ + int i; + uae_s8* cb=can_byte; + uae_s8* cw=can_word; + uae_s8* au=always_used; + +#ifdef RECORD_REGISTER_USAGE + for (i=0;i<16;i++) + reg_count_local[i] = 0; +#endif + + for (i=0;idirect_handler_to_use; +} + +/* This version assumes that it is writing *real* memory, and *will* fail + * if that assumption is wrong! No branches, no second chances, just + * straight go-for-it attitude */ + +static void writemem_real(int address, int source, int size, int tmp, int clobber) +{ + int f=tmp; + +#ifdef NATMEM_OFFSET + if (canbang) { /* Woohoo! go directly at the memory! */ + if (clobber) + f=source; + + switch(size) { + case 1: mov_b_bRr(address,source,MEMBaseDiff); break; + case 2: mov_w_rr(f,source); mid_bswap_16(f); mov_w_bRr(address,f,MEMBaseDiff); break; + case 4: mov_l_rr(f,source); mid_bswap_32(f); mov_l_bRr(address,f,MEMBaseDiff); break; + } + forget_about(tmp); + forget_about(f); + return; + } +#endif + +#ifdef UAE + mov_l_rr(f,address); + shrl_l_ri(f,16); /* The index into the baseaddr table */ + mov_l_rm_indexed(f,uae_p32(baseaddr),f,SIZEOF_VOID_P); /* FIXME: is SIZEOF_VOID_P correct? */ + + if (address==source) { /* IBrowse does this! */ + if (size > 1) { + add_l(f,address); /* f now holds the final address */ + switch (size) { + case 2: mid_bswap_16(source); mov_w_Rr(f,source,0); + mid_bswap_16(source); return; + case 4: mid_bswap_32(source); mov_l_Rr(f,source,0); + mid_bswap_32(source); return; + } + } + } + switch (size) { /* f now holds the offset */ + case 1: mov_b_mrr_indexed(address,f,1,source); break; + case 2: mid_bswap_16(source); mov_w_mrr_indexed(address,f,1,source); + mid_bswap_16(source); break; /* base, index, source */ + case 4: mid_bswap_32(source); mov_l_mrr_indexed(address,f,1,source); + mid_bswap_32(source); break; + } +#endif +} + +#ifdef UAE +static inline void writemem(int address, int source, int offset, int size, int tmp) +{ + int f=tmp; + +#if X86_TARGET_64BIT + /* x86-64: The register allocator only spills/reloads 32-bit values, + so 64-bit pointers (addrbank ptr, function ptr) must NOT be stored + in virtual registers. Instead, compute the 32-bit bank index via + the allocator, do all register setup for the call, then perform + the 64-bit pointer chase with raw instructions after + prepare_for_call_2() when all allocator bookkeeping is done but + hardware register contents are still valid. */ + + /* Step 1: Compute bank index (32-bit, safe in virtual register) */ + mov_l_rr(f, address); + shrl_l_ri(f, 16); + + /* Step 2: Call setup (adapted from call_r_02 internals) */ + clobber_flags(); + remove_all_offsets(); + + int hw_addr = readreg_specific(address, 4, REG_PAR1); + int hw_src = readreg_specific(source, size, REG_PAR2); + int hw_f = readreg(f, 4); + + prepare_for_call_1(); + unlock2(hw_f); + unlock2(hw_addr); + unlock2(hw_src); + prepare_for_call_2(); + + /* Step 3: 64-bit pointer chase with raw instructions. + hw_f still holds the bank index, REG_PAR1/PAR2 hold call args. + Use a scratch register for the mem_banks base address. */ + { + int scratch = (hw_f != R11_INDEX) ? R11_INDEX : R10_INDEX; + MOVQir((uintptr)mem_banks, scratch); + MOVQmr(0, scratch, hw_f, SIZEOF_VOID_P, hw_f); + /* hw_f now holds 64-bit addrbank pointer */ + MOVQmr(offset, hw_f, X86_NOREG, 1, hw_f); + /* hw_f now holds 64-bit function pointer */ + } + + /* Step 4: Call */ + raw_dec_sp(STACK_SHADOW_SPACE); + raw_call_r(hw_f); + raw_inc_sp(STACK_SHADOW_SPACE); + + forget_about(tmp); +#else + mov_l_rr(f,address); + shrl_l_ri(f,16); + mov_l_rm_indexed(f,uae_p32(mem_banks),f,SIZEOF_VOID_P); + mov_l_rR(f,f,offset); + call_r_02(f,address,source,4,size); + forget_about(tmp); +#endif +} +#endif + +void writebyte(int address, int source, int tmp) +{ +#ifdef UAE + if ((special_mem & S_WRITE) || distrust_byte() || jit_use_memory_helpers()) { + sync_compiled_exception_state(); + writemem_special(address, source, 5 * SIZEOF_VOID_P, 1, tmp); + } else +#endif + writemem_real(address,source,1,tmp,0); +} + +static inline void writeword_general(int address, int source, int tmp, + int clobber) +{ +#ifdef UAE + if ((special_mem & S_WRITE) || distrust_word() || jit_use_memory_helpers()) { + sync_compiled_exception_state(); + writemem_special(address, source, 4 * SIZEOF_VOID_P, 2, tmp); + } else +#endif + writemem_real(address,source,2,tmp,clobber); +} + +void writeword_clobber(int address, int source, int tmp) +{ + writeword_general(address,source,tmp,1); +} + +void writeword(int address, int source, int tmp) +{ + writeword_general(address,source,tmp,0); +} + +static inline void writelong_general(int address, int source, int tmp, + int clobber) +{ +#ifdef UAE + if ((special_mem & S_WRITE) || distrust_long() || jit_use_memory_helpers()) { + sync_compiled_exception_state(); + writemem_special(address, source, 3 * SIZEOF_VOID_P, 4, tmp); + } else +#endif + writemem_real(address,source,4,tmp,clobber); +} + +void writelong_clobber(int address, int source, int tmp) +{ + writelong_general(address,source,tmp,1); +} + +void writelong(int address, int source, int tmp) +{ + writelong_general(address,source,tmp,0); +} + + + +/* This version assumes that it is reading *real* memory, and *will* fail + * if that assumption is wrong! No branches, no second chances, just + * straight go-for-it attitude */ + +static void readmem_real(int address, int dest, int size, int tmp) +{ + int f=tmp; + + if (size==4 && address!=dest) + f=dest; + +#ifdef NATMEM_OFFSET + if (canbang) { /* Woohoo! go directly at the memory! */ + switch(size) { + case 1: mov_b_brR(dest,address,MEMBaseDiff); break; + case 2: mov_w_brR(dest,address,MEMBaseDiff); mid_bswap_16(dest); break; + case 4: mov_l_brR(dest,address,MEMBaseDiff); mid_bswap_32(dest); break; + } + forget_about(tmp); + (void) f; + return; + } +#endif + +#ifdef UAE + mov_l_rr(f,address); + shrl_l_ri(f,16); /* The index into the baseaddr table */ + mov_l_rm_indexed(f,uae_p32(baseaddr),f,SIZEOF_VOID_P); /* FIXME: is SIZEOF_VOID_P correct? */ + /* f now holds the offset */ + + switch(size) { + case 1: mov_b_rrm_indexed(dest,address,f,1); break; + case 2: mov_w_rrm_indexed(dest,address,f,1); mid_bswap_16(dest); break; + case 4: mov_l_rrm_indexed(dest,address,f,1); mid_bswap_32(dest); break; + } + forget_about(tmp); +#endif +} + + + +#ifdef UAE +static inline void readmem(int address, int dest, int offset, int size, int tmp) +{ + int f=tmp; + +#if X86_TARGET_64BIT + /* x86-64: Same approach as writemem - keep 64-bit pointers out of + virtual registers. Compute 32-bit bank index via allocator, then + do 64-bit pointer chase with raw instructions after call setup. */ + + /* Step 1: Compute bank index (32-bit, safe in virtual register) */ + mov_l_rr(f, address); + shrl_l_ri(f, 16); + + /* Step 2: Call setup (adapted from call_r_11 internals) */ + clobber_flags(); + remove_all_offsets(); + if (size == 4) { + if (dest != address && dest != f) { + forget_about(dest); + } + } else { + tomem_c(dest); + } + + int hw_addr = readreg_specific(address, 4, REG_PAR1); + int hw_f = readreg(f, 4); + + prepare_for_call_1(); + unlock2(hw_addr); + unlock2(hw_f); + prepare_for_call_2(); + + /* Step 3: 64-bit pointer chase with raw instructions */ + { + int scratch = (hw_f != R11_INDEX) ? R11_INDEX : R10_INDEX; + MOVQir((uintptr)mem_banks, scratch); + MOVQmr(0, scratch, hw_f, SIZEOF_VOID_P, hw_f); + /* hw_f now holds 64-bit addrbank pointer */ + MOVQmr(offset, hw_f, X86_NOREG, 1, hw_f); + /* hw_f now holds 64-bit function pointer */ + } + + /* Step 4: Call */ + raw_dec_sp(STACK_SHADOW_SPACE); + raw_call_r(hw_f); + raw_inc_sp(STACK_SHADOW_SPACE); + + /* Step 5: Record result (same as call_r_11 epilogue) */ + live.nat[REG_RESULT].holds[0] = dest; + live.nat[REG_RESULT].nholds = 1; + live.nat[REG_RESULT].touched = touchcnt++; + + live.state[dest].realreg = REG_RESULT; + live.state[dest].realind = 0; + live.state[dest].val = 0; + live.state[dest].validsize = size; + live.state[dest].dirtysize = size; + set_status(dest, DIRTY); + + forget_about(tmp); +#else + mov_l_rr(f,address); + shrl_l_ri(f,16); + mov_l_rm_indexed(f,uae_p32(mem_banks),f,SIZEOF_VOID_P); + mov_l_rR(f,f,offset); + call_r_11(dest,f,address,size,4); + forget_about(tmp); +#endif +} +#endif + +void readbyte(int address, int dest, int tmp) +{ +#ifdef UAE + if ((special_mem & S_READ) || distrust_byte() || jit_use_memory_helpers()) { + sync_compiled_exception_state(); + readmem_special(address, dest, 2 * SIZEOF_VOID_P, 1, tmp); + } else +#endif + readmem_real(address,dest,1,tmp); +} + +void readword(int address, int dest, int tmp) +{ +#ifdef UAE + if ((special_mem & S_READ) || distrust_word() || jit_use_memory_helpers()) { + sync_compiled_exception_state(); + readmem_special(address, dest, 1 * SIZEOF_VOID_P, 2, tmp); + } else +#endif + readmem_real(address,dest,2,tmp); +} + +void readlong(int address, int dest, int tmp) +{ +#ifdef UAE + if ((special_mem & S_READ) || distrust_long() || jit_use_memory_helpers()) { + sync_compiled_exception_state(); + readmem_special(address, dest, 0 * SIZEOF_VOID_P, 4, tmp); + } else +#endif + readmem_real(address,dest,4,tmp); +} + +void get_n_addr(int address, int dest, int tmp) +{ +#ifdef UAE + if (special_mem || distrust_addr() || jit_use_memory_helpers()) { + /* This one might appear a bit odd... */ + sync_compiled_exception_state(); + readmem_special(address, dest, 6 * SIZEOF_VOID_P, 4, tmp); + return; + } +#endif + +#if X86_TARGET_64BIT +#ifdef NATMEM_OFFSET + if (canbang) { + int hw_address = readreg(address, 4); + int hw_dest = writereg(dest, 4); + compemu_raw_mov_l_rr(hw_dest, hw_address); + LEAQmr(0, R_MEMSTART, hw_dest, 1, hw_dest); + unlock2(hw_dest); + unlock2(hw_address); + forget_about(tmp); + return; + } +#endif +#endif + + // a is the register containing the virtual address + // after the offset had been fetched + int a=tmp; + + // f is the register that will contain the offset + int f=tmp; + + // a == f == tmp if (address == dest) + if (address!=dest) { + a=address; + f=dest; + } + +#ifdef NATMEM_OFFSET + if (canbang) { +#if FIXED_ADDRESSING + lea_l_brr(dest,address,MEMBaseDiff); +#else +# error "Only fixed addressing mode supported" +#endif + forget_about(tmp); + (void) f; + (void) a; + return; + } +#endif + +#ifdef UAE + mov_l_rr(f,address); + mov_l_rr(dest,address); // gb-- nop if dest==address + shrl_l_ri(f,16); + mov_l_rm_indexed(f,uae_p32(baseaddr),f,SIZEOF_VOID_P); /* FIXME: is SIZEOF_VOID_P correct? */ + add_l(dest,f); + forget_about(tmp); +#endif +} + +void get_n_addr_jmp(int address, int dest, int tmp) +{ +#ifdef WINUAE_ARANYM + /* For this, we need to get the same address as the rest of UAE + would --- otherwise we end up translating everything twice */ + get_n_addr(address,dest,tmp); +#else +#ifdef UAE + if (special_mem || distrust_addr() || jit_use_memory_helpers()) { + get_n_addr(address,dest,tmp); + return; + } +#endif +#if X86_TARGET_64BIT + if (canbang && dest == PC_P) { + clobber_flags(); + int hw_address = readreg(address, 4); + int hw_dest = writereg(dest, 4); + compemu_raw_mov_l_rr(hw_dest, hw_address); + LEAQmr(0, R_MEMSTART, hw_dest, 1, hw_dest); + ANDQir((IMM)~1, hw_dest); + unlock2(hw_dest); + unlock2(hw_address); + forget_about(tmp); + return; + } +#endif + int f=tmp; + if (address!=dest) + f=dest; + mov_l_rr(f,address); + shrl_l_ri(f,16); /* The index into the baseaddr bank table */ + mov_l_rm_indexed(dest,uae_p32(baseaddr),f,SIZEOF_VOID_P); /* FIXME: is SIZEOF_VOID_P correct? */ + add_l(dest,address); +#if X86_TARGET_64BIT + if (dest == PC_P) { + int hw_dest = rmw(dest, 4, 4); + ANDQir((IMM)~1, hw_dest); + unlock2(hw_dest); + } else +#endif + and_l_ri (dest, ~1); + forget_about(tmp); +#endif +} + + +/* base is a register, but dp is an actual value. + target is a register, as is tmp */ +void calc_disp_ea_020(int base, uae_u32 dp, int target, int tmp) +{ + int reg = (dp >> 12) & 15; + int regd_shift=(dp >> 9) & 3; + + if (dp & 0x100) { + int ignorebase=(dp&0x80); + int ignorereg=(dp&0x40); + int addbase=0; + int outer=0; + + if ((dp & 0x30) == 0x20) addbase = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + if ((dp & 0x30) == 0x30) addbase = comp_get_ilong((m68k_pc_offset+=4)-4); + + if ((dp & 0x3) == 0x2) outer = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + if ((dp & 0x3) == 0x3) outer = comp_get_ilong((m68k_pc_offset+=4)-4); + + if ((dp & 0x4) == 0) { /* add regd *before* the get_long */ + if (!ignorereg) { + if ((dp & 0x800) == 0) + sign_extend_16_rr(target,reg); + else + mov_l_rr(target,reg); + shll_l_ri(target,regd_shift); + } + else + mov_l_ri(target,0); + + /* target is now regd */ + if (!ignorebase) + add_l(target,base); + add_l_ri(target,addbase); + if (dp&0x03) readlong(target,target,tmp); + } else { /* do the getlong first, then add regd */ + if (!ignorebase) { + mov_l_rr(target,base); + add_l_ri(target,addbase); + } + else + mov_l_ri(target,addbase); + if (dp&0x03) readlong(target,target,tmp); + + if (!ignorereg) { + if ((dp & 0x800) == 0) + sign_extend_16_rr(tmp,reg); + else + mov_l_rr(tmp,reg); + shll_l_ri(tmp,regd_shift); + /* tmp is now regd */ + add_l(target,tmp); + } + } + add_l_ri(target,outer); + } + else { /* 68000 version */ + if ((dp & 0x800) == 0) { /* Sign extend */ + sign_extend_16_rr(tmp,reg); + lea_l_brr_indexed(target,base,tmp,1< : actual translation cache size : %d KB at %p-%p", cache_size, compiled_code, compiled_code + cache_size*1024); +#if defined(CPU_x86_64) + /* Anchor subsequent jit_vm_acquire() calls at the JIT cache so + * blockinfo pools stay within RIP-relative range of code. */ + vm_acquire_anchor = compiled_code; + + /* Verify JIT cache is within RIP-relative reach of globals */ + { + intptr_t dist = (intptr_t)compiled_code - (intptr_t)®s; + jit_log("code cache at %p, regs at %p, distance=%+lld bytes", + compiled_code, (void *)®s, (long long)dist); + if (llabs(dist) > (intptr_t)0x7F000000) { + jit_log("WARNING: code cache is %+lld bytes from globals -- " + "RIP-relative addressing may fail! Disabling JIT.", + (long long)dist); + vm_release(compiled_code, cache_size * 1024); + compiled_code = 0; + vm_acquire_anchor = NULL; + changed_prefs.cachesize = 0; + currprefs.cachesize = 0; + cache_size = 0; + return; + } + } +#endif +#ifdef USE_DATA_BUFFER + max_compile_start = compiled_code + cache_size*1024 - BYTES_PER_INST - DATA_BUFFER_SIZE; +#else + max_compile_start = compiled_code + cache_size*1024 - BYTES_PER_INST; +#endif + current_compile_p = compiled_code; + current_cache_size = 0; +#if defined(USE_DATA_BUFFER) + reset_data_buffer(); +#endif + } +} + +static void calc_checksum(blockinfo* bi, uae_u32* c1, uae_u32* c2) +{ + uae_u32 k1 = 0; + uae_u32 k2 = 0; + +#if USE_CHECKSUM_INFO + checksum_info *csi = bi->csi; + Dif(!csi) abort(); + while (csi) { + uae_s32 len = csi->length; + uintptr tmp = (uintptr)csi->start_p; +#else + uae_s32 len = bi->len; + uintptr tmp = (uintptr)bi->min_pcp; +#endif + uae_u32* pos; + + len += (tmp & 3); + tmp &= ~((uintptr)3); + pos = (uae_u32 *)tmp; + + if (len >= 0 && len <= MAX_CHECKSUM_LEN) { + while (len > 0) { + k1 += *pos; + k2 ^= *pos; + pos++; + len -= 4; + } + } + +#if USE_CHECKSUM_INFO + csi = csi->next; + } +#endif + + *c1 = k1; + *c2 = k2; +} + +#if 0 +static void show_checksum(CSI_TYPE* csi) +{ + uae_u32 k1=0; + uae_u32 k2=0; + uae_s32 len=CSI_LENGTH(csi); + uae_u32 tmp=(uintptr)CSI_START_P(csi); + uae_u32* pos; + + len+=(tmp&3); + tmp&=(~3); + pos=(uae_u32*)tmp; + + if (len<0 || len>MAX_CHECKSUM_LEN) { + return; + } + else { + while (len>0) { + jit_log("%08x ",*pos); + pos++; + len-=4; + } + jit_log(" bla"); + } +} +#endif + + +int check_for_cache_miss(void) +{ + blockinfo* bi=get_blockinfo_addr(regs.pc_p); + + if (bi) { + int cl=cacheline(regs.pc_p); + if (bi!=cache_tags[cl+1].bi) { + raise_in_cl_list(bi); + return 1; + } + } + return 0; +} + + +static void recompile_block(void) +{ + /* An existing block's countdown code has expired. We need to make + sure that execute_normal doesn't refuse to recompile due to a + perceived cache miss... */ + blockinfo* bi=get_blockinfo_addr(regs.pc_p); + + Dif (!bi) + jit_abort("recompile_block"); + raise_in_cl_list(bi); + execute_normal(); + return; +} +static void cache_miss(void) +{ + blockinfo* bi=get_blockinfo_addr(regs.pc_p); +#if COMP_DEBUG + uae_u32 cl=cacheline(regs.pc_p); + blockinfo* bi2=get_blockinfo(cl); +#endif + + if (!bi) { + execute_normal(); /* Compile this block now */ + return; + } + Dif (!bi2 || bi==bi2) { + jit_abort("Unexplained cache miss %p %p",bi,bi2); + } + raise_in_cl_list(bi); + return; +} + +static int called_check_checksum(blockinfo* bi); + +static inline int block_check_checksum(blockinfo* bi) +{ + uae_u32 c1,c2; + bool isgood; + + if (bi->status!=BI_NEED_CHECK) + return 1; /* This block is in a checked state */ + + if (bi->c1 || bi->c2) + calc_checksum(bi,&c1,&c2); + else { + c1=c2=1; /* Make sure it doesn't match */ + } + + isgood=(c1==bi->c1 && c2==bi->c2); + + if (isgood) { + /* This block is still OK. So we reactivate. Of course, that + means we have to move it into the needs-to-be-flushed list */ + bi->handler_to_use=bi->handler; + set_dhtu(bi,bi->direct_handler); + bi->status=BI_CHECKING; + isgood=called_check_checksum(bi) != 0; + } + if (isgood) { + jit_log2("reactivate %p/%p (%x %x/%x %x)",bi,bi->pc_p, c1,c2,bi->c1,bi->c2); + remove_from_list(bi); + add_to_active(bi); + raise_in_cl_list(bi); + bi->status=BI_ACTIVE; + } + else { + /* This block actually changed. We need to invalidate it, + and set it up to be recompiled */ + jit_log2("discard %p/%p (%x %x/%x %x)",bi,bi->pc_p, c1,c2,bi->c1,bi->c2); + invalidate_block(bi); + raise_in_cl_list(bi); + } + return isgood; +} + +static int called_check_checksum(blockinfo* bi) +{ + int isgood=1; + int i; + + for (i=0;i<2 && isgood;i++) { + if (bi->dep[i].jmp_off) { + isgood=block_check_checksum(bi->dep[i].target); + } + } + return isgood; +} + +static void check_checksum(void) +{ + blockinfo* bi=get_blockinfo_addr(regs.pc_p); + uae_u32 cl=cacheline(regs.pc_p); + blockinfo* bi2=get_blockinfo(cl); + + /* These are not the droids you are looking for... */ + if (!bi) { + /* Whoever is the primary target is in a dormant state, but + calling it was accidental, and we should just compile this + new block */ + execute_normal(); + return; + } + if (bi!=bi2) { + /* The block was hit accidentally, but it does exist. Cache miss */ + cache_miss(); + return; + } + + if (!block_check_checksum(bi)) + execute_normal(); +} + +static inline void match_states(blockinfo* bi) +{ + int i; + smallstate* s=&(bi->env); + + if (bi->status==BI_NEED_CHECK) { + block_check_checksum(bi); + } + if (bi->status==BI_ACTIVE || + bi->status==BI_FINALIZING) { /* Deal with the *promises* the + block makes (about not using + certain vregs) */ + for (i=0;i<16;i++) { + if (s->virt[i]==L_UNNEEDED) { + jit_log2("unneeded reg %d at %p",i,target); + COMPCALL(forget_about)(i); // FIXME + } + } + } + flush(1); + + /* And now deal with the *demands* the block makes */ + for (i=0;inat[i]; + if (v>=0) { + // printf("Loading reg %d into %d at %p\n",v,i,target); + readreg_specific(v,4,i); + // do_load_reg(i,v); + // setlock(i); + } + } + for (i=0;inat[i]; + if (v>=0) { + unlock2(i); + } + } +} + +static inline void create_popalls(void) +{ + int i,r; + + if (popallspace == NULL) { + if ((popallspace = alloc_code(POPALLSPACE_SIZE)) == NULL) { + jit_log("WARNING: Could not allocate popallspace!"); +#ifdef UAE + if (currprefs.cachesize > 0) +#endif + { + jit_abort("Could not allocate popallspace!"); + } +#ifdef UAE + /* This is not fatal if JIT is not used. If JIT is + * turned on, it will crash, but it would have crashed + * anyway. */ + return; +#endif + } + } + vm_protect(popallspace, POPALLSPACE_SIZE, VM_PAGE_READ | VM_PAGE_WRITE); + + int stack_space = STACK_OFFSET; + for (i=0;idirect_pen=(cpuop_func*)get_target(); +#if X86_TARGET_64BIT + raw_mov_q_rm(0, (uintptr)&(bi->pc_p)); + raw_mov_q_mr((uintptr)®s.pc_p, 0); +#else + compemu_raw_mov_l_rm(0, JITPTR &(bi->pc_p)); + compemu_raw_mov_l_mr(JITPTR ®s.pc_p,0); +#endif + compemu_raw_jmp(JITPTR popall_execute_normal); + + align_target(align_jumps); + bi->direct_pcc=(cpuop_func*)get_target(); +#if X86_TARGET_64BIT + raw_mov_q_rm(0, (uintptr)&(bi->pc_p)); + raw_mov_q_mr((uintptr)®s.pc_p, 0); +#else + compemu_raw_mov_l_rm(0, JITPTR &(bi->pc_p)); + compemu_raw_mov_l_mr(JITPTR ®s.pc_p,0); +#endif + compemu_raw_jmp(JITPTR popall_check_checksum); + flush_cpu_icache((void *)current_compile_p, (void *)target); + current_compile_p=get_target(); + + bi->deplist=NULL; + for (i=0;i<2;i++) { + bi->dep[i].prev_p=NULL; + bi->dep[i].next=NULL; + } + bi->env=default_ss; + bi->status=BI_INVALID; + bi->havestate=0; + //bi->env=empty_ss; +} + +#ifdef UAE +void compemu_reset(void) +{ + flush_icache = lazy_flush ? flush_icache_lazy : flush_icache_hard; + set_cache_state(0); +} +#endif + +#ifdef UAE +#else +// OPCODE is in big endian format, use cft_map() beforehand, if needed. +#endif +static inline void reset_compop(int opcode) +{ + compfunctbl[opcode] = NULL; + nfcompfunctbl[opcode] = NULL; +} + +static int read_opcode(const char *p) +{ + int opcode = 0; + for (int i = 0; i < 4; i++) { + int op = p[i]; + switch (op) { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + opcode = (opcode << 4) | (op - '0'); + break; + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + opcode = (opcode << 4) | ((op - 'a') + 10); + break; + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + opcode = (opcode << 4) | ((op - 'A') + 10); + break; + default: + return -1; + } + } + return opcode; +} + + +#ifdef USE_JIT_FPU +static struct { + const char *name; + bool *const disabled; +} const jit_opcodes[] = { + { "fbcc", &jit_disable.fbcc }, + { "fdbcc", &jit_disable.fdbcc }, + { "fscc", &jit_disable.fscc }, + { "ftrapcc", &jit_disable.ftrapcc }, + { "fsave", &jit_disable.fsave }, + { "frestore", &jit_disable.frestore }, + { "fmove", &jit_disable.fmove }, + { "fmovec", &jit_disable.fmovec }, + { "fmovem", &jit_disable.fmovem }, + { "fmovecr", &jit_disable.fmovecr }, + { "fint", &jit_disable.fint }, + { "fsinh", &jit_disable.fsinh }, + { "fintrz", &jit_disable.fintrz }, + { "fsqrt", &jit_disable.fsqrt }, + { "flognp1", &jit_disable.flognp1 }, + { "fetoxm1", &jit_disable.fetoxm1 }, + { "ftanh", &jit_disable.ftanh }, + { "fatan", &jit_disable.fatan }, + { "fasin", &jit_disable.fasin }, + { "fatanh", &jit_disable.fatanh }, + { "fsin", &jit_disable.fsin }, + { "ftan", &jit_disable.ftan }, + { "fetox", &jit_disable.fetox }, + { "ftwotox", &jit_disable.ftwotox }, + { "ftentox", &jit_disable.ftentox }, + { "flogn", &jit_disable.flogn }, + { "flog10", &jit_disable.flog10 }, + { "flog2", &jit_disable.flog2 }, + { "fabs", &jit_disable.fabs }, + { "fcosh", &jit_disable.fcosh }, + { "fneg", &jit_disable.fneg }, + { "facos", &jit_disable.facos }, + { "fcos", &jit_disable.fcos }, + { "fgetexp", &jit_disable.fgetexp }, + { "fgetman", &jit_disable.fgetman }, + { "fdiv", &jit_disable.fdiv }, + { "fmod", &jit_disable.fmod }, + { "fadd", &jit_disable.fadd }, + { "fmul", &jit_disable.fmul }, + { "fsgldiv", &jit_disable.fsgldiv }, + { "frem", &jit_disable.frem }, + { "fscale", &jit_disable.fscale }, + { "fsglmul", &jit_disable.fsglmul }, + { "fsub", &jit_disable.fsub }, + { "fsincos", &jit_disable.fsincos }, + { "fcmp", &jit_disable.fcmp }, + { "ftst", &jit_disable.ftst }, +}; + +static bool read_fpu_opcode(const char *p, size_t len) +{ + unsigned int i; + + for (i = 0; i < (sizeof(jit_opcodes) / sizeof(jit_opcodes[0])); i++) + { + if (len == strlen(jit_opcodes[i].name) && _strnicmp(jit_opcodes[i].name, p, len) == 0) + { + *jit_opcodes[i].disabled = true; + jit_log(" : disabled %s", jit_opcodes[i].name); + return true; + } + } + return false; +} +#endif + +static bool merge_blacklist2(const char *blacklist) +{ +#ifdef USE_JIT_FPU + for (unsigned int i = 0; i < (sizeof(jit_opcodes) / sizeof(jit_opcodes[0])); i++) + *jit_opcodes[i].disabled = false; +#endif + if (blacklist[0] != '\0') { + const char *p = blacklist; + for (;;) { + size_t len; + if (*p == 0) + return true; + + const char *endp = strchr(p, ','); + if (endp) { + len = endp - p; + } else { + len = uaestrlen(p); + } + + TCHAR *s = au(p); + bool found = false; + for (int i = 0; lookuptab[i].name[0]; i++) { + if (!_tcsnicmp(s, lookuptab[i].name, len) && _tcslen(lookuptab[i].name) == len) { + int mnemo = lookuptab[i].mnemo; + for (int opcode = 0; opcode < 0xf000; opcode++) { + struct instr *table = &table68k[opcode]; + if (table->mnemo == mnemo) { + reset_compop(cft_map(opcode)); + if (currprefs.cachesize) { + jit_log(" : blacklist opcode : %04x", opcode); + } + found = true; + } + } + if (found) { + p += len; + if (*p) + p++; + } + } + } + xfree(s); + if (found) + continue; +#ifdef USE_JIT_FPU + if (read_fpu_opcode(p, len)) { + p += len; + if (*p) + p++; + continue; + } +#endif + int opcode1 = read_opcode(p); + if (opcode1 < 0) + { + bug(" : invalid opcode %s", p); + return false; + } + p += 4; + int opcode2 = opcode1; + if (*p == '-') { + p++; + opcode2 = read_opcode(p); + if (opcode2 < 0) + { + bug(" : invalid opcode %s", p); + return false; + } + p += 4; + } + + if (*p == 0 || *p == ',') { + if (currprefs.cachesize) { + jit_log(" : blacklist opcodes : %04x-%04x", opcode1, opcode2); + } + for (int opcode = opcode1; opcode <= opcode2; opcode++) + reset_compop(cft_map(opcode)); + + if (*(p++) == ',') + continue; + + return true; + } + + return false; + } + } + return true; +} + +static bool merge_blacklist(void) +{ + bool ret; +#ifdef UAE + const char *blacklist = ua(currprefs.jitblacklist); + ret = merge_blacklist2(blacklist); + xfree((void*)blacklist); +#else + const char *blacklist = bx_options.jit.jitblacklist; + ret = merge_blacklist2(blacklist); +#endif + return ret; +} + +void build_comp(void) +{ +#ifdef FSUAE + if (!g_fs_uae_jit_compiler) { + jit_log("JIT: JIT compiler is not enabled"); + return; + } +#endif + int i, j; + unsigned long opcode; + const struct comptbl* tbl=op_smalltbl_0_comp_ff; + const struct comptbl* nftbl=op_smalltbl_0_comp_nf; + int count; +#ifdef WINUAE_ARANYM + unsigned int cpu_level = 4; // 68040 + const struct cputbl *nfctbl = op_smalltbl_0_nf; +#else + unsigned int cpu_level = (currprefs.cpu_model - 68000) / 10; + if (cpu_level > 4) + cpu_level--; +#ifdef NOFLAGS_SUPPORT_GENCOMP + const struct cputbl *nfctbl = uaegetjitcputbl(); +#endif +#endif + // Initialize target CPU (check for features, e.g. CMOV, rat stalls) + raw_init_cpu(); + +#ifdef NATMEM_OFFSET +#ifdef UAE +#ifdef JIT_EXCEPTION_HANDLER + install_exception_handler(); +#endif +#endif +#endif + + jit_log(" : building compiler function tables"); + + for (opcode = 0; opcode < 65536; opcode++) { + reset_compop(opcode); +#ifdef NOFLAGS_SUPPORT_GENCOMP + nfcpufunctbl[opcode] = op_illg; +#endif + prop[opcode].use_flags = FLAG_ALL; + prop[opcode].set_flags = FLAG_ALL; + prop[opcode].cflow = fl_trap; // ILLEGAL instructions do trap + } + + for (i = 0; tbl[i].opcode < 65536; i++) { + int cflow = table68k[tbl[i].opcode].cflow; + if (follow_const_jumps && (tbl[i].specific & COMP_OPCODE_ISCJUMP)) + cflow = fl_const_jump; + else + cflow &= ~fl_const_jump; + prop[cft_map(tbl[i].opcode)].cflow = cflow; + + bool uses_fpu = (tbl[i].specific & COMP_OPCODE_USES_FPU) != 0; + if (uses_fpu && avoid_fpu) + compfunctbl[cft_map(tbl[i].opcode)] = NULL; + else + compfunctbl[cft_map(tbl[i].opcode)] = tbl[i].handler; + } + + int jit_unavail_count = 0; + for (i = 0; nftbl[i].opcode < 65536; i++) { + bool uses_fpu = (tbl[i].specific & COMP_OPCODE_USES_FPU) != 0; + if (uses_fpu && avoid_fpu) + nfcompfunctbl[cft_map(nftbl[i].opcode)] = NULL; + else + nfcompfunctbl[cft_map(nftbl[i].opcode)] = nftbl[i].handler; + for (j = 0; nfctbl[j].handler_ff; j++) { + if (nfctbl[j].opcode == nftbl[i].opcode) { +#ifdef NOFLAGS_SUPPORT_GENCOMP +#ifdef NOFLAGS_SUPPORT_GENCPU + nfcpufunctbl[cft_map(nftbl[i].opcode)] = nfctbl[j].handler_nf; +#else + nfcpufunctbl[cft_map(nftbl[i].opcode)] = nfctbl[j].handler_ff; +#endif +#endif + break; + } + } + if (!nfctbl[j].handler_ff && currprefs.cachesize) { + jit_unavail_count++; + } + } + if (jit_unavail_count > 0) { + jit_log("%d opcodes unavailable for JIT compilation", jit_unavail_count); + } + +#ifdef NOFLAGS_SUPPORT_GENCOMP +#ifdef NOFLAGS_SUPPORT_GENCPU + for (i = 0; nfctbl[i].handler_nf; i++) { + nfcpufunctbl[cft_map(nfctbl[i].opcode)] = nfctbl[i].handler_nf; + } +#else + for (i = 0; nfctbl[i].handler_ff; i++) { + nfcpufunctbl[cft_map(nfctbl[i].opcode)] = nfctbl[i].handler_ff; + } +#endif +#endif + + for (opcode = 0; opcode < 65536; opcode++) { + compop_func *f; + compop_func *nff; +#ifdef NOFLAGS_SUPPORT_GENCOMP + cpuop_func *nfcf; +#endif + int isaddx; + int cflow; + + if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > cpu_level) + continue; + + if (table68k[opcode].handler != -1) { + f = compfunctbl[cft_map(table68k[opcode].handler)]; + nff = nfcompfunctbl[cft_map(table68k[opcode].handler)]; +#ifdef NOFLAGS_SUPPORT_GENCOMP + nfcf = nfcpufunctbl[cft_map(table68k[opcode].handler)]; +#endif + isaddx = prop[cft_map(table68k[opcode].handler)].is_addx; + prop[cft_map(opcode)].is_addx = isaddx; + cflow = prop[cft_map(table68k[opcode].handler)].cflow; + prop[cft_map(opcode)].cflow = cflow; + compfunctbl[cft_map(opcode)] = f; + nfcompfunctbl[cft_map(opcode)] = nff; +#ifdef NOFLAGS_SUPPORT_GENCOMP + Dif (nfcf == op_illg) + abort(); + nfcpufunctbl[cft_map(opcode)] = nfcf; +#endif + } + prop[cft_map(opcode)].set_flags = table68k[opcode].flagdead; + prop[cft_map(opcode)].use_flags = table68k[opcode].flaglive; + /* Unconditional jumps don't evaluate condition codes, so they + * don't actually use any flags themselves */ + if (prop[cft_map(opcode)].cflow & fl_const_jump) + prop[cft_map(opcode)].use_flags = 0; + } +#ifdef NOFLAGS_SUPPORT_GENCOMP +#ifdef NOFLAGS_SUPPORT_GENCPU + for (i = 0; nfctbl[i].handler_nf != NULL; i++) { + if (nfctbl[i].specific) + nfcpufunctbl[cft_map(tbl[i].opcode)] = nfctbl[i].handler_nf; + } +#else + for (i = 0; nfctbl[i].handler_ff != NULL; i++) { + if (nfctbl[i].specific) + nfcpufunctbl[cft_map(tbl[i].opcode)] = nfctbl[i].handler_ff; + } +#endif +#endif + + /* Merge in blacklist */ + if (!merge_blacklist()) + { + jit_log(" : blacklist merge failure!"); + } + + count=0; + for (opcode = 0; opcode < 65536; opcode++) { + if (compfunctbl[cft_map(opcode)]) + count++; + } + jit_log(" : supposedly %d compileable opcodes!",count); + + /* Initialise state */ + create_popalls(); + alloc_cache(); + reset_lists(); + + for (i=0;ipc_p)].handler=(cpuop_func*)popall_execute_normal; + cache_tags[cacheline(bi->pc_p)+1].bi=NULL; + dbi=bi; bi=bi->next; + free_blockinfo(dbi); + } + bi=dormant; + while(bi) { + cache_tags[cacheline(bi->pc_p)].handler=(cpuop_func*)popall_execute_normal; + cache_tags[cacheline(bi->pc_p)+1].bi=NULL; + dbi=bi; bi=bi->next; + free_blockinfo(dbi); + } + + reset_lists(); + if (!compiled_code) + return; + +#if defined(USE_DATA_BUFFER) + reset_data_buffer(); +#endif + + current_compile_p=compiled_code; +#ifdef UAE + set_special(0); /* To get out of compiled code */ +#else + SPCFLAGS_SET( SPCFLAG_JIT_EXEC_RETURN ); /* To get out of compiled code */ +#endif +} + + +/* "Soft flushing" --- instead of actually throwing everything away, + we simply mark everything as "needs to be checked". +*/ + +static inline void flush_icache_lazy(int v) +{ + blockinfo* bi; + blockinfo* bi2; + + if (!active) + return; + + bi=active; + while (bi) { + uae_u32 cl=cacheline(bi->pc_p); + if (bi->status==BI_INVALID || + bi->status==BI_NEED_RECOMP) { + if (bi==cache_tags[cl+1].bi) + cache_tags[cl].handler=(cpuop_func*)popall_execute_normal; + bi->handler_to_use=(cpuop_func*)popall_execute_normal; + set_dhtu(bi,bi->direct_pen); + bi->status=BI_INVALID; + } + else { + if (bi==cache_tags[cl+1].bi) + cache_tags[cl].handler=(cpuop_func*)popall_check_checksum; + bi->handler_to_use=(cpuop_func*)popall_check_checksum; + set_dhtu(bi,bi->direct_pcc); + bi->status=BI_NEED_CHECK; + } + bi2=bi; + bi=bi->next; + } + /* bi2 is now the last entry in the active list */ + bi2->next=dormant; + if (dormant) + dormant->prev_p=&(bi2->next); + + dormant=active; + active->prev_p=&dormant; + active=NULL; +} + + +#if 0 +static void flush_icache_range(uae_u32 start, uae_u32 length) +{ + if (!active) + return; + +#if LAZY_FLUSH_ICACHE_RANGE + uae_u8 *start_p = get_real_address(start); + blockinfo *bi = active; + while (bi) { +#if USE_CHECKSUM_INFO + bool invalidate = false; + for (checksum_info *csi = bi->csi; csi && !invalidate; csi = csi->next) + invalidate = (((start_p - csi->start_p) < csi->length) || + ((csi->start_p - start_p) < length)); +#else + // Assume system is consistent and would invalidate the right range + const bool invalidate = (bi->pc_p - start_p) < length; +#endif + if (invalidate) { + uae_u32 cl = cacheline(bi->pc_p); + if (bi == cache_tags[cl + 1].bi) + cache_tags[cl].handler = (cpuop_func *)popall_execute_normal; + bi->handler_to_use = (cpuop_func *)popall_execute_normal; + set_dhtu(bi, bi->direct_pen); + bi->status = BI_NEED_RECOMP; + } + bi = bi->next; + } + return; +#else + UNUSED(start); + UNUSED(length); +#endif + flush_icache(); +} +#endif + + +int failure; + +#ifdef UAE +#if defined(HAVE_GET_WORD_UNSWAPPED) +#define DO_GET_OPCODE(a) (do_get_mem_word_unswapped((uae_u16*)(a))) +#else +static inline unsigned int get_opcode_cft_map(unsigned int f) +{ + return do_byteswap_16(f); +} +#define DO_GET_OPCODE(a) (get_opcode_cft_map((uae_u16)*(a))) +#endif +#else +#if defined(HAVE_GET_WORD_UNSWAPPED) && !defined(FULLMMU) +# define DO_GET_OPCODE(a) (do_get_mem_word_unswapped((uae_u16 *)(a))) +#else +# define DO_GET_OPCODE(a) (do_get_mem_word((uae_u16 *)(a))) +#endif +#endif + +#ifdef JIT_DEBUG +static uae_u8 *last_regs_pc_p = 0; +static uae_u8 *last_compiled_block_addr = 0; + +void compiler_dumpstate(void) +{ + if (!JITDebug) + return; + + jit_log("### Host addresses"); + jit_log("MEM_BASE : %lx", (unsigned long)MEMBaseDiff); + jit_log("PC_P : %p", ®s.pc_p); + jit_log("SPCFLAGS : %p", ®s.spcflags); + jit_log("D0-D7 : %p-%p", ®s.regs[0], ®s.regs[7]); + jit_log("A0-A7 : %p-%p", ®s.regs[8], ®s.regs[15]); + jit_log(" "); + + jit_log("### M68k processor state"); + m68k_dumpstate(stderr, 0); + jit_log(" "); + + jit_log("### Block in Atari address space"); + jit_log("M68K block : %p", + (void *)(uintptr)last_regs_pc_p); + if (last_regs_pc_p != 0) { + jit_log("Native block : %p (%d bytes)", + (void *)last_compiled_block_addr, + get_blockinfo_addr(last_regs_pc_p)->direct_handler_size); + } + jit_log(" "); +} +#endif + + +#if 0 /* debugging helpers; activate as needed */ +static void print_exc_frame(uae_u32 opcode) +{ + int nr = (opcode & 0x0f) + 32; + if (nr != 0x45 && /* Timer-C */ + nr != 0x1c && /* VBL */ + nr != 0x46) /* ACIA */ + { + memptr sp = m68k_areg(regs, 7); + uae_u16 sr = get_word(sp); + fprintf(stderr, "Exc:%02x SP: %08x USP: %08x SR: %04x PC: %08x Format: %04x", nr, sp, regs.usp, sr, get_long(sp + 2), get_word(sp + 6)); + if (nr >= 32 && nr < 48) + { + fprintf(stderr, " Opcode: $%04x", sr & 0x2000 ? get_word(sp + 8) : get_word(regs.usp)); + } + fprintf(stderr, "\n"); + } +} + +static void push_all_nat(void) +{ + raw_pushfl(); + raw_push_l_r(EAX_INDEX); + raw_push_l_r(ECX_INDEX); + raw_push_l_r(EDX_INDEX); + raw_push_l_r(EBX_INDEX); + raw_push_l_r(EBP_INDEX); + raw_push_l_r(EDI_INDEX); + raw_push_l_r(ESI_INDEX); + raw_push_l_r(R8_INDEX); + raw_push_l_r(R9_INDEX); + raw_push_l_r(R10_INDEX); + raw_push_l_r(R11_INDEX); + raw_push_l_r(R12_INDEX); + raw_push_l_r(R13_INDEX); + raw_push_l_r(R14_INDEX); + raw_push_l_r(R15_INDEX); +} + +static void pop_all_nat(void) +{ + raw_pop_l_r(R15_INDEX); + raw_pop_l_r(R14_INDEX); + raw_pop_l_r(R13_INDEX); + raw_pop_l_r(R12_INDEX); + raw_pop_l_r(R11_INDEX); + raw_pop_l_r(R10_INDEX); + raw_pop_l_r(R9_INDEX); + raw_pop_l_r(R8_INDEX); + raw_pop_l_r(ESI_INDEX); + raw_pop_l_r(EDI_INDEX); + raw_pop_l_r(EBP_INDEX); + raw_pop_l_r(EBX_INDEX); + raw_pop_l_r(EDX_INDEX); + raw_pop_l_r(ECX_INDEX); + raw_pop_l_r(EAX_INDEX); + raw_popfl(); +} +#endif + +#if 0 +static void print_inst(void) +{ + disasm_m68k_block(regs.fault_pc + (uint8 *)MEMBaseDiff, 1); +} +#endif + + +#ifdef UAE +void compile_block(cpu_history *pc_hist, int blocklen, int totcycles) +{ + if (cache_enabled && compiled_code && currprefs.cpu_model >= 68020) { +#else +static void compile_block(cpu_history* pc_hist, int blocklen) +{ + if (cache_enabled && compiled_code) { +#endif +#ifdef PROFILE_COMPILE_TIME + compile_count++; + clock_t start_time = clock(); +#endif +#ifdef JIT_DEBUG + bool disasm_block = false; +#endif + + /* OK, here we need to 'compile' a block */ + int i; + int r; + int was_comp=0; + uae_u8 liveflags[MAXRUN+1]; +#if USE_CHECKSUM_INFO + bool trace_in_rom = isinrom((uintptr)pc_hist[0].location) != 0; + uintptr max_pcp=(uintptr)pc_hist[blocklen - 1].location; + uintptr min_pcp=max_pcp; +#else + uintptr max_pcp=(uintptr)pc_hist[0].location; + uintptr min_pcp=max_pcp; +#endif + uae_u32 cl=cacheline(pc_hist[0].location); + void* specflags=(void*)®s.spcflags; + blockinfo* bi=NULL; + blockinfo* bi2; + int extra_len=0; + + redo_current_block=0; + if (current_compile_p >= MAX_COMPILE_PTR) + flush_icache_hard(3); + + if (!alloc_blockinfos()) { + flush_icache_hard(3); + return; + } + + bi=get_blockinfo_addr_new(pc_hist[0].location,0); + if (!bi) { + flush_icache_hard(3); + return; + } + bi2=get_blockinfo(cl); + + optlev=bi->optlevel; + if (bi->status!=BI_INVALID) { + Dif (bi!=bi2) { + /* I don't think it can happen anymore. Shouldn't, in + any case. So let's make sure... */ + jit_abort("WOOOWOO count=%d, ol=%d %p %p", bi->count,bi->optlevel,bi->handler_to_use, cache_tags[cl].handler); + } + + Dif (bi->count!=-1 && bi->status!=BI_NEED_RECOMP) { + jit_abort("bi->count=%d, bi->status=%d,bi->optlevel=%d",bi->count,bi->status,bi->optlevel); + /* What the heck? We are not supposed to be here! */ + } + } + if (bi->count==-1) { + optlev++; + while (!optcount[optlev]) + optlev++; + bi->count=optcount[optlev]-1; + } + current_block_pc_p= JITPTR pc_hist[0].location; + + remove_deps(bi); /* We are about to create new code */ + bi->optlevel=optlev; + bi->pc_p=(uae_u8*)pc_hist[0].location; +#if USE_CHECKSUM_INFO + free_checksum_info_chain(bi->csi); + bi->csi = NULL; +#endif + + liveflags[blocklen]=FLAG_ALL; /* All flags needed afterwards */ + const bool unsafe_memory_helpers = jit_use_memory_helpers(); + const bool unsafe_compile_fallbacks = jit_use_compile_fallbacks(); + const bool high_natmem_rom_block = + jit_n_addr_unsafe && !jit_n_addr_bank_unsafe && + isinrom((uintptr)pc_hist[0].location) != 0; + bool unsafe_special_mem_block = high_natmem_rom_block; + i=blocklen; + while (i--) { + uae_u16* currpcp=pc_hist[i].location; + uae_u32 op=DO_GET_OPCODE(currpcp); + if ((unsafe_compile_fallbacks || unsafe_memory_helpers) && pc_hist[i].specmem) + unsafe_special_mem_block = true; + +#if USE_CHECKSUM_INFO + trace_in_rom = trace_in_rom && isinrom((uintptr)currpcp); + if (follow_const_jumps && is_const_jump(op)) { + checksum_info *csi = alloc_checksum_info(); + if (!csi) { + invalidate_block(bi); + flush_icache_hard(3); + return; + } + csi->start_p = (uae_u8 *)min_pcp; + csi->length = JITPTR max_pcp - JITPTR min_pcp + LONGEST_68K_INST; + csi->next = bi->csi; + bi->csi = csi; + max_pcp = (uintptr)currpcp; + } + min_pcp = (uintptr)currpcp; +#else + if ((uintptr)currpcpmax_pcp) + max_pcp=(uintptr)currpcp; +#endif + +#ifdef UAE + if (!currprefs.compnf) { + liveflags[i]=FLAG_ALL; + } + else +#endif + { + liveflags[i] = ((liveflags[i+1] & (~prop[op].set_flags))|prop[op].use_flags); + if (prop[op].is_addx && (liveflags[i+1]&FLAG_Z)==0) + liveflags[i]&= ~FLAG_Z; + } + } + +#if USE_CHECKSUM_INFO + checksum_info *csi = alloc_checksum_info(); + if (!csi) { + invalidate_block(bi); + flush_icache_hard(3); + return; + } + csi->start_p = (uae_u8 *)min_pcp; + csi->length = JITPTR max_pcp - JITPTR min_pcp + LONGEST_68K_INST; + csi->next = bi->csi; + bi->csi = csi; +#endif + + bi->needed_flags=liveflags[0]; + + align_target(align_loops); + was_comp=0; + + bi->direct_handler=(cpuop_func*)get_target(); + set_dhtu(bi,bi->direct_handler); + bi->status=BI_COMPILING; + current_block_start_target= JITPTR get_target(); + + log_startblock(); + + if (bi->count>=0) { /* Need to generate countdown code */ +#if X86_TARGET_64BIT + raw_mov_q_mi((uintptr)®s.pc_p, (uintptr)pc_hist[0].location); +#else + compemu_raw_mov_l_mi(JITPTR ®s.pc_p, JITPTR pc_hist[0].location); +#endif + compemu_raw_sub_l_mi(JITPTR &(bi->count),1); + compemu_raw_jl(JITPTR popall_recompile_block); + } + if (optlev==0 || unsafe_special_mem_block) { /* No need to actually translate */ + /* Execute normally without keeping stats */ +#if X86_TARGET_64BIT + raw_mov_q_mi((uintptr)®s.pc_p, (uintptr)pc_hist[0].location); +#else + compemu_raw_mov_l_mi(JITPTR ®s.pc_p, JITPTR pc_hist[0].location); +#endif + compemu_raw_jmp(JITPTR popall_exec_nostats); + } + else { + reg_alloc_run=0; + next_pc_p=0; + taken_pc_p=0; + branch_cc=0; // Only to be initialized. Will be set together with next_pc_p + + comp_pc_p=(uae_u8*)pc_hist[0].location; + init_comp(); + was_comp=1; + +#ifdef USE_CPU_EMUL_SERVICES + compemu_raw_sub_l_mi((uintptr)&emulated_ticks,blocklen); + compemu_raw_jcc_b_oponly(NATIVE_CC_GT); + uae_u8 *branchadd=get_target(); + skip_byte(); + raw_dec_sp(STACK_SHADOW_SPACE); + compemu_raw_call((uintptr)cpu_do_check_ticks); + raw_inc_sp(STACK_SHADOW_SPACE); + *branchadd=get_target()-(branchadd+1); +#endif + +#ifdef JIT_DEBUG + if (JITDebug) { +#if X86_TARGET_64BIT + raw_mov_q_mi((uintptr)&last_regs_pc_p,(uintptr)pc_hist[0].location); + raw_mov_q_mi((uintptr)&last_compiled_block_addr,current_block_start_target); +#else + compemu_raw_mov_l_mi((uintptr)&last_regs_pc_p,(uintptr)pc_hist[0].location); + compemu_raw_mov_l_mi((uintptr)&last_compiled_block_addr,current_block_start_target); +#endif + } +#endif + + for (i=0;i1 && !unsafe_control_flow && !unsafe_flags) { + failure=0; + if (!was_comp) { + comp_pc_p=(uae_u8*)pc_hist[i].location; + init_comp(); + } + was_comp=1; + +#if defined(HAVE_DISASM_NATIVE) && defined(HAVE_DISASM_M68K) +/* debugging helpers; activate as needed */ +#if 1 + disasm_this_inst = false; + const uae_u8 *start_m68k_thisinst = (const uae_u8 *)pc_hist[i].location; + uae_u8 *start_native_thisinst = get_target(); +#endif +#endif + +#ifdef WINUAE_ARANYM + bool isnop = do_get_mem_word(pc_hist[i].location) == 0x4e71 || + ((i + 1) < blocklen && do_get_mem_word(pc_hist[i+1].location) == 0x4e71); + + if (isnop) + compemu_raw_mov_l_mi((uintptr)®s.fault_pc, ((uintptr)(pc_hist[i].location)) - MEMBaseDiff); +#endif + + comptbl[opcode](opcode); + freescratch(); + if (!unsafe_compile_fallbacks && !(liveflags[i+1] & FLAG_CZNV)) { + /* We can forget about flags */ + dont_care_flags(); + } +#if INDIVIDUAL_INST + flush(1); + nop(); + flush(1); + was_comp=0; +#endif +#ifdef WINUAE_ARANYM + /* + * workaround for buserror handling: on a "nop", write registers back + */ + if (isnop) + { + flush(1); + nop(); + was_comp=0; + } +#endif +#if defined(HAVE_DISASM_NATIVE) && defined(HAVE_DISASM_M68K) + +/* debugging helpers; activate as needed */ +#if 0 + disasm_m68k_block(start_m68k_thisinst, 1); + push_all_nat(); + compemu_raw_mov_l_mi(uae_p32(®s.fault_pc), (uintptr)start_m68k_thisinst - MEMBaseDiff); + raw_dec_sp(STACK_SHADOW_SPACE); + compemu_raw_call(uae_p32(print_instn)); + raw_inc_sp(STACK_SHADOW_SPACE); + pop_all_nat(); +#endif + + if (disasm_this_inst) + { + disasm_m68k_block(start_m68k_thisinst, 1); +#if 1 + disasm_native_block(start_native_thisinst, get_target() - start_native_thisinst); +#endif + +#if 0 + push_all_nat(); + + raw_dec_sp(STACK_SHADOW_SPACE); + compemu_raw_mov_l_ri(REG_PAR1, (uae_u32)cft_map(opcode)); + compemu_raw_call((uintptr)print_exc_frame); + raw_inc_sp(STACK_SHADOW_SPACE); + + pop_all_nat(); +#endif + + if (failure) + { + bug("(discarded)"); + target = start_native_thisinst; + } + } +#endif + } + + if (failure) { + if (was_comp) { + flush(1); + was_comp=0; + } + compemu_raw_mov_l_ri(REG_PAR1,(uae_u32)opcode); +#if USE_NORMAL_CALLING_CONVENTION + raw_push_l_r(REG_PAR1); +#endif + { + uintptr native_pc = (uintptr)pc_hist[i].location; + uae_u32 m68k_pc = get_virtual_compile_pc(native_pc); +#if X86_TARGET_64BIT + raw_mov_q_mi((uintptr)®s.pc_p, native_pc); + raw_mov_q_mi((uintptr)®s.pc_oldp, native_pc); +#else + compemu_raw_mov_l_mi(JITPTR ®s.pc_p, JITPTR native_pc); + compemu_raw_mov_l_mi(JITPTR ®s.pc_oldp, JITPTR native_pc); +#endif + compemu_raw_mov_l_mi(JITPTR ®s.pc, m68k_pc); + compemu_raw_mov_l_mi(JITPTR ®s.instruction_pc, m68k_pc); + } + raw_dec_sp(STACK_SHADOW_SPACE); + compemu_raw_call(JITPTR cputbl[opcode]); + raw_inc_sp(STACK_SHADOW_SPACE); +#ifdef PROFILE_UNTRANSLATED_INSNS + // raw_cputbl_count[] is indexed with plain opcode (in m68k order) + compemu_raw_add_l_mi((uintptr)&raw_cputbl_count[cft_map(opcode)],1); +#endif +#if USE_NORMAL_CALLING_CONVENTION + raw_inc_sp(4); +#endif + + if (unsafe_compile_fallbacks && unsafe_control_flow) { +#ifdef UAE + raw_sub_l_mi(uae_p32(&countdown),scaled_cycles(totcycles)); +#endif + compemu_raw_jmp(JITPTR popall_do_nothing); + } + + if (i < blocklen - 1) { + uae_u8* branchadd; + + /* if (SPCFLAGS_TEST(SPCFLAG_ALL)) popall_do_nothing() */ + compemu_raw_mov_l_rm(0, JITPTR specflags); + compemu_raw_test_l_rr(0,0); +#if defined(USE_DATA_BUFFER) + data_check_end(8, 64); // just a pessimistic guess... +#endif + compemu_raw_jz_b_oponly(); + branchadd=get_target(); + skip_byte(); +#ifdef UAE + raw_sub_l_mi(uae_p32(&countdown),scaled_cycles(totcycles)); +#endif + compemu_raw_jmp(JITPTR popall_do_nothing); + *branchadd = JITPTR get_target() - (JITPTR branchadd + 1); + } + } + } +#if 0 /* Disabled: inter-block flag optimization uses single-instruction + lookahead which is insufficient. Can discard flags that later + instructions in the next block depend on, causing visual corruption. + Same issue as ARM64 fix (compemu_support_arm.cpp:3528). */ + if (next_pc_p && taken_pc_p && + was_comp && taken_pc_p==current_block_pc_p) + { + blockinfo* bi1=get_blockinfo_addr_new((void*)next_pc_p,0); + blockinfo* bi2=get_blockinfo_addr_new((void*)taken_pc_p,0); + uae_u8 x=bi1->needed_flags; + + if (x==0xff || 1) { /* To be on the safe side */ + uae_u16* next=(uae_u16*)next_pc_p; + uae_u32 op=DO_GET_OPCODE(next); + + x=FLAG_ALL; + x&=(~prop[op].set_flags); + x|=prop[op].use_flags; + } + + x|=bi2->needed_flags; + if (!(x & FLAG_CZNV)) { + /* We can forget about flags */ + dont_care_flags(); + extra_len+=2; /* The next instruction now is part of this block */ + } + } +#endif + log_flush(); + + if (next_pc_p) { /* A branch was registered */ + uintptr t1=next_pc_p; + uintptr t2=taken_pc_p; + int cc=branch_cc; + + uae_u32* branchadd; + uae_u32* tba; + bigstate tmp; + blockinfo* tbi; + + if (taken_pc_penv))) { + mark_callers_recompile(bi); + } + + big_to_small_state(&live,&(bi->env)); +#endif + +#if USE_CHECKSUM_INFO + remove_from_list(bi); + if (trace_in_rom) { + // No need to checksum that block trace on cache invalidation + free_checksum_info_chain(bi->csi); + bi->csi = NULL; + add_to_dormant(bi); + } + else { + calc_checksum(bi,&(bi->c1),&(bi->c2)); + add_to_active(bi); + } +#else + if (next_pc_p+extra_len>=max_pcp && + next_pc_p+extra_lenlen=max_pcp-min_pcp; + bi->min_pcp=min_pcp; + + remove_from_list(bi); + if (isinrom(min_pcp) && isinrom(max_pcp)) { + add_to_dormant(bi); /* No need to checksum it on cache flush. + Please don't start changing ROMs in + flight! */ + } + else { + calc_checksum(bi,&(bi->c1),&(bi->c2)); + add_to_active(bi); + } +#endif + + current_cache_size += JITPTR get_target() - JITPTR current_compile_p; + +#ifdef JIT_DEBUG + bi->direct_handler_size = get_target() - (uae_u8 *)current_block_start_target; + + if (JITDebug && disasm_block) { + uaecptr block_addr = start_pc + ((char *)pc_hist[0].location - (char *)start_pc_p); + jit_log("M68K block @ 0x%08x (%d insns)", block_addr, blocklen); + uae_u32 block_size = ((uae_u8 *)pc_hist[blocklen - 1].location - (uae_u8 *)pc_hist[0].location) + 1; +#ifdef WINUAE_ARANYM + disasm_m68k_block((const uae_u8 *)pc_hist[0].location, block_size); +#endif + jit_log("Compiled block @ %p", pc_hist[0].location); +#ifdef WINUAE_ARANYM + disasm_native_block((const uae_u8 *)current_block_start_target, bi->direct_handler_size); +#endif + UNUSED(block_addr); + } +#endif + + log_dump(); + align_target(align_jumps); + +#ifdef UAE +#ifdef USE_UDIS86 + UDISFN(current_block_start_target, target) +#endif +#endif + + /* This is the non-direct handler */ + bi->handler= + bi->handler_to_use=(cpuop_func *)get_target(); +#if X86_TARGET_64BIT + /* regs.pc_p is a 64-bit pointer - must compare all 8 bytes. + x86-64 has no CMP [mem], imm64, so load into scratch and CMP. */ + { + int r_tmp = REG_PC_TMP; + raw_mov_q_ri(r_tmp, (uintptr)pc_hist[0].location); + raw_cmp_q_mr((uintptr)®s.pc_p, r_tmp); + } +#else + compemu_raw_cmp_l_mi(JITPTR ®s.pc_p, JITPTR pc_hist[0].location); +#endif + compemu_raw_jnz(JITPTR popall_cache_miss); + comp_pc_p=(uae_u8*)pc_hist[0].location; + + bi->status=BI_FINALIZING; + init_comp(); + match_states(bi); + flush(1); + + compemu_raw_jmp(JITPTR bi->direct_handler); + + flush_cpu_icache((void *)current_block_start_target, (void *)target); + current_compile_p=get_target(); + raise_in_cl_list(bi); +#ifdef UAE + bi->nexthandler=current_compile_p; +#endif + + /* We will flush soon, anyway, so let's do it now */ + if (current_compile_p >= MAX_COMPILE_PTR) + flush_icache_hard(3); + + bi->status=BI_ACTIVE; + if (redo_current_block) + block_need_recompile(bi); + +#ifdef PROFILE_COMPILE_TIME + compile_time += (clock() - start_time); +#endif +#ifdef UAE + /* Account for compilation time */ + do_extra_cycles(totcycles); +#endif + } + +#ifdef USE_CPU_EMUL_SERVICES + /* Account for compilation time */ + cpu_do_check_ticks(); +#endif +} + +#ifdef UAE + /* Slightly different function defined in newcpu.cpp */ +#else +void do_nothing(void) +{ + /* What did you expect this to do? */ +} +#endif + +#ifdef UAE + /* Different implementation in newcpu.cpp */ +#else +void exec_nostats(void) +{ + for (;;) { + uae_u32 opcode = GET_OPCODE; +#ifdef FLIGHT_RECORDER + m68k_record_step(m68k_getpc(), cft_map(opcode)); +#endif + (*cpufunctbl[opcode])(opcode); + cpu_check_ticks(); + if (end_block(opcode) || SPCFLAGS_TEST(SPCFLAG_ALL)) { + return; /* We will deal with the spcflags in the caller */ + } + } +} +#endif + +#ifdef UAE +/* FIXME: check differences against UAE execute_normal (newcpu.cpp) */ +#else +void execute_normal(void) +{ + if (!check_for_cache_miss()) { + cpu_history pc_hist[MAXRUN]; + int blocklen = 0; +#if 0 && FIXED_ADDRESSING + start_pc_p = regs.pc_p; + start_pc = get_virtual_address(regs.pc_p); +#else + start_pc_p = regs.pc_oldp; + start_pc = regs.pc; +#endif + for (;;) { /* Take note: This is the do-it-normal loop */ + pc_hist[blocklen++].location = (uae_u16 *)regs.pc_p; + uae_u32 opcode = GET_OPCODE; +#ifdef FLIGHT_RECORDER + m68k_record_step(m68k_getpc(), cft_map(opcode)); +#endif + (*cpufunctbl[opcode])(opcode); + cpu_check_ticks(); + if (end_block(opcode) || SPCFLAGS_TEST(SPCFLAG_ALL) || blocklen>=MAXRUN) { + compile_block(pc_hist, blocklen); + return; /* We will deal with the spcflags in the caller */ + } + /* No need to check regs.spcflags, because if they were set, + we'd have ended up inside that "if" */ + } + } +} +#endif + +typedef void (*compiled_handler)(void); + +#ifdef UAE +/* FIXME: check differences against UAE m68k_do_compile_execute */ +#else +void m68k_do_compile_execute(void) +{ + for (;;) { + ((compiled_handler)(pushall_call_handler))(); + /* Whenever we return from that, we should check spcflags */ + if (SPCFLAGS_TEST(SPCFLAG_ALL)) { + if (m68k_do_specialties ()) + return; + } + } +} +#endif + +#ifdef UAE +/* FIXME: check differences against UAE m68k_compile_execute */ +#else +void m68k_compile_execute (void) +{ +setjmpagain: + TRY(prb) { + for (;;) { + if (quit_program > 0) { + if (quit_program == 1) { +#ifdef FLIGHT_RECORDER + dump_flight_recorder(); +#endif + break; + } + quit_program = 0; + m68k_reset (); + } + m68k_do_compile_execute(); + } + } + CATCH(prb) { + jit_log("m68k_compile_execute: exception %d pc=%08x (%08x+%p-%p) fault_pc=%08x addr=%08x -> %08x sp=%08x", + int(prb), + m68k_getpc(), + regs.pc, regs.pc_p, regs.pc_oldp, + regs.fault_pc, + regs.mmu_fault_addr, get_long (regs.vbr + 4*prb), + regs.regs[15]); + flush_icache(); + Exception(prb, 0); + goto setjmpagain; + } +} +#endif + +#endif /* JIT */ diff --git a/jit/x86/compemu_x86.cpp b/jit/x86/compemu_x86.cpp new file mode 100644 index 00000000..cdaab7ad --- /dev/null +++ b/jit/x86/compemu_x86.cpp @@ -0,0 +1,103781 @@ +#include "sysconfig.h" +#if defined(JIT) +#include "sysdeps.h" +#include "options.h" +#include "uae/memory.h" +#include "readcpu.h" +#include "newcpu.h" +#include "comptbl_x86.h" +#include "debug.h" +#include "compemu_x86.h" +#include "flags_x86.h" + +#if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) +#define PART_1 1 +#define PART_2 1 +#define PART_3 1 +#define PART_4 1 +#define PART_5 1 +#define PART_6 1 +#define PART_7 1 +#define PART_8 1 +#endif +#endif /* JIT */ + +#ifdef USE_JIT_FPU +extern void comp_fpp_opp(); +extern void comp_fscc_opp(); +extern void comp_fbcc_opp(); +#endif + +#ifdef PART_1 +/* OR.B #.B,Dn */ +uae_u32 REGPARAM2 op_0_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(An) */ +uae_u32 REGPARAM2 op_10_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_18_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,-(An) */ +uae_u32 REGPARAM2 op_20_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_28_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_30_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_38_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_39_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,Dn */ +uae_u32 REGPARAM2 op_40_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(An) */ +uae_u32 REGPARAM2 op_50_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_58_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,-(An) */ +uae_u32 REGPARAM2 op_60_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_68_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_70_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_78_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_79_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,Dn */ +uae_u32 REGPARAM2 op_80_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(An) */ +uae_u32 REGPARAM2 op_90_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_98_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,-(An) */ +uae_u32 REGPARAM2 op_a0_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_a8_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_b0_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_b8_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_b9_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.L Dn,Dn */ +uae_u32 REGPARAM2 op_100_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(An) */ +uae_u32 REGPARAM2 op_110_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_118_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,-(An) */ +uae_u32 REGPARAM2 op_120_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_128_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_130_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_138_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_139_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(d16,PC) */ +uae_u32 REGPARAM2 op_13a_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_13b_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,#.B */ +uae_u32 REGPARAM2 op_13c_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = scratchie++; + mov_l_ri(dst, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.L Dn,Dn */ +uae_u32 REGPARAM2 op_140_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(An) */ +uae_u32 REGPARAM2 op_150_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_158_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,-(An) */ +uae_u32 REGPARAM2 op_160_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_168_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_170_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_178_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_179_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.L Dn,Dn */ +uae_u32 REGPARAM2 op_180_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(An) */ +uae_u32 REGPARAM2 op_190_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_198_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,-(An) */ +uae_u32 REGPARAM2 op_1a0_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_1a8_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_1b0_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_1b8_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_1b9_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.L Dn,Dn */ +uae_u32 REGPARAM2 op_1c0_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(An) */ +uae_u32 REGPARAM2 op_1d0_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_1d8_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,-(An) */ +uae_u32 REGPARAM2 op_1e0_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_1e8_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_1f0_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_1f8_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_1f9_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,Dn */ +uae_u32 REGPARAM2 op_200_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(An) */ +uae_u32 REGPARAM2 op_210_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_218_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,-(An) */ +uae_u32 REGPARAM2 op_220_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_228_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_230_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_238_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_239_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,Dn */ +uae_u32 REGPARAM2 op_240_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(An) */ +uae_u32 REGPARAM2 op_250_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_258_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,-(An) */ +uae_u32 REGPARAM2 op_260_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_268_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_270_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_278_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_279_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,Dn */ +uae_u32 REGPARAM2 op_280_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(An) */ +uae_u32 REGPARAM2 op_290_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_298_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,-(An) */ +uae_u32 REGPARAM2 op_2a0_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_2a8_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_2b0_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_2b8_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_2b9_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,Dn */ +uae_u32 REGPARAM2 op_400_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(An) */ +uae_u32 REGPARAM2 op_410_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_418_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,-(An) */ +uae_u32 REGPARAM2 op_420_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_428_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_430_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_438_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_439_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,Dn */ +uae_u32 REGPARAM2 op_440_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(An) */ +uae_u32 REGPARAM2 op_450_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_458_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,-(An) */ +uae_u32 REGPARAM2 op_460_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_468_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_470_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_478_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_479_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,Dn */ +uae_u32 REGPARAM2 op_480_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(An) */ +uae_u32 REGPARAM2 op_490_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_498_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,-(An) */ +uae_u32 REGPARAM2 op_4a0_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_4a8_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_4b0_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_4b8_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_4b9_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,Dn */ +uae_u32 REGPARAM2 op_600_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(An) */ +uae_u32 REGPARAM2 op_610_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_618_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,-(An) */ +uae_u32 REGPARAM2 op_620_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_628_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_630_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_638_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_639_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,Dn */ +uae_u32 REGPARAM2 op_640_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(An) */ +uae_u32 REGPARAM2 op_650_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_658_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,-(An) */ +uae_u32 REGPARAM2 op_660_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_668_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_670_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_678_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_679_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,Dn */ +uae_u32 REGPARAM2 op_680_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(An) */ +uae_u32 REGPARAM2 op_690_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_698_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,-(An) */ +uae_u32 REGPARAM2 op_6a0_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_6a8_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_6b0_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_6b8_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_6b9_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.L #.W,Dn */ +uae_u32 REGPARAM2 op_800_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(An) */ +uae_u32 REGPARAM2 op_810_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(An)+ */ +uae_u32 REGPARAM2 op_818_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,-(An) */ +uae_u32 REGPARAM2 op_820_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(d16,An) */ +uae_u32 REGPARAM2 op_828_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_830_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(xxx).W */ +uae_u32 REGPARAM2 op_838_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(xxx).L */ +uae_u32 REGPARAM2 op_839_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_83a_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_83b_0_comp_ff(uae_u32 opcode) /* BTST */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.L #.W,Dn */ +uae_u32 REGPARAM2 op_840_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(An) */ +uae_u32 REGPARAM2 op_850_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(An)+ */ +uae_u32 REGPARAM2 op_858_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,-(An) */ +uae_u32 REGPARAM2 op_860_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(d16,An) */ +uae_u32 REGPARAM2 op_868_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_870_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(xxx).W */ +uae_u32 REGPARAM2 op_878_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(xxx).L */ +uae_u32 REGPARAM2 op_879_0_comp_ff(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.L #.W,Dn */ +uae_u32 REGPARAM2 op_880_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(An) */ +uae_u32 REGPARAM2 op_890_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(An)+ */ +uae_u32 REGPARAM2 op_898_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,-(An) */ +uae_u32 REGPARAM2 op_8a0_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(d16,An) */ +uae_u32 REGPARAM2 op_8a8_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_8b0_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(xxx).W */ +uae_u32 REGPARAM2 op_8b8_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(xxx).L */ +uae_u32 REGPARAM2 op_8b9_0_comp_ff(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.L #.W,Dn */ +uae_u32 REGPARAM2 op_8c0_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(An) */ +uae_u32 REGPARAM2 op_8d0_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(An)+ */ +uae_u32 REGPARAM2 op_8d8_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,-(An) */ +uae_u32 REGPARAM2 op_8e0_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(d16,An) */ +uae_u32 REGPARAM2 op_8e8_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_8f0_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(xxx).W */ +uae_u32 REGPARAM2 op_8f8_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(xxx).L */ +uae_u32 REGPARAM2 op_8f9_0_comp_ff(uae_u32 opcode) /* BSET */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + start_needflags(); + set_zero(s,tmp); + live_flags(); + end_needflags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,Dn */ +uae_u32 REGPARAM2 op_a00_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(An) */ +uae_u32 REGPARAM2 op_a10_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_a18_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,-(An) */ +uae_u32 REGPARAM2 op_a20_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_a28_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_a30_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_a38_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_a39_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,Dn */ +uae_u32 REGPARAM2 op_a40_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(An) */ +uae_u32 REGPARAM2 op_a50_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_a58_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,-(An) */ +uae_u32 REGPARAM2 op_a60_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_a68_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_a70_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_a78_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_a79_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,Dn */ +uae_u32 REGPARAM2 op_a80_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(An) */ +uae_u32 REGPARAM2 op_a90_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_a98_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,-(An) */ +uae_u32 REGPARAM2 op_aa0_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_aa8_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_ab0_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_ab8_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_ab9_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_2 +/* CMP.B #.B,Dn */ +uae_u32 REGPARAM2 op_c00_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(An) */ +uae_u32 REGPARAM2 op_c10_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_c18_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,-(An) */ +uae_u32 REGPARAM2 op_c20_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_c28_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_c30_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_c38_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_c39_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(d16,PC) */ +uae_u32 REGPARAM2 op_c3a_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_c3b_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,Dn */ +uae_u32 REGPARAM2 op_c40_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(An) */ +uae_u32 REGPARAM2 op_c50_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_c58_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,-(An) */ +uae_u32 REGPARAM2 op_c60_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_c68_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_c70_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_c78_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_c79_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_c7a_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_c7b_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,Dn */ +uae_u32 REGPARAM2 op_c80_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(An) */ +uae_u32 REGPARAM2 op_c90_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_c98_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,-(An) */ +uae_u32 REGPARAM2 op_ca0_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_ca8_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_cb0_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_cb8_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_cb9_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(d16,PC) */ +uae_u32 REGPARAM2 op_cba_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_cbb_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,Dn */ +uae_u32 REGPARAM2 op_1000_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),Dn */ +uae_u32 REGPARAM2 op_1010_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,Dn */ +uae_u32 REGPARAM2 op_1018_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),Dn */ +uae_u32 REGPARAM2 op_1020_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_1028_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_1030_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_1038_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_1039_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_103a_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_103b_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,Dn */ +uae_u32 REGPARAM2 op_103c_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_b_ri(dst,0); + start_needflags(); + or_b(dst,src); + } else { + mov_b_rr(dst,src); + test_b_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(An) */ +uae_u32 REGPARAM2 op_1080_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(An) */ +uae_u32 REGPARAM2 op_1090_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(An) */ +uae_u32 REGPARAM2 op_1098_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(An) */ +uae_u32 REGPARAM2 op_10a0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(An) */ +uae_u32 REGPARAM2 op_10a8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(An) */ +uae_u32 REGPARAM2 op_10b0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(An) */ +uae_u32 REGPARAM2 op_10b8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(An) */ +uae_u32 REGPARAM2 op_10b9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(An) */ +uae_u32 REGPARAM2 op_10ba_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(An) */ +uae_u32 REGPARAM2 op_10bb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(An) */ +uae_u32 REGPARAM2 op_10bc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_10c0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(An)+ */ +uae_u32 REGPARAM2 op_10d0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(An)+ */ +uae_u32 REGPARAM2 op_10d8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(An)+ */ +uae_u32 REGPARAM2 op_10e0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(An)+ */ +uae_u32 REGPARAM2 op_10e8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(An)+ */ +uae_u32 REGPARAM2 op_10f0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(An)+ */ +uae_u32 REGPARAM2 op_10f8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(An)+ */ +uae_u32 REGPARAM2 op_10f9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(An)+ */ +uae_u32 REGPARAM2 op_10fa_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(An)+ */ +uae_u32 REGPARAM2 op_10fb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_10fc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,-(An) */ +uae_u32 REGPARAM2 op_1100_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),-(An) */ +uae_u32 REGPARAM2 op_1110_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,-(An) */ +uae_u32 REGPARAM2 op_1118_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),-(An) */ +uae_u32 REGPARAM2 op_1120_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),-(An) */ +uae_u32 REGPARAM2 op_1128_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),-(An) */ +uae_u32 REGPARAM2 op_1130_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,-(An) */ +uae_u32 REGPARAM2 op_1138_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,-(An) */ +uae_u32 REGPARAM2 op_1139_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),-(An) */ +uae_u32 REGPARAM2 op_113a_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),-(An) */ +uae_u32 REGPARAM2 op_113b_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,-(An) */ +uae_u32 REGPARAM2 op_113c_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_1140_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(d16,An) */ +uae_u32 REGPARAM2 op_1150_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(d16,An) */ +uae_u32 REGPARAM2 op_1158_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(d16,An) */ +uae_u32 REGPARAM2 op_1160_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(d16,An) */ +uae_u32 REGPARAM2 op_1168_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_1170_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(d16,An) */ +uae_u32 REGPARAM2 op_1178_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(d16,An) */ +uae_u32 REGPARAM2 op_1179_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(d16,An) */ +uae_u32 REGPARAM2 op_117a_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_117b_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_117c_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_1180_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_1190_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_1198_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11a0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11a8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11b0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11b8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11b9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11ba_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11bb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11bc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_11c0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(xxx).W */ +uae_u32 REGPARAM2 op_11d0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(xxx).W */ +uae_u32 REGPARAM2 op_11d8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(xxx).W */ +uae_u32 REGPARAM2 op_11e0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(xxx).W */ +uae_u32 REGPARAM2 op_11e8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_11f0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(xxx).W */ +uae_u32 REGPARAM2 op_11f8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(xxx).W */ +uae_u32 REGPARAM2 op_11f9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(xxx).W */ +uae_u32 REGPARAM2 op_11fa_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_11fb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_11fc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_13c0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(xxx).L */ +uae_u32 REGPARAM2 op_13d0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(xxx).L */ +uae_u32 REGPARAM2 op_13d8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(xxx).L */ +uae_u32 REGPARAM2 op_13e0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(xxx).L */ +uae_u32 REGPARAM2 op_13e8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_13f0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(xxx).L */ +uae_u32 REGPARAM2 op_13f8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(xxx).L */ +uae_u32 REGPARAM2 op_13f9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(xxx).L */ +uae_u32 REGPARAM2 op_13fa_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_13fb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_13fc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,Dn */ +uae_u32 REGPARAM2 op_2000_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,Dn */ +uae_u32 REGPARAM2 op_2008_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),Dn */ +uae_u32 REGPARAM2 op_2010_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,Dn */ +uae_u32 REGPARAM2 op_2018_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),Dn */ +uae_u32 REGPARAM2 op_2020_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_2028_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_2030_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_2038_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_2039_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_203a_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_203b_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,Dn */ +uae_u32 REGPARAM2 op_203c_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L Dn,An */ +uae_u32 REGPARAM2 op_2040_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L An,An */ +uae_u32 REGPARAM2 op_2048_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (An),An */ +uae_u32 REGPARAM2 op_2050_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (An)+,An */ +uae_u32 REGPARAM2 op_2058_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L -(An),An */ +uae_u32 REGPARAM2 op_2060_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (d16,An),An */ +uae_u32 REGPARAM2 op_2068_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_2070_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (xxx).W,An */ +uae_u32 REGPARAM2 op_2078_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (xxx).L,An */ +uae_u32 REGPARAM2 op_2079_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (d16,PC),An */ +uae_u32 REGPARAM2 op_207a_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_207b_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L #.L,An */ +uae_u32 REGPARAM2 op_207c_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(An) */ +uae_u32 REGPARAM2 op_2080_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(An) */ +uae_u32 REGPARAM2 op_2088_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(An) */ +uae_u32 REGPARAM2 op_2090_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(An) */ +uae_u32 REGPARAM2 op_2098_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(An) */ +uae_u32 REGPARAM2 op_20a0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),(An) */ +uae_u32 REGPARAM2 op_20a8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(An) */ +uae_u32 REGPARAM2 op_20b0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(An) */ +uae_u32 REGPARAM2 op_20b8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(An) */ +uae_u32 REGPARAM2 op_20b9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(An) */ +uae_u32 REGPARAM2 op_20ba_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(An) */ +uae_u32 REGPARAM2 op_20bb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(An) */ +uae_u32 REGPARAM2 op_20bc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_20c0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(An)+ */ +uae_u32 REGPARAM2 op_20c8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(An)+ */ +uae_u32 REGPARAM2 op_20d0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(An)+ */ +uae_u32 REGPARAM2 op_20d8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(An)+ */ +uae_u32 REGPARAM2 op_20e0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),(An)+ */ +uae_u32 REGPARAM2 op_20e8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(An)+ */ +uae_u32 REGPARAM2 op_20f0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(An)+ */ +uae_u32 REGPARAM2 op_20f8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(An)+ */ +uae_u32 REGPARAM2 op_20f9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(An)+ */ +uae_u32 REGPARAM2 op_20fa_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(An)+ */ +uae_u32 REGPARAM2 op_20fb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_20fc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,-(An) */ +uae_u32 REGPARAM2 op_2100_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,-(An) */ +uae_u32 REGPARAM2 op_2108_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),-(An) */ +uae_u32 REGPARAM2 op_2110_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,-(An) */ +uae_u32 REGPARAM2 op_2118_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),-(An) */ +uae_u32 REGPARAM2 op_2120_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),-(An) */ +uae_u32 REGPARAM2 op_2128_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),-(An) */ +uae_u32 REGPARAM2 op_2130_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,-(An) */ +uae_u32 REGPARAM2 op_2138_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,-(An) */ +uae_u32 REGPARAM2 op_2139_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),-(An) */ +uae_u32 REGPARAM2 op_213a_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),-(An) */ +uae_u32 REGPARAM2 op_213b_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,-(An) */ +uae_u32 REGPARAM2 op_213c_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_2140_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(d16,An) */ +uae_u32 REGPARAM2 op_2148_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(d16,An) */ +uae_u32 REGPARAM2 op_2150_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(d16,An) */ +uae_u32 REGPARAM2 op_2158_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(d16,An) */ +uae_u32 REGPARAM2 op_2160_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),(d16,An) */ +uae_u32 REGPARAM2 op_2168_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_2170_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(d16,An) */ +uae_u32 REGPARAM2 op_2178_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(d16,An) */ +uae_u32 REGPARAM2 op_2179_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(d16,An) */ +uae_u32 REGPARAM2 op_217a_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_217b_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_217c_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_2180_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_2188_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_2190_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_2198_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21a0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_3 +/* MOVE.L (d16,An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21a8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21b0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21b8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21b9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21ba_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21bb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21bc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_21c0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(xxx).W */ +uae_u32 REGPARAM2 op_21c8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(xxx).W */ +uae_u32 REGPARAM2 op_21d0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(xxx).W */ +uae_u32 REGPARAM2 op_21d8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(xxx).W */ +uae_u32 REGPARAM2 op_21e0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),(xxx).W */ +uae_u32 REGPARAM2 op_21e8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_21f0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(xxx).W */ +uae_u32 REGPARAM2 op_21f8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(xxx).W */ +uae_u32 REGPARAM2 op_21f9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(xxx).W */ +uae_u32 REGPARAM2 op_21fa_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_21fb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_21fc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_23c0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(xxx).L */ +uae_u32 REGPARAM2 op_23c8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(xxx).L */ +uae_u32 REGPARAM2 op_23d0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(xxx).L */ +uae_u32 REGPARAM2 op_23d8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(xxx).L */ +uae_u32 REGPARAM2 op_23e0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),(xxx).L */ +uae_u32 REGPARAM2 op_23e8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_23f0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(xxx).L */ +uae_u32 REGPARAM2 op_23f8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(xxx).L */ +uae_u32 REGPARAM2 op_23f9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(xxx).L */ +uae_u32 REGPARAM2 op_23fa_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_23fb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_23fc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,Dn */ +uae_u32 REGPARAM2 op_3000_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,Dn */ +uae_u32 REGPARAM2 op_3008_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),Dn */ +uae_u32 REGPARAM2 op_3010_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,Dn */ +uae_u32 REGPARAM2 op_3018_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),Dn */ +uae_u32 REGPARAM2 op_3020_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_3028_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_3030_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_3038_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_3039_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_303a_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_303b_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,Dn */ +uae_u32 REGPARAM2 op_303c_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_w_ri(dst,0); + start_needflags(); + or_w(dst,src); + } else { + mov_w_rr(dst,src); + test_w_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W Dn,An */ +uae_u32 REGPARAM2 op_3040_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W An,An */ +uae_u32 REGPARAM2 op_3048_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (An),An */ +uae_u32 REGPARAM2 op_3050_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (An)+,An */ +uae_u32 REGPARAM2 op_3058_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W -(An),An */ +uae_u32 REGPARAM2 op_3060_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (d16,An),An */ +uae_u32 REGPARAM2 op_3068_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_3070_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (xxx).W,An */ +uae_u32 REGPARAM2 op_3078_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (xxx).L,An */ +uae_u32 REGPARAM2 op_3079_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (d16,PC),An */ +uae_u32 REGPARAM2 op_307a_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_307b_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W #.W,An */ +uae_u32 REGPARAM2 op_307c_0_comp_ff(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(An) */ +uae_u32 REGPARAM2 op_3080_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(An) */ +uae_u32 REGPARAM2 op_3088_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(An) */ +uae_u32 REGPARAM2 op_3090_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(An) */ +uae_u32 REGPARAM2 op_3098_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(An) */ +uae_u32 REGPARAM2 op_30a0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(An) */ +uae_u32 REGPARAM2 op_30a8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(An) */ +uae_u32 REGPARAM2 op_30b0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(An) */ +uae_u32 REGPARAM2 op_30b8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(An) */ +uae_u32 REGPARAM2 op_30b9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(An) */ +uae_u32 REGPARAM2 op_30ba_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(An) */ +uae_u32 REGPARAM2 op_30bb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(An) */ +uae_u32 REGPARAM2 op_30bc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_30c0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(An)+ */ +uae_u32 REGPARAM2 op_30c8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(An)+ */ +uae_u32 REGPARAM2 op_30d0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(An)+ */ +uae_u32 REGPARAM2 op_30d8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(An)+ */ +uae_u32 REGPARAM2 op_30e0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(An)+ */ +uae_u32 REGPARAM2 op_30e8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(An)+ */ +uae_u32 REGPARAM2 op_30f0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(An)+ */ +uae_u32 REGPARAM2 op_30f8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(An)+ */ +uae_u32 REGPARAM2 op_30f9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(An)+ */ +uae_u32 REGPARAM2 op_30fa_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(An)+ */ +uae_u32 REGPARAM2 op_30fb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_30fc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,-(An) */ +uae_u32 REGPARAM2 op_3100_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,-(An) */ +uae_u32 REGPARAM2 op_3108_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),-(An) */ +uae_u32 REGPARAM2 op_3110_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,-(An) */ +uae_u32 REGPARAM2 op_3118_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),-(An) */ +uae_u32 REGPARAM2 op_3120_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),-(An) */ +uae_u32 REGPARAM2 op_3128_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),-(An) */ +uae_u32 REGPARAM2 op_3130_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,-(An) */ +uae_u32 REGPARAM2 op_3138_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,-(An) */ +uae_u32 REGPARAM2 op_3139_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),-(An) */ +uae_u32 REGPARAM2 op_313a_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),-(An) */ +uae_u32 REGPARAM2 op_313b_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,-(An) */ +uae_u32 REGPARAM2 op_313c_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_3140_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(d16,An) */ +uae_u32 REGPARAM2 op_3148_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(d16,An) */ +uae_u32 REGPARAM2 op_3150_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(d16,An) */ +uae_u32 REGPARAM2 op_3158_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(d16,An) */ +uae_u32 REGPARAM2 op_3160_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(d16,An) */ +uae_u32 REGPARAM2 op_3168_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_3170_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(d16,An) */ +uae_u32 REGPARAM2 op_3178_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(d16,An) */ +uae_u32 REGPARAM2 op_3179_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(d16,An) */ +uae_u32 REGPARAM2 op_317a_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_317b_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_317c_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_3180_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_3188_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_3190_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_3198_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31a0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31a8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31b0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31b8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31b9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31ba_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31bb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31bc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_31c0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(xxx).W */ +uae_u32 REGPARAM2 op_31c8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(xxx).W */ +uae_u32 REGPARAM2 op_31d0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(xxx).W */ +uae_u32 REGPARAM2 op_31d8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(xxx).W */ +uae_u32 REGPARAM2 op_31e0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(xxx).W */ +uae_u32 REGPARAM2 op_31e8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_31f0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(xxx).W */ +uae_u32 REGPARAM2 op_31f8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(xxx).W */ +uae_u32 REGPARAM2 op_31f9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(xxx).W */ +uae_u32 REGPARAM2 op_31fa_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_31fb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_31fc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_33c0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(xxx).L */ +uae_u32 REGPARAM2 op_33c8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(xxx).L */ +uae_u32 REGPARAM2 op_33d0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(xxx).L */ +uae_u32 REGPARAM2 op_33d8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(xxx).L */ +uae_u32 REGPARAM2 op_33e0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(xxx).L */ +uae_u32 REGPARAM2 op_33e8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_33f0_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(xxx).L */ +uae_u32 REGPARAM2 op_33f8_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(xxx).L */ +uae_u32 REGPARAM2 op_33f9_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(xxx).L */ +uae_u32 REGPARAM2 op_33fa_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_33fb_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_33fc_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B Dn */ +uae_u32 REGPARAM2 op_4000_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(srcreg != dst) { + mov_b_rr(srcreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (An) */ +uae_u32 REGPARAM2 op_4010_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (An)+ */ +uae_u32 REGPARAM2 op_4018_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B -(An) */ +uae_u32 REGPARAM2 op_4020_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (d16,An) */ +uae_u32 REGPARAM2 op_4028_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4030_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (xxx).W */ +uae_u32 REGPARAM2 op_4038_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (xxx).L */ +uae_u32 REGPARAM2 op_4039_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W Dn */ +uae_u32 REGPARAM2 op_4040_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(srcreg != dst) { + mov_w_rr(srcreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (An) */ +uae_u32 REGPARAM2 op_4050_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (An)+ */ +uae_u32 REGPARAM2 op_4058_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W -(An) */ +uae_u32 REGPARAM2 op_4060_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (d16,An) */ +uae_u32 REGPARAM2 op_4068_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4070_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (xxx).W */ +uae_u32 REGPARAM2 op_4078_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (xxx).L */ +uae_u32 REGPARAM2 op_4079_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L Dn */ +uae_u32 REGPARAM2 op_4080_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (An) */ +uae_u32 REGPARAM2 op_4090_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (An)+ */ +uae_u32 REGPARAM2 op_4098_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L -(An) */ +uae_u32 REGPARAM2 op_40a0_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (d16,An) */ +uae_u32 REGPARAM2 op_40a8_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_40b0_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (xxx).W */ +uae_u32 REGPARAM2 op_40b8_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (xxx).L */ +uae_u32 REGPARAM2 op_40b9_0_comp_ff(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (An),An */ +uae_u32 REGPARAM2 op_41d0_0_comp_ff(uae_u32 opcode) /* LEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (d16,An),An */ +uae_u32 REGPARAM2 op_41e8_0_comp_ff(uae_u32 opcode) /* LEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_41f0_0_comp_ff(uae_u32 opcode) /* LEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (xxx).W,An */ +uae_u32 REGPARAM2 op_41f8_0_comp_ff(uae_u32 opcode) /* LEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (xxx).L,An */ +uae_u32 REGPARAM2 op_41f9_0_comp_ff(uae_u32 opcode) /* LEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (d16,PC),An */ +uae_u32 REGPARAM2 op_41fa_0_comp_ff(uae_u32 opcode) /* LEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_41fb_0_comp_ff(uae_u32 opcode) /* LEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B Dn */ +uae_u32 REGPARAM2 op_4200_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_b_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(srcreg != dst) { + mov_b_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (An) */ +uae_u32 REGPARAM2 op_4210_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_b_rr(dst,dst); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (An)+ */ +uae_u32 REGPARAM2 op_4218_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_b_rr(dst,dst); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B -(An) */ +uae_u32 REGPARAM2 op_4220_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_b_rr(dst,dst); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (d16,An) */ +uae_u32 REGPARAM2 op_4228_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_b_rr(dst,dst); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4230_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_b_rr(dst,dst); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (xxx).W */ +uae_u32 REGPARAM2 op_4238_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_b_rr(dst,dst); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (xxx).L */ +uae_u32 REGPARAM2 op_4239_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_b_rr(dst,dst); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W Dn */ +uae_u32 REGPARAM2 op_4240_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_w_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(srcreg != dst) { + mov_w_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (An) */ +uae_u32 REGPARAM2 op_4250_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_w_rr(dst,dst); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (An)+ */ +uae_u32 REGPARAM2 op_4258_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_w_rr(dst,dst); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W -(An) */ +uae_u32 REGPARAM2 op_4260_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_w_rr(dst,dst); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (d16,An) */ +uae_u32 REGPARAM2 op_4268_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_w_rr(dst,dst); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4270_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_w_rr(dst,dst); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (xxx).W */ +uae_u32 REGPARAM2 op_4278_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_w_rr(dst,dst); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (xxx).L */ +uae_u32 REGPARAM2 op_4279_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_w_rr(dst,dst); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L Dn */ +uae_u32 REGPARAM2 op_4280_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (An) */ +uae_u32 REGPARAM2 op_4290_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (An)+ */ +uae_u32 REGPARAM2 op_4298_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L -(An) */ +uae_u32 REGPARAM2 op_42a0_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (d16,An) */ +uae_u32 REGPARAM2 op_42a8_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_42b0_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (xxx).W */ +uae_u32 REGPARAM2 op_42b8_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (xxx).L */ +uae_u32 REGPARAM2 op_42b9_0_comp_ff(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B Dn */ +uae_u32 REGPARAM2 op_4400_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(srcreg != dst) { + mov_b_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B (An) */ +uae_u32 REGPARAM2 op_4410_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_4 +/* NEG.B (An)+ */ +uae_u32 REGPARAM2 op_4418_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B -(An) */ +uae_u32 REGPARAM2 op_4420_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B (d16,An) */ +uae_u32 REGPARAM2 op_4428_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4430_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B (xxx).W */ +uae_u32 REGPARAM2 op_4438_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B (xxx).L */ +uae_u32 REGPARAM2 op_4439_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W Dn */ +uae_u32 REGPARAM2 op_4440_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(srcreg != dst) { + mov_w_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (An) */ +uae_u32 REGPARAM2 op_4450_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (An)+ */ +uae_u32 REGPARAM2 op_4458_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W -(An) */ +uae_u32 REGPARAM2 op_4460_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (d16,An) */ +uae_u32 REGPARAM2 op_4468_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4470_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (xxx).W */ +uae_u32 REGPARAM2 op_4478_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (xxx).L */ +uae_u32 REGPARAM2 op_4479_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L Dn */ +uae_u32 REGPARAM2 op_4480_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (An) */ +uae_u32 REGPARAM2 op_4490_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (An)+ */ +uae_u32 REGPARAM2 op_4498_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L -(An) */ +uae_u32 REGPARAM2 op_44a0_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (d16,An) */ +uae_u32 REGPARAM2 op_44a8_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_44b0_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (xxx).W */ +uae_u32 REGPARAM2 op_44b8_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (xxx).L */ +uae_u32 REGPARAM2 op_44b9_0_comp_ff(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B Dn */ +uae_u32 REGPARAM2 op_4600_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + if(srcreg != dst) { + mov_b_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (An) */ +uae_u32 REGPARAM2 op_4610_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (An)+ */ +uae_u32 REGPARAM2 op_4618_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B -(An) */ +uae_u32 REGPARAM2 op_4620_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (d16,An) */ +uae_u32 REGPARAM2 op_4628_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4630_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (xxx).W */ +uae_u32 REGPARAM2 op_4638_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (xxx).L */ +uae_u32 REGPARAM2 op_4639_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W Dn */ +uae_u32 REGPARAM2 op_4640_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + if(srcreg != dst) { + mov_w_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (An) */ +uae_u32 REGPARAM2 op_4650_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (An)+ */ +uae_u32 REGPARAM2 op_4658_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W -(An) */ +uae_u32 REGPARAM2 op_4660_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (d16,An) */ +uae_u32 REGPARAM2 op_4668_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4670_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (xxx).W */ +uae_u32 REGPARAM2 op_4678_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (xxx).L */ +uae_u32 REGPARAM2 op_4679_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L Dn */ +uae_u32 REGPARAM2 op_4680_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (An) */ +uae_u32 REGPARAM2 op_4690_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (An)+ */ +uae_u32 REGPARAM2 op_4698_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L -(An) */ +uae_u32 REGPARAM2 op_46a0_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (d16,An) */ +uae_u32 REGPARAM2 op_46a8_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_46b0_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (xxx).W */ +uae_u32 REGPARAM2 op_46b8_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (xxx).L */ +uae_u32 REGPARAM2 op_46b9_0_comp_ff(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LINK.L An,#.L */ +uae_u32 REGPARAM2 op_4808_0_comp_ff(uae_u32 opcode) /* LINK */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + if (srcreg == 7) { + m68k_pc_offset = m68k_pc_offset_thisinst; + FAIL(1); + return 0; + } + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int offs = scratchie++; + mov_l_ri(offs, comp_get_ilong((m68k_pc_offset+=4)-4)); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,src,scratchie); + mov_l_rr(src,SP_REG); + add_l(SP_REG,offs); + if(srcreg + 8 != src) { + mov_l_rr(srcreg + 8, src); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SWAP.W Dn */ +uae_u32 REGPARAM2 op_4840_0_comp_ff(uae_u32 opcode) /* SWAP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + rol_l_ri(src,16); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + if(srcreg != src) { + mov_l_rr(srcreg, src); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (An) */ +uae_u32 REGPARAM2 op_4850_0_comp_ff(uae_u32 opcode) /* PEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if (srcreg==7) dodgy=1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (d16,An) */ +uae_u32 REGPARAM2 op_4868_0_comp_ff(uae_u32 opcode) /* PEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if (srcreg==7) dodgy=1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4870_0_comp_ff(uae_u32 opcode) /* PEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if (srcreg==7) dodgy=1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (xxx).W */ +uae_u32 REGPARAM2 op_4878_0_comp_ff(uae_u32 opcode) /* PEA */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (xxx).L */ +uae_u32 REGPARAM2 op_4879_0_comp_ff(uae_u32 opcode) /* PEA */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (d16,PC) */ +uae_u32 REGPARAM2 op_487a_0_comp_ff(uae_u32 opcode) /* PEA */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_487b_0_comp_ff(uae_u32 opcode) /* PEA */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXT.W Dn */ +uae_u32 REGPARAM2 op_4880_0_comp_ff(uae_u32 opcode) /* EXT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + { + int dst = scratchie++; + sign_extend_8_rr(dst,src); + dont_care_flags(); + { + start_needflags(); + test_w_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(srcreg != dst) { + mov_w_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,(An) */ +uae_u32 REGPARAM2 op_4890_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(srca, dstreg + 8); + } + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + offset+=2; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writeword(tmp,i,scratchie); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,-(An) */ +uae_u32 REGPARAM2 op_48a0_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca=dodgy?scratchie++:dstreg+8; + if (dodgy) { + mov_l_rr(srca,8+dstreg); + } + if (1 && !special_mem && !jit_n_addr_unsafe && !(mask & (1 << (7 - dstreg)))) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + offset-=2; + mov_l_rr(tmp,15-i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + } + } + lea_l_brr(8+dstreg,srca,(uae_s32)offset); + } else { + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + sub_l_ri(srca,2); + writeword(srca,15-i,scratchie); + } + } + mov_l_rr(8+dstreg,srca); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_48a8_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + dstreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + offset+=2; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writeword(tmp,i,scratchie); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_48b0_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + offset+=2; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writeword(tmp,i,scratchie); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_48b8_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + offset+=2; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writeword(tmp,i,scratchie); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_48b9_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + offset+=2; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writeword(tmp,i,scratchie); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXT.L Dn */ +uae_u32 REGPARAM2 op_48c0_0_comp_ff(uae_u32 opcode) /* EXT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + { + int dst = src; + sign_extend_16_rr(src,src); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,(An) */ +uae_u32 REGPARAM2 op_48d0_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(srca, dstreg + 8); + } + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + offset+=4; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writelong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,-(An) */ +uae_u32 REGPARAM2 op_48e0_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(srca, 8 + dstreg); + } + if (1 && !special_mem && !jit_n_addr_unsafe && !(mask & (1 << (7 - dstreg)))) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + offset-=4; + mov_l_rr(tmp,15-i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + } + } + lea_l_brr(8+dstreg,srca,(uae_s32)offset); + } else { + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + sub_l_ri(srca,4); + writelong(srca,15-i,scratchie); + } + } + mov_l_rr(8+dstreg,srca); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,(d16,An) */ +uae_u32 REGPARAM2 op_48e8_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + dstreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + offset+=4; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writelong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_48f0_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + offset+=4; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writelong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,(xxx).W */ +uae_u32 REGPARAM2 op_48f8_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + offset+=4; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writelong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,(xxx).L */ +uae_u32 REGPARAM2 op_48f9_0_comp_ff(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + offset+=4; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writelong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXT.B Dn */ +uae_u32 REGPARAM2 op_49c0_0_comp_ff(uae_u32 opcode) /* EXT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + { + int dst = src; + sign_extend_8_rr(src,src); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B Dn */ +uae_u32 REGPARAM2 op_4a00_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (An) */ +uae_u32 REGPARAM2 op_4a10_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (An)+ */ +uae_u32 REGPARAM2 op_4a18_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B -(An) */ +uae_u32 REGPARAM2 op_4a20_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (d16,An) */ +uae_u32 REGPARAM2 op_4a28_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4a30_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (xxx).W */ +uae_u32 REGPARAM2 op_4a38_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (xxx).L */ +uae_u32 REGPARAM2 op_4a39_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (d16,PC) */ +uae_u32 REGPARAM2 op_4a3a_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4a3b_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B #.B */ +uae_u32 REGPARAM2 op_4a3c_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_b_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W Dn */ +uae_u32 REGPARAM2 op_4a40_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W An */ +uae_u32 REGPARAM2 op_4a48_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (An) */ +uae_u32 REGPARAM2 op_4a50_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (An)+ */ +uae_u32 REGPARAM2 op_4a58_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W -(An) */ +uae_u32 REGPARAM2 op_4a60_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (d16,An) */ +uae_u32 REGPARAM2 op_4a68_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4a70_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (xxx).W */ +uae_u32 REGPARAM2 op_4a78_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (xxx).L */ +uae_u32 REGPARAM2 op_4a79_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (d16,PC) */ +uae_u32 REGPARAM2 op_4a7a_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4a7b_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W #.W */ +uae_u32 REGPARAM2 op_4a7c_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + dont_care_flags(); + { + start_needflags(); + test_w_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L Dn */ +uae_u32 REGPARAM2 op_4a80_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L An */ +uae_u32 REGPARAM2 op_4a88_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (An) */ +uae_u32 REGPARAM2 op_4a90_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (An)+ */ +uae_u32 REGPARAM2 op_4a98_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L -(An) */ +uae_u32 REGPARAM2 op_4aa0_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (d16,An) */ +uae_u32 REGPARAM2 op_4aa8_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4ab0_0_comp_ff(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (xxx).W */ +uae_u32 REGPARAM2 op_4ab8_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (xxx).L */ +uae_u32 REGPARAM2 op_4ab9_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (d16,PC) */ +uae_u32 REGPARAM2 op_4aba_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4abb_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L #.L */ +uae_u32 REGPARAM2 op_4abc_0_comp_ff(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + dont_care_flags(); + { + start_needflags(); + test_l_rr(src,src); + live_flags(); + end_needflags(); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(An) */ +uae_u32 REGPARAM2 op_4c90_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(srca, dstreg + 8); + } + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_4c98_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, dstreg + 8); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + lea_l_brr(8+dstreg,srca,offset); + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + mov_l_rr(8+dstreg,tmp); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_4ca8_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + dstreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_4cb0_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_4cb8_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_4cb9_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_4cba_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4cbb_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(An) */ +uae_u32 REGPARAM2 op_4cd0_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(srca, dstreg + 8); + } + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(An)+ */ +uae_u32 REGPARAM2 op_4cd8_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, dstreg + 8); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + lea_l_brr(8+dstreg,srca,offset); + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + mov_l_rr(8+dstreg,tmp); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(d16,An) */ +uae_u32 REGPARAM2 op_4ce8_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + dstreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_4cf0_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(xxx).W */ +uae_u32 REGPARAM2 op_4cf8_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(xxx).L */ +uae_u32 REGPARAM2 op_4cf9_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_4cfa_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4cfb_0_comp_ff(uae_u32 opcode) /* MVMEL */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LINK.W An,#.W */ +uae_u32 REGPARAM2 op_4e50_0_comp_ff(uae_u32 opcode) /* LINK */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + if (srcreg == 7) { + m68k_pc_offset = m68k_pc_offset_thisinst; + FAIL(1); + return 0; + } + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,src,scratchie); + mov_l_rr(src,SP_REG); + sign_extend_16_rr(offs,offs); + add_l(SP_REG,offs); + if(srcreg + 8 != src) { + mov_l_rr(srcreg + 8, src); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* UNLK.L An */ +uae_u32 REGPARAM2 op_4e58_0_comp_ff(uae_u32 opcode) /* UNLK */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + mov_l_rr(SP_REG,src); + readlong(SP_REG,src,scratchie); + add_l_ri(SP_REG,4); + if(srcreg + 8 != src) { + mov_l_rr(srcreg + 8, src); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOP.L */ +uae_u32 REGPARAM2 op_4e71_0_comp_ff(uae_u32 opcode) /* NOP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* RTD.L #.W */ +uae_u32 REGPARAM2 op_4e74_0_comp_ff(uae_u32 opcode) /* RTD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + add_l_ri(offs,4); + { + int newad=scratchie++; + readlong(SP_REG,newad,scratchie); + mov_l_mr(JITPTR ®s.pc,newad); + get_n_addr_jmp(newad,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + add_l(SP_REG,offs); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* RTS.L */ +uae_u32 REGPARAM2 op_4e75_0_comp_ff(uae_u32 opcode) /* RTS */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int newad=scratchie++; + readlong(SP_REG,newad,scratchie); + mov_l_mr(JITPTR ®s.pc,newad); + get_n_addr_jmp(newad,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + lea_l_brr(SP_REG,SP_REG,4); + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (An) */ +uae_u32 REGPARAM2 op_4e90_0_comp_ff(uae_u32 opcode) /* JSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (d16,An) */ +uae_u32 REGPARAM2 op_4ea8_0_comp_ff(uae_u32 opcode) /* JSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4eb0_0_comp_ff(uae_u32 opcode) /* JSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (xxx).W */ +uae_u32 REGPARAM2 op_4eb8_0_comp_ff(uae_u32 opcode) /* JSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (xxx).L */ +uae_u32 REGPARAM2 op_4eb9_0_comp_ff(uae_u32 opcode) /* JSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (d16,PC) */ +uae_u32 REGPARAM2 op_4eba_0_comp_ff(uae_u32 opcode) /* JSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4ebb_0_comp_ff(uae_u32 opcode) /* JSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (An) */ +uae_u32 REGPARAM2 op_4ed0_0_comp_ff(uae_u32 opcode) /* JMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (d16,An) */ +uae_u32 REGPARAM2 op_4ee8_0_comp_ff(uae_u32 opcode) /* JMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4ef0_0_comp_ff(uae_u32 opcode) /* JMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (xxx).W */ +uae_u32 REGPARAM2 op_4ef8_0_comp_ff(uae_u32 opcode) /* JMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (xxx).L */ +uae_u32 REGPARAM2 op_4ef9_0_comp_ff(uae_u32 opcode) /* JMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (d16,PC) */ +uae_u32 REGPARAM2 op_4efa_0_comp_ff(uae_u32 opcode) /* JMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4efb_0_comp_ff(uae_u32 opcode) /* JMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,Dn */ +uae_u32 REGPARAM2 op_5000_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(An) */ +uae_u32 REGPARAM2 op_5010_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(An)+ */ +uae_u32 REGPARAM2 op_5018_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,-(An) */ +uae_u32 REGPARAM2 op_5020_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(d16,An) */ +uae_u32 REGPARAM2 op_5028_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_5030_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(xxx).W */ +uae_u32 REGPARAM2 op_5038_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(xxx).L */ +uae_u32 REGPARAM2 op_5039_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,Dn */ +uae_u32 REGPARAM2 op_5040_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDAQ.W #,An */ +uae_u32 REGPARAM2 op_5048_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(An) */ +uae_u32 REGPARAM2 op_5050_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(An)+ */ +uae_u32 REGPARAM2 op_5058_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,-(An) */ +uae_u32 REGPARAM2 op_5060_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(d16,An) */ +uae_u32 REGPARAM2 op_5068_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_5070_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(xxx).W */ +uae_u32 REGPARAM2 op_5078_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(xxx).L */ +uae_u32 REGPARAM2 op_5079_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,Dn */ +uae_u32 REGPARAM2 op_5080_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDAQ.L #,An */ +uae_u32 REGPARAM2 op_5088_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(An) */ +uae_u32 REGPARAM2 op_5090_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(An)+ */ +uae_u32 REGPARAM2 op_5098_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_5 +/* ADDQ.L #,-(An) */ +uae_u32 REGPARAM2 op_50a0_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(d16,An) */ +uae_u32 REGPARAM2 op_50a8_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_50b0_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(xxx).W */ +uae_u32 REGPARAM2 op_50b8_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(xxx).L */ +uae_u32 REGPARAM2 op_50b9_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_50c0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_50c8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_50d0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_50d8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_50e0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_50e8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_50f0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_50f8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_50f9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,Dn */ +uae_u32 REGPARAM2 op_5100_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(An) */ +uae_u32 REGPARAM2 op_5110_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(An)+ */ +uae_u32 REGPARAM2 op_5118_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,-(An) */ +uae_u32 REGPARAM2 op_5120_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(d16,An) */ +uae_u32 REGPARAM2 op_5128_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_5130_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(xxx).W */ +uae_u32 REGPARAM2 op_5138_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(xxx).L */ +uae_u32 REGPARAM2 op_5139_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,Dn */ +uae_u32 REGPARAM2 op_5140_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBAQ.W #,An */ +uae_u32 REGPARAM2 op_5148_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(An) */ +uae_u32 REGPARAM2 op_5150_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(An)+ */ +uae_u32 REGPARAM2 op_5158_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,-(An) */ +uae_u32 REGPARAM2 op_5160_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(d16,An) */ +uae_u32 REGPARAM2 op_5168_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_5170_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(xxx).W */ +uae_u32 REGPARAM2 op_5178_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(xxx).L */ +uae_u32 REGPARAM2 op_5179_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,Dn */ +uae_u32 REGPARAM2 op_5180_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBAQ.L #,An */ +uae_u32 REGPARAM2 op_5188_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(An) */ +uae_u32 REGPARAM2 op_5190_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(An)+ */ +uae_u32 REGPARAM2 op_5198_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,-(An) */ +uae_u32 REGPARAM2 op_51a0_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(d16,An) */ +uae_u32 REGPARAM2 op_51a8_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_51b0_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(xxx).W */ +uae_u32 REGPARAM2 op_51b8_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(xxx).L */ +uae_u32 REGPARAM2 op_51b9_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_51c0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_51c8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + start_needflags(); + sub_w_ri(src,1); + end_needflags(); + { + uintptr v2; + uintptr v1=get_const(PC_P); + v2=get_const(offs); + register_branch(v1,v2,3); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_51d0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_51d8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_51e0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_51e8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_51f0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_51f8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_51f9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_52c0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_52c8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,7); + cmov_l_rr(src,nsrc,7); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_52d0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_52d8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_52e0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_52e8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_52f0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_52f8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_52f9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_53c0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_53c8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,6); + cmov_l_rr(src,nsrc,6); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_53d0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_53d8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_53e0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_53e8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_53f0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_53f8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_53f9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_54c0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_54c8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,3); + cmov_l_rr(src,nsrc,3); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_54d0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_54d8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_54e0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_54e8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_54f0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_54f8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_54f9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_55c0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_55c8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,2); + cmov_l_rr(src,nsrc,2); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_55d0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_55d8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_55e0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_55e8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_55f0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_55f8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_55f9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_56c0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_56c8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,5); + cmov_l_rr(src,nsrc,5); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_56d0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_56d8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_56e0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_56e8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_56f0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_56f8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_56f9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_57c0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_57c8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,4); + cmov_l_rr(src,nsrc,4); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_57d0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_57d8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_57e0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_57e8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_57f0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_57f8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_57f9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5ac0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5ac8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,9); + cmov_l_rr(src,nsrc,9); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5ad0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5ad8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5ae0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5ae8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5af0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5af8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5af9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5bc0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5bc8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,8); + cmov_l_rr(src,nsrc,8); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5bd0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5bd8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5be0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5be8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5bf0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5bf8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5bf9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5cc0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5cc8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,13); + cmov_l_rr(src,nsrc,13); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5cd0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5cd8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5ce0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5ce8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5cf0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5cf8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5cf9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5dc0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5dc8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,12); + cmov_l_rr(src,nsrc,12); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5dd0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5dd8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5de0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5de8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5df0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5df8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5df9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5ec0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5ec8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,15); + cmov_l_rr(src,nsrc,15); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5ed0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5ed8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5ee0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5ee8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5ef0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5ef8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5ef9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5fc0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5fc8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,14); + cmov_l_rr(src,nsrc,14); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5fd0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5fd8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5fe0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5fe8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5ff0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5ff8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5ff9_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6000_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + mov_l_rr(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6001_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + mov_l_rr(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_60ff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + mov_l_rr(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSR.W #.W */ +uae_u32 REGPARAM2 op_6100_0_comp_ff(uae_u32 opcode) /* BSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + add_l_ri(src,m68k_pc_offset_thisinst+2); + m68k_pc_offset=0; + add_l(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSRQ.B # */ +uae_u32 REGPARAM2 op_6101_0_comp_ff(uae_u32 opcode) /* BSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + add_l_ri(src,m68k_pc_offset_thisinst+2); + m68k_pc_offset=0; + add_l(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSR.L #.L */ +uae_u32 REGPARAM2 op_61ff_0_comp_ff(uae_u32 opcode) /* BSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + add_l_ri(src,m68k_pc_offset_thisinst+2); + m68k_pc_offset=0; + add_l(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6200_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,7); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6201_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,7); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_62ff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,7); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6300_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,6); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6301_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,6); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_6 +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_63ff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,6); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6400_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,3); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6401_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,3); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_64ff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,3); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6500_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,2); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6501_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,2); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_65ff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,2); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6600_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,5); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6601_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,5); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_66ff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,5); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6700_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,4); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6701_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,4); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_67ff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,4); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6a00_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,9); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6a01_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,9); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6aff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,9); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6b00_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,8); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6b01_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,8); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6bff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,8); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6c00_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,13); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6c01_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,13); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6cff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,13); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6d00_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,12); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6d01_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,12); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6dff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,12); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6e00_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,15); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6e01_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,15); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6eff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,15); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6f00_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,14); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6f01_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,14); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6fff_0_comp_ff(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,14); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEQ.L #,Dn */ +uae_u32 REGPARAM2 op_7000_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + { + if (src!=dst) { + mov_l_ri(dst,0); + start_needflags(); + or_l(dst,src); + } else { + mov_l_rr(dst,src); + test_l_rr(dst,dst); + } + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,Dn */ +uae_u32 REGPARAM2 op_8000_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (An),Dn */ +uae_u32 REGPARAM2 op_8010_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (An)+,Dn */ +uae_u32 REGPARAM2 op_8018_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B -(An),Dn */ +uae_u32 REGPARAM2 op_8020_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_8028_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_8030_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_8038_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_8039_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_803a_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_803b_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,Dn */ +uae_u32 REGPARAM2 op_803c_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,Dn */ +uae_u32 REGPARAM2 op_8040_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (An),Dn */ +uae_u32 REGPARAM2 op_8050_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (An)+,Dn */ +uae_u32 REGPARAM2 op_8058_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W -(An),Dn */ +uae_u32 REGPARAM2 op_8060_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_8068_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_8070_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_8078_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_8079_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_807a_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_807b_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,Dn */ +uae_u32 REGPARAM2 op_807c_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,Dn */ +uae_u32 REGPARAM2 op_8080_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (An),Dn */ +uae_u32 REGPARAM2 op_8090_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (An)+,Dn */ +uae_u32 REGPARAM2 op_8098_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L -(An),Dn */ +uae_u32 REGPARAM2 op_80a0_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_80a8_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_80b0_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_80b8_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_80b9_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_80ba_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_80bb_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,Dn */ +uae_u32 REGPARAM2 op_80bc_0_comp_ff(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(An) */ +uae_u32 REGPARAM2 op_8110_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_8118_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,-(An) */ +uae_u32 REGPARAM2 op_8120_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_8128_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_8130_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_8138_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_8139_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(An) */ +uae_u32 REGPARAM2 op_8150_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_8158_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,-(An) */ +uae_u32 REGPARAM2 op_8160_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_8168_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_8170_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_8178_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_8179_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + or_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(An) */ +uae_u32 REGPARAM2 op_8190_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_8198_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,-(An) */ +uae_u32 REGPARAM2 op_81a0_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_81a8_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_81b0_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_81b8_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_81b9_0_comp_ff(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + or_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,Dn */ +uae_u32 REGPARAM2 op_9000_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (An),Dn */ +uae_u32 REGPARAM2 op_9010_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (An)+,Dn */ +uae_u32 REGPARAM2 op_9018_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B -(An),Dn */ +uae_u32 REGPARAM2 op_9020_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_9028_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_9030_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_9038_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_9039_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_903a_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_903b_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,Dn */ +uae_u32 REGPARAM2 op_903c_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,Dn */ +uae_u32 REGPARAM2 op_9040_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W An,Dn */ +uae_u32 REGPARAM2 op_9048_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (An),Dn */ +uae_u32 REGPARAM2 op_9050_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (An)+,Dn */ +uae_u32 REGPARAM2 op_9058_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W -(An),Dn */ +uae_u32 REGPARAM2 op_9060_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_9068_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_9070_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_9078_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_9079_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_907a_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_907b_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,Dn */ +uae_u32 REGPARAM2 op_907c_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,Dn */ +uae_u32 REGPARAM2 op_9080_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L An,Dn */ +uae_u32 REGPARAM2 op_9088_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (An),Dn */ +uae_u32 REGPARAM2 op_9090_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (An)+,Dn */ +uae_u32 REGPARAM2 op_9098_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L -(An),Dn */ +uae_u32 REGPARAM2 op_90a0_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_90a8_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_90b0_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_90b8_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_90b9_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_90ba_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_90bb_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,Dn */ +uae_u32 REGPARAM2 op_90bc_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W Dn,An */ +uae_u32 REGPARAM2 op_90c0_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W An,An */ +uae_u32 REGPARAM2 op_90c8_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (An),An */ +uae_u32 REGPARAM2 op_90d0_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (An)+,An */ +uae_u32 REGPARAM2 op_90d8_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W -(An),An */ +uae_u32 REGPARAM2 op_90e0_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (d16,An),An */ +uae_u32 REGPARAM2 op_90e8_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_90f0_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (xxx).W,An */ +uae_u32 REGPARAM2 op_90f8_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (xxx).L,An */ +uae_u32 REGPARAM2 op_90f9_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (d16,PC),An */ +uae_u32 REGPARAM2 op_90fa_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_90fb_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W #.W,An */ +uae_u32 REGPARAM2 op_90fc_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.B Dn,Dn */ +uae_u32 REGPARAM2 op_9100_0_comp_ff(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.B -(An),-(An) */ +uae_u32 REGPARAM2 op_9108_0_comp_ff(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(An) */ +uae_u32 REGPARAM2 op_9110_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_9118_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,-(An) */ +uae_u32 REGPARAM2 op_9120_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_9128_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_9130_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_9138_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_9139_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.W Dn,Dn */ +uae_u32 REGPARAM2 op_9140_0_comp_ff(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.W -(An),-(An) */ +uae_u32 REGPARAM2 op_9148_0_comp_ff(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(An) */ +uae_u32 REGPARAM2 op_9150_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_9158_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,-(An) */ +uae_u32 REGPARAM2 op_9160_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_9168_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_9170_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_9178_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_9179_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + sub_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.L Dn,Dn */ +uae_u32 REGPARAM2 op_9180_0_comp_ff(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.L -(An),-(An) */ +uae_u32 REGPARAM2 op_9188_0_comp_ff(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + sbb_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(An) */ +uae_u32 REGPARAM2 op_9190_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_9198_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,-(An) */ +uae_u32 REGPARAM2 op_91a0_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_91a8_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_91b0_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_91b8_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_91b9_0_comp_ff(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + sub_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L Dn,An */ +uae_u32 REGPARAM2 op_91c0_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L An,An */ +uae_u32 REGPARAM2 op_91c8_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (An),An */ +uae_u32 REGPARAM2 op_91d0_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (An)+,An */ +uae_u32 REGPARAM2 op_91d8_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L -(An),An */ +uae_u32 REGPARAM2 op_91e0_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (d16,An),An */ +uae_u32 REGPARAM2 op_91e8_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_91f0_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (xxx).W,An */ +uae_u32 REGPARAM2 op_91f8_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (xxx).L,An */ +uae_u32 REGPARAM2 op_91f9_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (d16,PC),An */ +uae_u32 REGPARAM2 op_91fa_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_91fb_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L #.L,An */ +uae_u32 REGPARAM2 op_91fc_0_comp_ff(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B Dn,Dn */ +uae_u32 REGPARAM2 op_b000_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (An),Dn */ +uae_u32 REGPARAM2 op_b010_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (An)+,Dn */ +uae_u32 REGPARAM2 op_b018_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B -(An),Dn */ +uae_u32 REGPARAM2 op_b020_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_b028_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_b030_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_b038_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_b039_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_b03a_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_b03b_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,Dn */ +uae_u32 REGPARAM2 op_b03c_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W Dn,Dn */ +uae_u32 REGPARAM2 op_b040_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W An,Dn */ +uae_u32 REGPARAM2 op_b048_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (An),Dn */ +uae_u32 REGPARAM2 op_b050_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (An)+,Dn */ +uae_u32 REGPARAM2 op_b058_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W -(An),Dn */ +uae_u32 REGPARAM2 op_b060_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_b068_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_b070_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_b078_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_b079_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_b07a_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_b07b_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,Dn */ +uae_u32 REGPARAM2 op_b07c_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L Dn,Dn */ +uae_u32 REGPARAM2 op_b080_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L An,Dn */ +uae_u32 REGPARAM2 op_b088_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (An),Dn */ +uae_u32 REGPARAM2 op_b090_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (An)+,Dn */ +uae_u32 REGPARAM2 op_b098_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L -(An),Dn */ +uae_u32 REGPARAM2 op_b0a0_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_7 +/* CMP.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_b0a8_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_b0b0_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_b0b8_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_b0b9_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_b0ba_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_b0bb_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,Dn */ +uae_u32 REGPARAM2 op_b0bc_0_comp_ff(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W Dn,An */ +uae_u32 REGPARAM2 op_b0c0_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W An,An */ +uae_u32 REGPARAM2 op_b0c8_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (An),An */ +uae_u32 REGPARAM2 op_b0d0_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (An)+,An */ +uae_u32 REGPARAM2 op_b0d8_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W -(An),An */ +uae_u32 REGPARAM2 op_b0e0_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (d16,An),An */ +uae_u32 REGPARAM2 op_b0e8_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_b0f0_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (xxx).W,An */ +uae_u32 REGPARAM2 op_b0f8_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (xxx).L,An */ +uae_u32 REGPARAM2 op_b0f9_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (d16,PC),An */ +uae_u32 REGPARAM2 op_b0fa_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_b0fb_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W #.W,An */ +uae_u32 REGPARAM2 op_b0fc_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,Dn */ +uae_u32 REGPARAM2 op_b100_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPM.B (An)+,(An)+ */ +uae_u32 REGPARAM2 op_b108_0_comp_ff(uae_u32 opcode) /* CMPM */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + dont_care_flags(); + start_needflags(); + cmp_b(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(An) */ +uae_u32 REGPARAM2 op_b110_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_b118_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,-(An) */ +uae_u32 REGPARAM2 op_b120_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_b128_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_b130_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_b138_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_b139_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,Dn */ +uae_u32 REGPARAM2 op_b140_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPM.W (An)+,(An)+ */ +uae_u32 REGPARAM2 op_b148_0_comp_ff(uae_u32 opcode) /* CMPM */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + { + dont_care_flags(); + start_needflags(); + cmp_w(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(An) */ +uae_u32 REGPARAM2 op_b150_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_b158_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,-(An) */ +uae_u32 REGPARAM2 op_b160_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_b168_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_b170_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_b178_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_b179_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + xor_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,Dn */ +uae_u32 REGPARAM2 op_b180_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPM.L (An)+,(An)+ */ +uae_u32 REGPARAM2 op_b188_0_comp_ff(uae_u32 opcode) /* CMPM */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + { + dont_care_flags(); + start_needflags(); + cmp_l(dst,src); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(An) */ +uae_u32 REGPARAM2 op_b190_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_b198_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,-(An) */ +uae_u32 REGPARAM2 op_b1a0_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_b1a8_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_b1b0_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_b1b8_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_b1b9_0_comp_ff(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + xor_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L Dn,An */ +uae_u32 REGPARAM2 op_b1c0_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L An,An */ +uae_u32 REGPARAM2 op_b1c8_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (An),An */ +uae_u32 REGPARAM2 op_b1d0_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (An)+,An */ +uae_u32 REGPARAM2 op_b1d8_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L -(An),An */ +uae_u32 REGPARAM2 op_b1e0_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (d16,An),An */ +uae_u32 REGPARAM2 op_b1e8_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_b1f0_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (xxx).W,An */ +uae_u32 REGPARAM2 op_b1f8_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (xxx).L,An */ +uae_u32 REGPARAM2 op_b1f9_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (d16,PC),An */ +uae_u32 REGPARAM2 op_b1fa_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_b1fb_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L #.L,An */ +uae_u32 REGPARAM2 op_b1fc_0_comp_ff(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + start_needflags(); + cmp_l(dst,tmps); + live_flags(); + end_needflags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,Dn */ +uae_u32 REGPARAM2 op_c000_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (An),Dn */ +uae_u32 REGPARAM2 op_c010_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (An)+,Dn */ +uae_u32 REGPARAM2 op_c018_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B -(An),Dn */ +uae_u32 REGPARAM2 op_c020_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_c028_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_c030_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_c038_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_c039_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_c03a_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_c03b_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,Dn */ +uae_u32 REGPARAM2 op_c03c_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,Dn */ +uae_u32 REGPARAM2 op_c040_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (An),Dn */ +uae_u32 REGPARAM2 op_c050_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (An)+,Dn */ +uae_u32 REGPARAM2 op_c058_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W -(An),Dn */ +uae_u32 REGPARAM2 op_c060_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_c068_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_c070_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_c078_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_c079_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_c07a_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_c07b_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,Dn */ +uae_u32 REGPARAM2 op_c07c_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,Dn */ +uae_u32 REGPARAM2 op_c080_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (An),Dn */ +uae_u32 REGPARAM2 op_c090_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (An)+,Dn */ +uae_u32 REGPARAM2 op_c098_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L -(An),Dn */ +uae_u32 REGPARAM2 op_c0a0_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_c0a8_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_c0b0_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_c0b8_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_c0b9_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_c0ba_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_c0bb_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,Dn */ +uae_u32 REGPARAM2 op_c0bc_0_comp_ff(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W Dn,Dn */ +uae_u32 REGPARAM2 op_c0c0_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int src = srcreg; + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (An),Dn */ +uae_u32 REGPARAM2 op_c0d0_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (An)+,Dn */ +uae_u32 REGPARAM2 op_c0d8_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W -(An),Dn */ +uae_u32 REGPARAM2 op_c0e0_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_c0e8_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_c0f0_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_c0f8_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_c0f9_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_c0fa_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_c0fb_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W #.W,Dn */ +uae_u32 REGPARAM2 op_c0fc_0_comp_ff(uae_u32 opcode) /* MULU */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(An) */ +uae_u32 REGPARAM2 op_c110_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_c118_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,-(An) */ +uae_u32 REGPARAM2 op_c120_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_c128_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_c130_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_c138_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_c139_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_b(dst,src); + live_flags(); + end_needflags(); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXG.L Dn,Dn */ +uae_u32 REGPARAM2 op_c140_0_comp_ff(uae_u32 opcode) /* EXG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + int tmp=scratchie++; + mov_l_rr(tmp,src); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + if(dstreg != tmp) { + mov_l_rr(dstreg, tmp); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXG.L An,An */ +uae_u32 REGPARAM2 op_c148_0_comp_ff(uae_u32 opcode) /* EXG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + mov_l_rr(tmp,src); + if(srcreg + 8 != dst) { + mov_l_rr(srcreg + 8, dst); + } + if(dstreg + 8 != tmp) { + mov_l_rr(dstreg + 8, tmp); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(An) */ +uae_u32 REGPARAM2 op_c150_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_c158_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,-(An) */ +uae_u32 REGPARAM2 op_c160_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_c168_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_c170_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_c178_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_c179_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + start_needflags(); + and_w(dst,src); + live_flags(); + end_needflags(); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXG.L Dn,An */ +uae_u32 REGPARAM2 op_c188_0_comp_ff(uae_u32 opcode) /* EXG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + mov_l_rr(tmp,src); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + if(dstreg + 8 != tmp) { + mov_l_rr(dstreg + 8, tmp); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(An) */ +uae_u32 REGPARAM2 op_c190_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_c198_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,-(An) */ +uae_u32 REGPARAM2 op_c1a0_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_c1a8_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_c1b0_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_c1b8_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_c1b9_0_comp_ff(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + start_needflags(); + and_l(dst,src); + live_flags(); + end_needflags(); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W Dn,Dn */ +uae_u32 REGPARAM2 op_c1c0_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int src = srcreg; + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (An),Dn */ +uae_u32 REGPARAM2 op_c1d0_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (An)+,Dn */ +uae_u32 REGPARAM2 op_c1d8_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W -(An),Dn */ +uae_u32 REGPARAM2 op_c1e0_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_c1e8_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_c1f0_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_c1f8_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_c1f9_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_c1fa_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_c1fb_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W #.W,Dn */ +uae_u32 REGPARAM2 op_c1fc_0_comp_ff(uae_u32 opcode) /* MULS */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + dont_care_flags(); + { + start_needflags(); + test_l_rr(dst,dst); + live_flags(); + end_needflags(); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,Dn */ +uae_u32 REGPARAM2 op_d000_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (An),Dn */ +uae_u32 REGPARAM2 op_d010_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (An)+,Dn */ +uae_u32 REGPARAM2 op_d018_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B -(An),Dn */ +uae_u32 REGPARAM2 op_d020_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_d028_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_d030_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_d038_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_d039_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_d03a_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_d03b_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,Dn */ +uae_u32 REGPARAM2 op_d03c_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,Dn */ +uae_u32 REGPARAM2 op_d040_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W An,Dn */ +uae_u32 REGPARAM2 op_d048_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (An),Dn */ +uae_u32 REGPARAM2 op_d050_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (An)+,Dn */ +uae_u32 REGPARAM2 op_d058_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W -(An),Dn */ +uae_u32 REGPARAM2 op_d060_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_d068_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_d070_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_d078_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_d079_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_d07a_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_d07b_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,Dn */ +uae_u32 REGPARAM2 op_d07c_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,Dn */ +uae_u32 REGPARAM2 op_d080_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L An,Dn */ +uae_u32 REGPARAM2 op_d088_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (An),Dn */ +uae_u32 REGPARAM2 op_d090_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (An)+,Dn */ +uae_u32 REGPARAM2 op_d098_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L -(An),Dn */ +uae_u32 REGPARAM2 op_d0a0_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_d0a8_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_d0b0_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_d0b8_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_d0b9_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_d0ba_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_d0bb_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,Dn */ +uae_u32 REGPARAM2 op_d0bc_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W Dn,An */ +uae_u32 REGPARAM2 op_d0c0_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W An,An */ +uae_u32 REGPARAM2 op_d0c8_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (An),An */ +uae_u32 REGPARAM2 op_d0d0_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (An)+,An */ +uae_u32 REGPARAM2 op_d0d8_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W -(An),An */ +uae_u32 REGPARAM2 op_d0e0_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (d16,An),An */ +uae_u32 REGPARAM2 op_d0e8_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_d0f0_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (xxx).W,An */ +uae_u32 REGPARAM2 op_d0f8_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (xxx).L,An */ +uae_u32 REGPARAM2 op_d0f9_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (d16,PC),An */ +uae_u32 REGPARAM2 op_d0fa_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_d0fb_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W #.W,An */ +uae_u32 REGPARAM2 op_d0fc_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.B Dn,Dn */ +uae_u32 REGPARAM2 op_d100_0_comp_ff(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + adc_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.B -(An),-(An) */ +uae_u32 REGPARAM2 op_d108_0_comp_ff(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + adc_b(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(An) */ +uae_u32 REGPARAM2 op_d110_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_d118_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,-(An) */ +uae_u32 REGPARAM2 op_d120_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_d128_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_d130_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_d138_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_d139_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_b(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.W Dn,Dn */ +uae_u32 REGPARAM2 op_d140_0_comp_ff(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + adc_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.W -(An),-(An) */ +uae_u32 REGPARAM2 op_d148_0_comp_ff(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + adc_w(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(An) */ +uae_u32 REGPARAM2 op_d150_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_d158_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,-(An) */ +uae_u32 REGPARAM2 op_d160_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_d168_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_d170_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_d178_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_d179_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + start_needflags(); + add_w(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.L Dn,Dn */ +uae_u32 REGPARAM2 op_d180_0_comp_ff(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + adc_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.L -(An),-(An) */ +uae_u32 REGPARAM2 op_d188_0_comp_ff(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + { + int zero=scratchie++; + int one=scratchie++; + if (needed_flags&FLAG_Z) { + mov_l_ri(zero,0); + mov_l_ri(one,-1); + make_flags_live(); + cmov_l_rr(zero,one,5); + } + restore_carry(); + start_needflags(); + adc_l(dst,src); + live_flags(); + if (needed_flags&FLAG_Z) { + cmov_l_rr(zero,one,5); + set_zero(zero, one); + live_flags(); + } + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(An) */ +uae_u32 REGPARAM2 op_d190_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_d198_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,-(An) */ +uae_u32 REGPARAM2 op_d1a0_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_d1a8_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_d1b0_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_d1b8_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_d1b9_0_comp_ff(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + start_needflags(); + add_l(dst,src); + live_flags(); + end_needflags(); + if (needed_flags&FLAG_X) { + duplicate_carry(); + } + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L Dn,An */ +uae_u32 REGPARAM2 op_d1c0_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L An,An */ +uae_u32 REGPARAM2 op_d1c8_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (An),An */ +uae_u32 REGPARAM2 op_d1d0_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (An)+,An */ +uae_u32 REGPARAM2 op_d1d8_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L -(An),An */ +uae_u32 REGPARAM2 op_d1e0_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (d16,An),An */ +uae_u32 REGPARAM2 op_d1e8_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_d1f0_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (xxx).W,An */ +uae_u32 REGPARAM2 op_d1f8_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (xxx).L,An */ +uae_u32 REGPARAM2 op_d1f9_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (d16,PC),An */ +uae_u32 REGPARAM2 op_d1fa_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_d1fb_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L #.L,An */ +uae_u32 REGPARAM2 op_d1fc_0_comp_ff(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ASRQ.B #,Dn */ +uae_u32 REGPARAM2 op_e000_0_comp_ff(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shra_b_ri(data,srcreg); + live_flags(); + end_needflags(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSRQ.B #,Dn */ +uae_u32 REGPARAM2 op_e008_0_comp_ff(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shrl_b_ri(data,srcreg); + live_flags(); + end_needflags(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* RORQ.B #,Dn */ +uae_u32 REGPARAM2 op_e018_0_comp_ff(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + ror_b_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_b_rr(data,data); + } + bt_l_ri(cdata,0x07); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASR.B Dn,Dn */ +uae_u32 REGPARAM2 op_e020_0_comp_ff(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int setval = scratchie++; + int odata = scratchie++; + mov_l_ri(cdata, 0); + mov_l_ri(setval, 0xffffffff); + test_l_ri(data, 0x00000080); + cmov_l_rr(setval, cdata, NATIVE_CC_EQ); + mov_l_rr(cdata, setval); + mov_l_rr(odata, setval); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, tmpcnt, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x08); + cmov_l_rr(cdata, setval, NATIVE_CC_HI); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shra_b_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 0, 0, 0); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_b_rr(data, cdata); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSR.B Dn,Dn */ +uae_u32 REGPARAM2 op_e028_0_comp_ff(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int odata = scratchie++; + mov_l_rr(odata, data); + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, cdata, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x08); + cmov_l_rr(odata, cdata, NATIVE_CC_HI); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shrl_b_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 7, 0, 1); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_b_rr(data, cdata); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROR.B Dn,Dn */ +uae_u32 REGPARAM2 op_e038_0_comp_ff(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + ror_b_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_b_rr(data,data); + } + bt_l_ri(cdata,0x07); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASRQ.W #,Dn */ +uae_u32 REGPARAM2 op_e040_0_comp_ff(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shra_w_ri(data,srcreg); + live_flags(); + end_needflags(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +#endif + +#ifdef PART_8 +/* LSRQ.W #,Dn */ +uae_u32 REGPARAM2 op_e048_0_comp_ff(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shrl_w_ri(data,srcreg); + live_flags(); + end_needflags(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* RORQ.W #,Dn */ +uae_u32 REGPARAM2 op_e058_0_comp_ff(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + ror_w_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_w_rr(data,data); + } + bt_l_ri(cdata,0x0f); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASR.W Dn,Dn */ +uae_u32 REGPARAM2 op_e060_0_comp_ff(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int setval = scratchie++; + int odata = scratchie++; + mov_l_ri(cdata, 0); + mov_l_ri(setval, 0xffffffff); + test_l_ri(data, 0x00008000); + cmov_l_rr(setval, cdata, NATIVE_CC_EQ); + mov_l_rr(cdata, setval); + mov_l_rr(odata, setval); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, tmpcnt, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x10); + cmov_l_rr(cdata, setval, NATIVE_CC_HI); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shra_w_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 0, 1, 0); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_w_rr(data, cdata); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSR.W Dn,Dn */ +uae_u32 REGPARAM2 op_e068_0_comp_ff(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int odata = scratchie++; + mov_l_rr(odata, data); + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, cdata, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x10); + cmov_l_rr(odata, cdata, NATIVE_CC_HI); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shrl_w_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 15, 1, 1); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_w_rr(data, cdata); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROR.W Dn,Dn */ +uae_u32 REGPARAM2 op_e078_0_comp_ff(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + ror_w_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_w_rr(data,data); + } + bt_l_ri(cdata,0x0f); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASRQ.L #,Dn */ +uae_u32 REGPARAM2 op_e080_0_comp_ff(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shra_l_ri(data,srcreg); + live_flags(); + end_needflags(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSRQ.L #,Dn */ +uae_u32 REGPARAM2 op_e088_0_comp_ff(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shrl_l_ri(data,srcreg); + live_flags(); + end_needflags(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* RORQ.L #,Dn */ +uae_u32 REGPARAM2 op_e098_0_comp_ff(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + ror_l_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_l_rr(data,data); + } + bt_l_ri(cdata,0x1f); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASR.L Dn,Dn */ +uae_u32 REGPARAM2 op_e0a0_0_comp_ff(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int setval = scratchie++; + int odata = scratchie++; + mov_l_ri(cdata, 0); + mov_l_ri(setval, 0xffffffff); + test_l_ri(data, 0x80000000); + cmov_l_rr(setval, cdata, NATIVE_CC_EQ); + mov_l_rr(cdata, setval); + mov_l_rr(odata, setval); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, tmpcnt, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x20); + cmov_l_rr(cdata, setval, NATIVE_CC_HI); + cmov_l_rr(data, setval, NATIVE_CC_EQ); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shra_l_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 0, 2, 0); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_l_rr(data, cdata); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSR.L Dn,Dn */ +uae_u32 REGPARAM2 op_e0a8_0_comp_ff(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int odata = scratchie++; + mov_l_rr(odata, data); + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, cdata, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x20); + cmov_l_rr(odata, cdata, NATIVE_CC_HI); + cmov_l_rr(data, cdata, NATIVE_CC_EQ); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shrl_l_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 31, 2, 1); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_l_rr(data, cdata); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROR.L Dn,Dn */ +uae_u32 REGPARAM2 op_e0b8_0_comp_ff(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + ror_l_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_l_rr(data,data); + } + bt_l_ri(cdata,0x1f); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASLQ.B #,Dn */ +uae_u32 REGPARAM2 op_e100_0_comp_ff(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shll_b_ri(data,srcreg); + live_flags(); + end_needflags(); + clear_overflow(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSLQ.B #,Dn */ +uae_u32 REGPARAM2 op_e108_0_comp_ff(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shll_b_ri(data,srcreg); + live_flags(); + end_needflags(); + clear_overflow(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROLQ.B #,Dn */ +uae_u32 REGPARAM2 op_e118_0_comp_ff(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + rol_b_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_b_rr(data,data); + } + bt_l_ri(cdata,0x00); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASL.B Dn,Dn */ +uae_u32 REGPARAM2 op_e120_0_comp_ff(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int odata = scratchie++; + mov_l_rr(odata, data); + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, cdata, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x08); + cmov_l_rr(odata, cdata, NATIVE_CC_HI); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_b_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 0, 0, 1); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_b_rr(data, cdata); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSL.B Dn,Dn */ +uae_u32 REGPARAM2 op_e128_0_comp_ff(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int odata = scratchie++; + mov_l_rr(odata, data); + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, cdata, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x08); + cmov_l_rr(odata, cdata, NATIVE_CC_HI); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_b_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 0, 0, 1); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_b_rr(data, cdata); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROL.B Dn,Dn */ +uae_u32 REGPARAM2 op_e138_0_comp_ff(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + rol_b_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_b_rr(data,data); + } + bt_l_ri(cdata,0x00); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASLQ.W #,Dn */ +uae_u32 REGPARAM2 op_e140_0_comp_ff(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shll_w_ri(data,srcreg); + live_flags(); + end_needflags(); + clear_overflow(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSLQ.W #,Dn */ +uae_u32 REGPARAM2 op_e148_0_comp_ff(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shll_w_ri(data,srcreg); + live_flags(); + end_needflags(); + clear_overflow(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROLQ.W #,Dn */ +uae_u32 REGPARAM2 op_e158_0_comp_ff(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + rol_w_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_w_rr(data,data); + } + bt_l_ri(cdata,0x00); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASL.W Dn,Dn */ +uae_u32 REGPARAM2 op_e160_0_comp_ff(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int odata = scratchie++; + mov_l_rr(odata, data); + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, cdata, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x10); + cmov_l_rr(odata, cdata, NATIVE_CC_HI); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_w_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 0, 1, 1); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_w_rr(data, cdata); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSL.W Dn,Dn */ +uae_u32 REGPARAM2 op_e168_0_comp_ff(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int odata = scratchie++; + mov_l_rr(odata, data); + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, cdata, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x10); + cmov_l_rr(odata, cdata, NATIVE_CC_HI); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_w_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 0, 1, 1); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_w_rr(data, cdata); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROL.W Dn,Dn */ +uae_u32 REGPARAM2 op_e178_0_comp_ff(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + rol_w_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_w_rr(data,data); + } + bt_l_ri(cdata,0x00); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASLQ.L #,Dn */ +uae_u32 REGPARAM2 op_e180_0_comp_ff(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shll_l_ri(data,srcreg); + live_flags(); + end_needflags(); + clear_overflow(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSLQ.L #,Dn */ +uae_u32 REGPARAM2 op_e188_0_comp_ff(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + start_needflags(); + shll_l_ri(data,srcreg); + live_flags(); + end_needflags(); + clear_overflow(); + duplicate_carry(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROLQ.L #,Dn */ +uae_u32 REGPARAM2 op_e198_0_comp_ff(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + rol_l_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_l_rr(data,data); + } + bt_l_ri(cdata,0x00); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASL.L Dn,Dn */ +uae_u32 REGPARAM2 op_e1a0_0_comp_ff(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int odata = scratchie++; + mov_l_rr(odata, data); + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, cdata, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x20); + cmov_l_rr(odata, cdata, NATIVE_CC_HI); + cmov_l_rr(data, cdata, NATIVE_CC_EQ); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_l_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 0, 2, 1); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_l_rr(data, cdata); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSL.L Dn,Dn */ +uae_u32 REGPARAM2 op_e1a8_0_comp_ff(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + start_needflags(); + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int odata = scratchie++; + mov_l_rr(odata, data); + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmov_l_rr(odata, cdata, NATIVE_CC_EQ); + cmp_b_ri(tmpcnt, 0x20); + cmov_l_rr(odata, cdata, NATIVE_CC_HI); + cmov_l_rr(data, cdata, NATIVE_CC_EQ); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_l_rr(cdata, tmpcnt); + live_flags(); + end_needflags(); + setcc_for_cntzero(tmpcnt, cdata, odata, 0, 2, 1); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + mov_l_rr(data, cdata); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROL.L Dn,Dn */ +uae_u32 REGPARAM2 op_e1b8_0_comp_ff(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + rol_l_rr(data,cnt); + start_needflags(); + int cdata = scratchie++; + int zero = scratchie++; + int tmpcnt = scratchie++; + mov_l_rr(cdata,data); + mov_l_rr(tmpcnt,cnt); + mov_l_ri(zero,0); + and_l_ri(tmpcnt,63); + cmov_l_rr(cdata,zero,NATIVE_CC_EQ); + if (needed_flags & FLAG_ZNV) { + test_l_rr(data,data); + } + bt_l_ri(cdata,0x00); + live_flags(); + end_needflags(); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,Dn */ +uae_u32 REGPARAM2 op_f200_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,An */ +uae_u32 REGPARAM2 op_f208_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(An) */ +uae_u32 REGPARAM2 op_f210_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(An)+ */ +uae_u32 REGPARAM2 op_f218_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,-(An) */ +uae_u32 REGPARAM2 op_f220_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(d16,An) */ +uae_u32 REGPARAM2 op_f228_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_f230_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(xxx).W */ +uae_u32 REGPARAM2 op_f238_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(xxx).L */ +uae_u32 REGPARAM2 op_f239_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_f23a_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_f23b_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,#.L */ +uae_u32 REGPARAM2 op_f23c_0_comp_ff(uae_u32 opcode) /* FPP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,Dn */ +uae_u32 REGPARAM2 op_f240_0_comp_ff(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(An) */ +uae_u32 REGPARAM2 op_f250_0_comp_ff(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(An)+ */ +uae_u32 REGPARAM2 op_f258_0_comp_ff(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,-(An) */ +uae_u32 REGPARAM2 op_f260_0_comp_ff(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(d16,An) */ +uae_u32 REGPARAM2 op_f268_0_comp_ff(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_f270_0_comp_ff(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(xxx).W */ +uae_u32 REGPARAM2 op_f278_0_comp_ff(uae_u32 opcode) /* FScc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(xxx).L */ +uae_u32 REGPARAM2 op_f279_0_comp_ff(uae_u32 opcode) /* FScc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FBccQ.L #,#.W */ +uae_u32 REGPARAM2 op_f280_0_comp_ff(uae_u32 opcode) /* FBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 63); + #else + uae_s32 srcreg = (opcode & 63); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + comp_fbcc_opp(opcode); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FBccQ.L #,#.L */ +uae_u32 REGPARAM2 op_f2c0_0_comp_ff(uae_u32 opcode) /* FBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 63); + #else + uae_s32 srcreg = (opcode & 63); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + comp_fbcc_opp(opcode); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* MOVE16.L (An)+,(xxx).L */ +uae_u32 REGPARAM2 op_f600_0_comp_ff(uae_u32 opcode) /* MOVE16 */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int src=scratchie++; + int dst=scratchie++; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + mov_l_rr(src,srca); + mov_l_rr(dst,dsta); + and_l_ri(src,~15); + and_l_ri(dst,~15); + add_l_ri(srcreg+8,16); + if (special_mem || jit_n_addr_unsafe) { + int tmp=scratchie; + scratchie+=4; + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + } else + { + int tmp=scratchie; + scratchie+=4; + get_n_addr(src,src,scratchie); + get_n_addr(dst,dst,scratchie); + mov_l_rR(tmp+0,src,0); + mov_l_rR(tmp+1,src,4); + mov_l_rR(tmp+2,src,8); + mov_l_rR(tmp+3,src,12); + mov_l_Rr(dst,tmp+0,0); + forget_about(tmp+0); + mov_l_Rr(dst,tmp+1,4); + forget_about(tmp+1); + mov_l_Rr(dst,tmp+2,8); + forget_about(tmp+2); + mov_l_Rr(dst,tmp+3,12); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE16.L (xxx).L,(An)+ */ +uae_u32 REGPARAM2 op_f608_0_comp_ff(uae_u32 opcode) /* MOVE16 */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int src=scratchie++; + int dst=scratchie++; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + mov_l_rr(src,srca); + mov_l_rr(dst,dsta); + and_l_ri(src,~15); + and_l_ri(dst,~15); + add_l_ri(dstreg+8,16); + if (special_mem || jit_n_addr_unsafe) { + int tmp=scratchie; + scratchie+=4; + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + } else + { + int tmp=scratchie; + scratchie+=4; + get_n_addr(src,src,scratchie); + get_n_addr(dst,dst,scratchie); + mov_l_rR(tmp+0,src,0); + mov_l_rR(tmp+1,src,4); + mov_l_rR(tmp+2,src,8); + mov_l_rR(tmp+3,src,12); + mov_l_Rr(dst,tmp+0,0); + forget_about(tmp+0); + mov_l_Rr(dst,tmp+1,4); + forget_about(tmp+1); + mov_l_Rr(dst,tmp+2,8); + forget_about(tmp+2); + mov_l_Rr(dst,tmp+3,12); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE16.L (An),(xxx).L */ +uae_u32 REGPARAM2 op_f610_0_comp_ff(uae_u32 opcode) /* MOVE16 */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int src=scratchie++; + int dst=scratchie++; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + mov_l_rr(src,srca); + mov_l_rr(dst,dsta); + and_l_ri(src,~15); + and_l_ri(dst,~15); + if (special_mem || jit_n_addr_unsafe) { + int tmp=scratchie; + scratchie+=4; + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + } else + { + int tmp=scratchie; + scratchie+=4; + get_n_addr(src,src,scratchie); + get_n_addr(dst,dst,scratchie); + mov_l_rR(tmp+0,src,0); + mov_l_rR(tmp+1,src,4); + mov_l_rR(tmp+2,src,8); + mov_l_rR(tmp+3,src,12); + mov_l_Rr(dst,tmp+0,0); + forget_about(tmp+0); + mov_l_Rr(dst,tmp+1,4); + forget_about(tmp+1); + mov_l_Rr(dst,tmp+2,8); + forget_about(tmp+2); + mov_l_Rr(dst,tmp+3,12); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE16.L (xxx).L,(An) */ +uae_u32 REGPARAM2 op_f618_0_comp_ff(uae_u32 opcode) /* MOVE16 */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int src=scratchie++; + int dst=scratchie++; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + mov_l_rr(src,srca); + mov_l_rr(dst,dsta); + and_l_ri(src,~15); + and_l_ri(dst,~15); + if (special_mem || jit_n_addr_unsafe) { + int tmp=scratchie; + scratchie+=4; + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + } else + { + int tmp=scratchie; + scratchie+=4; + get_n_addr(src,src,scratchie); + get_n_addr(dst,dst,scratchie); + mov_l_rR(tmp+0,src,0); + mov_l_rR(tmp+1,src,4); + mov_l_rR(tmp+2,src,8); + mov_l_rR(tmp+3,src,12); + mov_l_Rr(dst,tmp+0,0); + forget_about(tmp+0); + mov_l_Rr(dst,tmp+1,4); + forget_about(tmp+1); + mov_l_Rr(dst,tmp+2,8); + forget_about(tmp+2); + mov_l_Rr(dst,tmp+3,12); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE16.L (An)+,(An)+ */ +uae_u32 REGPARAM2 op_f620_0_comp_ff(uae_u32 opcode) /* MOVE16 */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_s32 dstreg = 0; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int src=scratchie++; + int dst=scratchie++; + uae_u16 dstreg=((comp_get_iword((m68k_pc_offset+=2)-2))>>12)&0x07; + mov_l_rr(src,8+srcreg); + mov_l_rr(dst,8+dstreg); + and_l_ri(src,~15); + and_l_ri(dst,~15); + if (srcreg != dstreg) { + add_l_ri(srcreg+8,16); + } + add_l_ri(dstreg+8,16); + if (special_mem || jit_n_addr_unsafe) { + int tmp=scratchie; + scratchie+=4; + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + } else + { + int tmp=scratchie; + scratchie+=4; + get_n_addr(src,src,scratchie); + get_n_addr(dst,dst,scratchie); + mov_l_rR(tmp+0,src,0); + mov_l_rR(tmp+1,src,4); + mov_l_rR(tmp+2,src,8); + mov_l_rR(tmp+3,src,12); + mov_l_Rr(dst,tmp+0,0); + forget_about(tmp+0); + mov_l_Rr(dst,tmp+1,4); + forget_about(tmp+1); + mov_l_Rr(dst,tmp+2,8); + forget_about(tmp+2); + mov_l_Rr(dst,tmp+3,12); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + + +#if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) +#define PART_1 1 +#define PART_2 1 +#define PART_3 1 +#define PART_4 1 +#define PART_5 1 +#define PART_6 1 +#define PART_7 1 +#define PART_8 1 +#endif + +#ifdef USE_JIT_FPU +extern void comp_fpp_opp(); +extern void comp_fscc_opp(); +extern void comp_fbcc_opp(); +#endif + +#ifdef PART_1 +/* OR.B #.B,Dn */ +uae_u32 REGPARAM2 op_0_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(An) */ +uae_u32 REGPARAM2 op_10_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_18_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,-(An) */ +uae_u32 REGPARAM2 op_20_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_28_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_30_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_38_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_39_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,Dn */ +uae_u32 REGPARAM2 op_40_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(An) */ +uae_u32 REGPARAM2 op_50_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_58_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,-(An) */ +uae_u32 REGPARAM2 op_60_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_68_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_70_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_78_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_79_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,Dn */ +uae_u32 REGPARAM2 op_80_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(An) */ +uae_u32 REGPARAM2 op_90_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_98_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,-(An) */ +uae_u32 REGPARAM2 op_a0_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_a8_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_b0_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_b8_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_b9_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.L Dn,Dn */ +uae_u32 REGPARAM2 op_100_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(An) */ +uae_u32 REGPARAM2 op_110_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_118_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,-(An) */ +uae_u32 REGPARAM2 op_120_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_128_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_130_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_138_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_139_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(d16,PC) */ +uae_u32 REGPARAM2 op_13a_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_13b_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B Dn,#.B */ +uae_u32 REGPARAM2 op_13c_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = scratchie++; + mov_l_ri(dst, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.L Dn,Dn */ +uae_u32 REGPARAM2 op_140_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(An) */ +uae_u32 REGPARAM2 op_150_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_158_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,-(An) */ +uae_u32 REGPARAM2 op_160_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_168_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_170_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_178_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_179_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.L Dn,Dn */ +uae_u32 REGPARAM2 op_180_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(An) */ +uae_u32 REGPARAM2 op_190_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_198_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,-(An) */ +uae_u32 REGPARAM2 op_1a0_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_1a8_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_1b0_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_1b8_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_1b9_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.L Dn,Dn */ +uae_u32 REGPARAM2 op_1c0_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(An) */ +uae_u32 REGPARAM2 op_1d0_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_1d8_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,-(An) */ +uae_u32 REGPARAM2 op_1e0_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_1e8_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_1f0_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_1f8_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_1f9_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,Dn */ +uae_u32 REGPARAM2 op_200_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(An) */ +uae_u32 REGPARAM2 op_210_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_218_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,-(An) */ +uae_u32 REGPARAM2 op_220_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_228_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_230_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_238_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_239_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,Dn */ +uae_u32 REGPARAM2 op_240_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(An) */ +uae_u32 REGPARAM2 op_250_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_258_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,-(An) */ +uae_u32 REGPARAM2 op_260_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_268_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_270_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_278_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_279_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,Dn */ +uae_u32 REGPARAM2 op_280_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(An) */ +uae_u32 REGPARAM2 op_290_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_298_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,-(An) */ +uae_u32 REGPARAM2 op_2a0_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_2a8_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_2b0_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_2b8_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_2b9_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,Dn */ +uae_u32 REGPARAM2 op_400_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(An) */ +uae_u32 REGPARAM2 op_410_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_418_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,-(An) */ +uae_u32 REGPARAM2 op_420_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_428_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_430_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_438_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_439_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,Dn */ +uae_u32 REGPARAM2 op_440_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(An) */ +uae_u32 REGPARAM2 op_450_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_458_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,-(An) */ +uae_u32 REGPARAM2 op_460_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_468_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_470_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_478_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_479_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,Dn */ +uae_u32 REGPARAM2 op_480_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(An) */ +uae_u32 REGPARAM2 op_490_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_498_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,-(An) */ +uae_u32 REGPARAM2 op_4a0_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_4a8_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_4b0_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_4b8_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_4b9_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,Dn */ +uae_u32 REGPARAM2 op_600_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(An) */ +uae_u32 REGPARAM2 op_610_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_618_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,-(An) */ +uae_u32 REGPARAM2 op_620_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_628_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_630_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_638_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_639_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,Dn */ +uae_u32 REGPARAM2 op_640_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(An) */ +uae_u32 REGPARAM2 op_650_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_658_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,-(An) */ +uae_u32 REGPARAM2 op_660_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_668_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_670_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_678_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_679_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,Dn */ +uae_u32 REGPARAM2 op_680_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(An) */ +uae_u32 REGPARAM2 op_690_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_698_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,-(An) */ +uae_u32 REGPARAM2 op_6a0_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_6a8_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_6b0_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_6b8_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_6b9_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.L #.W,Dn */ +uae_u32 REGPARAM2 op_800_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(An) */ +uae_u32 REGPARAM2 op_810_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(An)+ */ +uae_u32 REGPARAM2 op_818_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,-(An) */ +uae_u32 REGPARAM2 op_820_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(d16,An) */ +uae_u32 REGPARAM2 op_828_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_830_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(xxx).W */ +uae_u32 REGPARAM2 op_838_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(xxx).L */ +uae_u32 REGPARAM2 op_839_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_83a_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BTST.B #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_83b_0_comp_nf(uae_u32 opcode) /* BTST */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bt_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.L #.W,Dn */ +uae_u32 REGPARAM2 op_840_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(An) */ +uae_u32 REGPARAM2 op_850_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(An)+ */ +uae_u32 REGPARAM2 op_858_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,-(An) */ +uae_u32 REGPARAM2 op_860_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(d16,An) */ +uae_u32 REGPARAM2 op_868_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_870_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(xxx).W */ +uae_u32 REGPARAM2 op_878_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCHG.B #.W,(xxx).L */ +uae_u32 REGPARAM2 op_879_0_comp_nf(uae_u32 opcode) /* BCHG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btc_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.L #.W,Dn */ +uae_u32 REGPARAM2 op_880_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(An) */ +uae_u32 REGPARAM2 op_890_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(An)+ */ +uae_u32 REGPARAM2 op_898_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,-(An) */ +uae_u32 REGPARAM2 op_8a0_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(d16,An) */ +uae_u32 REGPARAM2 op_8a8_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_8b0_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(xxx).W */ +uae_u32 REGPARAM2 op_8b8_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BCLR.B #.W,(xxx).L */ +uae_u32 REGPARAM2 op_8b9_0_comp_nf(uae_u32 opcode) /* BCLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + btr_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.L #.W,Dn */ +uae_u32 REGPARAM2 op_8c0_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,31); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(An) */ +uae_u32 REGPARAM2 op_8d0_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(An)+ */ +uae_u32 REGPARAM2 op_8d8_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,-(An) */ +uae_u32 REGPARAM2 op_8e0_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(d16,An) */ +uae_u32 REGPARAM2 op_8e8_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_8f0_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(xxx).W */ +uae_u32 REGPARAM2 op_8f8_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSET.B #.W,(xxx).L */ +uae_u32 REGPARAM2 op_8f9_0_comp_nf(uae_u32 opcode) /* BSET */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + int s=scratchie++; + int tmp=scratchie++; + mov_l_rr(s,src); + and_l_ri(s,7); + bts_l_rr(dst,s); + sbb_l(s,s); + make_flags_live(); + dont_care_flags(); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,Dn */ +uae_u32 REGPARAM2 op_a00_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(An) */ +uae_u32 REGPARAM2 op_a10_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_a18_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,-(An) */ +uae_u32 REGPARAM2 op_a20_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_a28_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_a30_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_a38_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_a39_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,Dn */ +uae_u32 REGPARAM2 op_a40_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(An) */ +uae_u32 REGPARAM2 op_a50_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_a58_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,-(An) */ +uae_u32 REGPARAM2 op_a60_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_a68_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_a70_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_a78_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_a79_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,Dn */ +uae_u32 REGPARAM2 op_a80_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + { + xor_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(An) */ +uae_u32 REGPARAM2 op_a90_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_a98_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,-(An) */ +uae_u32 REGPARAM2 op_aa0_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_aa8_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_ab0_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_ab8_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_ab9_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_2 +/* CMP.B #.B,Dn */ +uae_u32 REGPARAM2 op_c00_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(An) */ +uae_u32 REGPARAM2 op_c10_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_c18_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,-(An) */ +uae_u32 REGPARAM2 op_c20_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_c28_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_c30_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_c38_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_c39_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(d16,PC) */ +uae_u32 REGPARAM2 op_c3a_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_c3b_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,Dn */ +uae_u32 REGPARAM2 op_c40_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(An) */ +uae_u32 REGPARAM2 op_c50_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_c58_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,-(An) */ +uae_u32 REGPARAM2 op_c60_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_c68_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_c70_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_c78_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_c79_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_c7a_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_c7b_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,Dn */ +uae_u32 REGPARAM2 op_c80_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(An) */ +uae_u32 REGPARAM2 op_c90_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_c98_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,-(An) */ +uae_u32 REGPARAM2 op_ca0_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_ca8_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_cb0_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_cb8_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_cb9_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(d16,PC) */ +uae_u32 REGPARAM2 op_cba_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_cbb_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,Dn */ +uae_u32 REGPARAM2 op_1000_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),Dn */ +uae_u32 REGPARAM2 op_1010_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,Dn */ +uae_u32 REGPARAM2 op_1018_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),Dn */ +uae_u32 REGPARAM2 op_1020_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_1028_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_1030_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_1038_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_1039_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_103a_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_103b_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,Dn */ +uae_u32 REGPARAM2 op_103c_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + and_l_ri(dst,0xffffff00); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_b_rr(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(An) */ +uae_u32 REGPARAM2 op_1080_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(An) */ +uae_u32 REGPARAM2 op_1090_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(An) */ +uae_u32 REGPARAM2 op_1098_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(An) */ +uae_u32 REGPARAM2 op_10a0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(An) */ +uae_u32 REGPARAM2 op_10a8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(An) */ +uae_u32 REGPARAM2 op_10b0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(An) */ +uae_u32 REGPARAM2 op_10b8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(An) */ +uae_u32 REGPARAM2 op_10b9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(An) */ +uae_u32 REGPARAM2 op_10ba_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(An) */ +uae_u32 REGPARAM2 op_10bb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(An) */ +uae_u32 REGPARAM2 op_10bc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_10c0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(An)+ */ +uae_u32 REGPARAM2 op_10d0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(An)+ */ +uae_u32 REGPARAM2 op_10d8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(An)+ */ +uae_u32 REGPARAM2 op_10e0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(An)+ */ +uae_u32 REGPARAM2 op_10e8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(An)+ */ +uae_u32 REGPARAM2 op_10f0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(An)+ */ +uae_u32 REGPARAM2 op_10f8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(An)+ */ +uae_u32 REGPARAM2 op_10f9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(An)+ */ +uae_u32 REGPARAM2 op_10fa_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(An)+ */ +uae_u32 REGPARAM2 op_10fb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(An)+ */ +uae_u32 REGPARAM2 op_10fc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,-(An) */ +uae_u32 REGPARAM2 op_1100_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),-(An) */ +uae_u32 REGPARAM2 op_1110_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,-(An) */ +uae_u32 REGPARAM2 op_1118_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),-(An) */ +uae_u32 REGPARAM2 op_1120_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),-(An) */ +uae_u32 REGPARAM2 op_1128_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),-(An) */ +uae_u32 REGPARAM2 op_1130_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,-(An) */ +uae_u32 REGPARAM2 op_1138_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,-(An) */ +uae_u32 REGPARAM2 op_1139_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),-(An) */ +uae_u32 REGPARAM2 op_113a_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),-(An) */ +uae_u32 REGPARAM2 op_113b_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,-(An) */ +uae_u32 REGPARAM2 op_113c_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_1140_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(d16,An) */ +uae_u32 REGPARAM2 op_1150_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(d16,An) */ +uae_u32 REGPARAM2 op_1158_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(d16,An) */ +uae_u32 REGPARAM2 op_1160_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(d16,An) */ +uae_u32 REGPARAM2 op_1168_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_1170_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(d16,An) */ +uae_u32 REGPARAM2 op_1178_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(d16,An) */ +uae_u32 REGPARAM2 op_1179_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(d16,An) */ +uae_u32 REGPARAM2 op_117a_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_117b_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(d16,An) */ +uae_u32 REGPARAM2 op_117c_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_1180_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_1190_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_1198_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11a0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11a8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11b0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11b8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11b9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11ba_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11bb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_11bc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_11c0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(xxx).W */ +uae_u32 REGPARAM2 op_11d0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(xxx).W */ +uae_u32 REGPARAM2 op_11d8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(xxx).W */ +uae_u32 REGPARAM2 op_11e0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(xxx).W */ +uae_u32 REGPARAM2 op_11e8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_11f0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(xxx).W */ +uae_u32 REGPARAM2 op_11f8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(xxx).W */ +uae_u32 REGPARAM2 op_11f9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(xxx).W */ +uae_u32 REGPARAM2 op_11fa_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_11fb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(xxx).W */ +uae_u32 REGPARAM2 op_11fc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_13c0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An),(xxx).L */ +uae_u32 REGPARAM2 op_13d0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (An)+,(xxx).L */ +uae_u32 REGPARAM2 op_13d8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B -(An),(xxx).L */ +uae_u32 REGPARAM2 op_13e0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,An),(xxx).L */ +uae_u32 REGPARAM2 op_13e8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,An,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_13f0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).W,(xxx).L */ +uae_u32 REGPARAM2 op_13f8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (xxx).L,(xxx).L */ +uae_u32 REGPARAM2 op_13f9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d16,PC),(xxx).L */ +uae_u32 REGPARAM2 op_13fa_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B (d8,PC,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_13fb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.B #.B,(xxx).L */ +uae_u32 REGPARAM2 op_13fc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writebyte(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,Dn */ +uae_u32 REGPARAM2 op_2000_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,Dn */ +uae_u32 REGPARAM2 op_2008_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),Dn */ +uae_u32 REGPARAM2 op_2010_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,Dn */ +uae_u32 REGPARAM2 op_2018_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),Dn */ +uae_u32 REGPARAM2 op_2020_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_2028_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_2030_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_2038_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_2039_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_203a_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_203b_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,Dn */ +uae_u32 REGPARAM2 op_203c_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L Dn,An */ +uae_u32 REGPARAM2 op_2040_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L An,An */ +uae_u32 REGPARAM2 op_2048_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (An),An */ +uae_u32 REGPARAM2 op_2050_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (An)+,An */ +uae_u32 REGPARAM2 op_2058_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L -(An),An */ +uae_u32 REGPARAM2 op_2060_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (d16,An),An */ +uae_u32 REGPARAM2 op_2068_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_2070_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (xxx).W,An */ +uae_u32 REGPARAM2 op_2078_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (xxx).L,An */ +uae_u32 REGPARAM2 op_2079_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (d16,PC),An */ +uae_u32 REGPARAM2 op_207a_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_207b_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.L #.L,An */ +uae_u32 REGPARAM2 op_207c_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + mov_l_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(An) */ +uae_u32 REGPARAM2 op_2080_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(An) */ +uae_u32 REGPARAM2 op_2088_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(An) */ +uae_u32 REGPARAM2 op_2090_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(An) */ +uae_u32 REGPARAM2 op_2098_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(An) */ +uae_u32 REGPARAM2 op_20a0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),(An) */ +uae_u32 REGPARAM2 op_20a8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(An) */ +uae_u32 REGPARAM2 op_20b0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(An) */ +uae_u32 REGPARAM2 op_20b8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(An) */ +uae_u32 REGPARAM2 op_20b9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(An) */ +uae_u32 REGPARAM2 op_20ba_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(An) */ +uae_u32 REGPARAM2 op_20bb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(An) */ +uae_u32 REGPARAM2 op_20bc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_20c0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(An)+ */ +uae_u32 REGPARAM2 op_20c8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(An)+ */ +uae_u32 REGPARAM2 op_20d0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(An)+ */ +uae_u32 REGPARAM2 op_20d8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(An)+ */ +uae_u32 REGPARAM2 op_20e0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),(An)+ */ +uae_u32 REGPARAM2 op_20e8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(An)+ */ +uae_u32 REGPARAM2 op_20f0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(An)+ */ +uae_u32 REGPARAM2 op_20f8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(An)+ */ +uae_u32 REGPARAM2 op_20f9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(An)+ */ +uae_u32 REGPARAM2 op_20fa_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(An)+ */ +uae_u32 REGPARAM2 op_20fb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(An)+ */ +uae_u32 REGPARAM2 op_20fc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,-(An) */ +uae_u32 REGPARAM2 op_2100_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,-(An) */ +uae_u32 REGPARAM2 op_2108_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),-(An) */ +uae_u32 REGPARAM2 op_2110_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,-(An) */ +uae_u32 REGPARAM2 op_2118_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),-(An) */ +uae_u32 REGPARAM2 op_2120_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),-(An) */ +uae_u32 REGPARAM2 op_2128_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),-(An) */ +uae_u32 REGPARAM2 op_2130_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,-(An) */ +uae_u32 REGPARAM2 op_2138_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,-(An) */ +uae_u32 REGPARAM2 op_2139_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),-(An) */ +uae_u32 REGPARAM2 op_213a_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),-(An) */ +uae_u32 REGPARAM2 op_213b_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,-(An) */ +uae_u32 REGPARAM2 op_213c_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_2140_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(d16,An) */ +uae_u32 REGPARAM2 op_2148_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(d16,An) */ +uae_u32 REGPARAM2 op_2150_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(d16,An) */ +uae_u32 REGPARAM2 op_2158_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(d16,An) */ +uae_u32 REGPARAM2 op_2160_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),(d16,An) */ +uae_u32 REGPARAM2 op_2168_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_2170_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(d16,An) */ +uae_u32 REGPARAM2 op_2178_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(d16,An) */ +uae_u32 REGPARAM2 op_2179_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(d16,An) */ +uae_u32 REGPARAM2 op_217a_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_217b_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(d16,An) */ +uae_u32 REGPARAM2 op_217c_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_2180_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_2188_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_2190_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_2198_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21a0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_3 +/* MOVE.L (d16,An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21a8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21b0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21b8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21b9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21ba_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21bb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_21bc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_21c0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(xxx).W */ +uae_u32 REGPARAM2 op_21c8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(xxx).W */ +uae_u32 REGPARAM2 op_21d0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(xxx).W */ +uae_u32 REGPARAM2 op_21d8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(xxx).W */ +uae_u32 REGPARAM2 op_21e0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),(xxx).W */ +uae_u32 REGPARAM2 op_21e8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_21f0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(xxx).W */ +uae_u32 REGPARAM2 op_21f8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(xxx).W */ +uae_u32 REGPARAM2 op_21f9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(xxx).W */ +uae_u32 REGPARAM2 op_21fa_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_21fb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(xxx).W */ +uae_u32 REGPARAM2 op_21fc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_23c0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L An,(xxx).L */ +uae_u32 REGPARAM2 op_23c8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An),(xxx).L */ +uae_u32 REGPARAM2 op_23d0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (An)+,(xxx).L */ +uae_u32 REGPARAM2 op_23d8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L -(An),(xxx).L */ +uae_u32 REGPARAM2 op_23e0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,An),(xxx).L */ +uae_u32 REGPARAM2 op_23e8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,An,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_23f0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).W,(xxx).L */ +uae_u32 REGPARAM2 op_23f8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (xxx).L,(xxx).L */ +uae_u32 REGPARAM2 op_23f9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d16,PC),(xxx).L */ +uae_u32 REGPARAM2 op_23fa_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L (d8,PC,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_23fb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.L #.L,(xxx).L */ +uae_u32 REGPARAM2 op_23fc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writelong(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,Dn */ +uae_u32 REGPARAM2 op_3000_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,Dn */ +uae_u32 REGPARAM2 op_3008_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),Dn */ +uae_u32 REGPARAM2 op_3010_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,Dn */ +uae_u32 REGPARAM2 op_3018_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),Dn */ +uae_u32 REGPARAM2 op_3020_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_3028_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_3030_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_3038_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_3039_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_303a_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_303b_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,Dn */ +uae_u32 REGPARAM2 op_303c_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + and_l_ri(dst,0xffff0000); + or_l(dst,scratchie); + forget_about(scratchie); + } else + mov_w_rr(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W Dn,An */ +uae_u32 REGPARAM2 op_3040_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W An,An */ +uae_u32 REGPARAM2 op_3048_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (An),An */ +uae_u32 REGPARAM2 op_3050_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (An)+,An */ +uae_u32 REGPARAM2 op_3058_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W -(An),An */ +uae_u32 REGPARAM2 op_3060_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (d16,An),An */ +uae_u32 REGPARAM2 op_3068_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_3070_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (xxx).W,An */ +uae_u32 REGPARAM2 op_3078_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (xxx).L,An */ +uae_u32 REGPARAM2 op_3079_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (d16,PC),An */ +uae_u32 REGPARAM2 op_307a_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_307b_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEA.W #.W,An */ +uae_u32 REGPARAM2 op_307c_0_comp_nf(uae_u32 opcode) /* MOVEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + { + int tmps=scratchie++; + sign_extend_16_rr(dst,src); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(An) */ +uae_u32 REGPARAM2 op_3080_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(An) */ +uae_u32 REGPARAM2 op_3088_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(An) */ +uae_u32 REGPARAM2 op_3090_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(An) */ +uae_u32 REGPARAM2 op_3098_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(An) */ +uae_u32 REGPARAM2 op_30a0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(An) */ +uae_u32 REGPARAM2 op_30a8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(An) */ +uae_u32 REGPARAM2 op_30b0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(An) */ +uae_u32 REGPARAM2 op_30b8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(An) */ +uae_u32 REGPARAM2 op_30b9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(An) */ +uae_u32 REGPARAM2 op_30ba_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(An) */ +uae_u32 REGPARAM2 op_30bb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(An) */ +uae_u32 REGPARAM2 op_30bc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_30c0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(An)+ */ +uae_u32 REGPARAM2 op_30c8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(An)+ */ +uae_u32 REGPARAM2 op_30d0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(An)+ */ +uae_u32 REGPARAM2 op_30d8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(An)+ */ +uae_u32 REGPARAM2 op_30e0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(An)+ */ +uae_u32 REGPARAM2 op_30e8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(An)+ */ +uae_u32 REGPARAM2 op_30f0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(An)+ */ +uae_u32 REGPARAM2 op_30f8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(An)+ */ +uae_u32 REGPARAM2 op_30f9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(An)+ */ +uae_u32 REGPARAM2 op_30fa_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(An)+ */ +uae_u32 REGPARAM2 op_30fb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_30fc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,-(An) */ +uae_u32 REGPARAM2 op_3100_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,-(An) */ +uae_u32 REGPARAM2 op_3108_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),-(An) */ +uae_u32 REGPARAM2 op_3110_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,-(An) */ +uae_u32 REGPARAM2 op_3118_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),-(An) */ +uae_u32 REGPARAM2 op_3120_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),-(An) */ +uae_u32 REGPARAM2 op_3128_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),-(An) */ +uae_u32 REGPARAM2 op_3130_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,-(An) */ +uae_u32 REGPARAM2 op_3138_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,-(An) */ +uae_u32 REGPARAM2 op_3139_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),-(An) */ +uae_u32 REGPARAM2 op_313a_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),-(An) */ +uae_u32 REGPARAM2 op_313b_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,-(An) */ +uae_u32 REGPARAM2 op_313c_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_3140_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(d16,An) */ +uae_u32 REGPARAM2 op_3148_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(d16,An) */ +uae_u32 REGPARAM2 op_3150_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(d16,An) */ +uae_u32 REGPARAM2 op_3158_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(d16,An) */ +uae_u32 REGPARAM2 op_3160_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(d16,An) */ +uae_u32 REGPARAM2 op_3168_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_3170_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(d16,An) */ +uae_u32 REGPARAM2 op_3178_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(d16,An) */ +uae_u32 REGPARAM2 op_3179_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(d16,An) */ +uae_u32 REGPARAM2 op_317a_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(d16,An) */ +uae_u32 REGPARAM2 op_317b_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_317c_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_3180_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_3188_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_3190_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_3198_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31a0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31a8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31b0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31b8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31b9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31ba_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31bb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_31bc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_31c0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(xxx).W */ +uae_u32 REGPARAM2 op_31c8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(xxx).W */ +uae_u32 REGPARAM2 op_31d0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(xxx).W */ +uae_u32 REGPARAM2 op_31d8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(xxx).W */ +uae_u32 REGPARAM2 op_31e0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(xxx).W */ +uae_u32 REGPARAM2 op_31e8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_31f0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(xxx).W */ +uae_u32 REGPARAM2 op_31f8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(xxx).W */ +uae_u32 REGPARAM2 op_31f9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(xxx).W */ +uae_u32 REGPARAM2 op_31fa_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(xxx).W */ +uae_u32 REGPARAM2 op_31fb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_31fc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_33c0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W An,(xxx).L */ +uae_u32 REGPARAM2 op_33c8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An),(xxx).L */ +uae_u32 REGPARAM2 op_33d0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (An)+,(xxx).L */ +uae_u32 REGPARAM2 op_33d8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W -(An),(xxx).L */ +uae_u32 REGPARAM2 op_33e0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,An),(xxx).L */ +uae_u32 REGPARAM2 op_33e8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,An,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_33f0_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).W,(xxx).L */ +uae_u32 REGPARAM2 op_33f8_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (xxx).L,(xxx).L */ +uae_u32 REGPARAM2 op_33f9_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d16,PC),(xxx).L */ +uae_u32 REGPARAM2 op_33fa_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W (d8,PC,Xn),(xxx).L */ +uae_u32 REGPARAM2 op_33fb_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_33fc_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + writeword(dsta, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B Dn */ +uae_u32 REGPARAM2 op_4000_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_b(dst,src); + if(srcreg != dst) { + mov_b_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (An) */ +uae_u32 REGPARAM2 op_4010_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (An)+ */ +uae_u32 REGPARAM2 op_4018_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B -(An) */ +uae_u32 REGPARAM2 op_4020_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (d16,An) */ +uae_u32 REGPARAM2 op_4028_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4030_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (xxx).W */ +uae_u32 REGPARAM2 op_4038_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.B (xxx).L */ +uae_u32 REGPARAM2 op_4039_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W Dn */ +uae_u32 REGPARAM2 op_4040_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_w(dst,src); + if(srcreg != dst) { + mov_w_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (An) */ +uae_u32 REGPARAM2 op_4050_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (An)+ */ +uae_u32 REGPARAM2 op_4058_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W -(An) */ +uae_u32 REGPARAM2 op_4060_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (d16,An) */ +uae_u32 REGPARAM2 op_4068_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4070_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (xxx).W */ +uae_u32 REGPARAM2 op_4078_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.W (xxx).L */ +uae_u32 REGPARAM2 op_4079_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L Dn */ +uae_u32 REGPARAM2 op_4080_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_l(dst,src); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (An) */ +uae_u32 REGPARAM2 op_4090_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (An)+ */ +uae_u32 REGPARAM2 op_4098_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L -(An) */ +uae_u32 REGPARAM2 op_40a0_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (d16,An) */ +uae_u32 REGPARAM2 op_40a8_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_40b0_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (xxx).W */ +uae_u32 REGPARAM2 op_40b8_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEGX.L (xxx).L */ +uae_u32 REGPARAM2 op_40b9_0_comp_nf(uae_u32 opcode) /* NEGX */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + restore_carry(); + sbb_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (An),An */ +uae_u32 REGPARAM2 op_41d0_0_comp_nf(uae_u32 opcode) /* LEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (d16,An),An */ +uae_u32 REGPARAM2 op_41e8_0_comp_nf(uae_u32 opcode) /* LEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_41f0_0_comp_nf(uae_u32 opcode) /* LEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (xxx).W,An */ +uae_u32 REGPARAM2 op_41f8_0_comp_nf(uae_u32 opcode) /* LEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (xxx).L,An */ +uae_u32 REGPARAM2 op_41f9_0_comp_nf(uae_u32 opcode) /* LEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (d16,PC),An */ +uae_u32 REGPARAM2 op_41fa_0_comp_nf(uae_u32 opcode) /* LEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LEA.L (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_41fb_0_comp_nf(uae_u32 opcode) /* LEA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if(dstreg + 8 != srca) { + mov_l_rr(dstreg + 8, srca); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B Dn */ +uae_u32 REGPARAM2 op_4200_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + if(srcreg != dst) { + mov_b_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (An) */ +uae_u32 REGPARAM2 op_4210_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (An)+ */ +uae_u32 REGPARAM2 op_4218_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B -(An) */ +uae_u32 REGPARAM2 op_4220_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (d16,An) */ +uae_u32 REGPARAM2 op_4228_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4230_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (xxx).W */ +uae_u32 REGPARAM2 op_4238_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.B (xxx).L */ +uae_u32 REGPARAM2 op_4239_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst=scratchie++; + mov_l_ri(dst,0); + writebyte(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W Dn */ +uae_u32 REGPARAM2 op_4240_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + if(srcreg != dst) { + mov_w_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (An) */ +uae_u32 REGPARAM2 op_4250_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (An)+ */ +uae_u32 REGPARAM2 op_4258_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W -(An) */ +uae_u32 REGPARAM2 op_4260_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (d16,An) */ +uae_u32 REGPARAM2 op_4268_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4270_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (xxx).W */ +uae_u32 REGPARAM2 op_4278_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.W (xxx).L */ +uae_u32 REGPARAM2 op_4279_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst=scratchie++; + mov_l_ri(dst,0); + writeword(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L Dn */ +uae_u32 REGPARAM2 op_4280_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (An) */ +uae_u32 REGPARAM2 op_4290_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (An)+ */ +uae_u32 REGPARAM2 op_4298_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L -(An) */ +uae_u32 REGPARAM2 op_42a0_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int dst=scratchie++; + mov_l_ri(dst,0); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (d16,An) */ +uae_u32 REGPARAM2 op_42a8_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_42b0_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (xxx).W */ +uae_u32 REGPARAM2 op_42b8_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst=scratchie++; + mov_l_ri(dst,0); + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CLR.L (xxx).L */ +uae_u32 REGPARAM2 op_42b9_0_comp_nf(uae_u32 opcode) /* CLR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst=scratchie++; + mov_l_ri(dst,0); + writelong(srca, dst, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B Dn */ +uae_u32 REGPARAM2 op_4400_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_b(dst,src); + if(srcreg != dst) { + mov_b_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B (An) */ +uae_u32 REGPARAM2 op_4410_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_4 +/* NEG.B (An)+ */ +uae_u32 REGPARAM2 op_4418_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B -(An) */ +uae_u32 REGPARAM2 op_4420_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B (d16,An) */ +uae_u32 REGPARAM2 op_4428_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4430_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B (xxx).W */ +uae_u32 REGPARAM2 op_4438_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.B (xxx).L */ +uae_u32 REGPARAM2 op_4439_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_b(dst,src); + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W Dn */ +uae_u32 REGPARAM2 op_4440_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_w(dst,src); + if(srcreg != dst) { + mov_w_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (An) */ +uae_u32 REGPARAM2 op_4450_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (An)+ */ +uae_u32 REGPARAM2 op_4458_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W -(An) */ +uae_u32 REGPARAM2 op_4460_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (d16,An) */ +uae_u32 REGPARAM2 op_4468_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4470_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (xxx).W */ +uae_u32 REGPARAM2 op_4478_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.W (xxx).L */ +uae_u32 REGPARAM2 op_4479_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_w(dst,src); + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L Dn */ +uae_u32 REGPARAM2 op_4480_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_l(dst,src); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (An) */ +uae_u32 REGPARAM2 op_4490_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (An)+ */ +uae_u32 REGPARAM2 op_4498_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L -(An) */ +uae_u32 REGPARAM2 op_44a0_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (d16,An) */ +uae_u32 REGPARAM2 op_44a8_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_44b0_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (xxx).W */ +uae_u32 REGPARAM2 op_44b8_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NEG.L (xxx).L */ +uae_u32 REGPARAM2 op_44b9_0_comp_nf(uae_u32 opcode) /* NEG */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0); + dont_care_flags(); + sub_l(dst,src); + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B Dn */ +uae_u32 REGPARAM2 op_4600_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + if(srcreg != dst) { + mov_b_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (An) */ +uae_u32 REGPARAM2 op_4610_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (An)+ */ +uae_u32 REGPARAM2 op_4618_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B -(An) */ +uae_u32 REGPARAM2 op_4620_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (d16,An) */ +uae_u32 REGPARAM2 op_4628_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4630_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (xxx).W */ +uae_u32 REGPARAM2 op_4638_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.B (xxx).L */ +uae_u32 REGPARAM2 op_4639_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W Dn */ +uae_u32 REGPARAM2 op_4640_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + if(srcreg != dst) { + mov_w_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (An) */ +uae_u32 REGPARAM2 op_4650_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (An)+ */ +uae_u32 REGPARAM2 op_4658_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W -(An) */ +uae_u32 REGPARAM2 op_4660_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (d16,An) */ +uae_u32 REGPARAM2 op_4668_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4670_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (xxx).W */ +uae_u32 REGPARAM2 op_4678_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.W (xxx).L */ +uae_u32 REGPARAM2 op_4679_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L Dn */ +uae_u32 REGPARAM2 op_4680_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + xor_l(dst,src); + } + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (An) */ +uae_u32 REGPARAM2 op_4690_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (An)+ */ +uae_u32 REGPARAM2 op_4698_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L -(An) */ +uae_u32 REGPARAM2 op_46a0_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(srca, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (d16,An) */ +uae_u32 REGPARAM2 op_46a8_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_46b0_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (xxx).W */ +uae_u32 REGPARAM2 op_46b8_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOT.L (xxx).L */ +uae_u32 REGPARAM2 op_46b9_0_comp_nf(uae_u32 opcode) /* NOT */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst=scratchie++; + mov_l_ri(dst,0xffffffff); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(srca, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LINK.L An,#.L */ +uae_u32 REGPARAM2 op_4808_0_comp_nf(uae_u32 opcode) /* LINK */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + if (srcreg == 7) { + m68k_pc_offset = m68k_pc_offset_thisinst; + FAIL(1); + return 0; + } + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int offs = scratchie++; + mov_l_ri(offs, comp_get_ilong((m68k_pc_offset+=4)-4)); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,src,scratchie); + mov_l_rr(src,SP_REG); + add_l(SP_REG,offs); + if(srcreg + 8 != src) { + mov_l_rr(srcreg + 8, src); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SWAP.W Dn */ +uae_u32 REGPARAM2 op_4840_0_comp_nf(uae_u32 opcode) /* SWAP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + rol_l_ri(src,16); + if(srcreg != src) { + mov_l_rr(srcreg, src); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (An) */ +uae_u32 REGPARAM2 op_4850_0_comp_nf(uae_u32 opcode) /* PEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if (srcreg==7) dodgy=1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (d16,An) */ +uae_u32 REGPARAM2 op_4868_0_comp_nf(uae_u32 opcode) /* PEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if (srcreg==7) dodgy=1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4870_0_comp_nf(uae_u32 opcode) /* PEA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if (srcreg==7) dodgy=1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (xxx).W */ +uae_u32 REGPARAM2 op_4878_0_comp_nf(uae_u32 opcode) /* PEA */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (xxx).L */ +uae_u32 REGPARAM2 op_4879_0_comp_nf(uae_u32 opcode) /* PEA */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (d16,PC) */ +uae_u32 REGPARAM2 op_487a_0_comp_nf(uae_u32 opcode) /* PEA */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* PEA.L (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_487b_0_comp_nf(uae_u32 opcode) /* PEA */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + { + int dsta = dodgy ? scratchie++ : 7 + 8; + lea_l_brr(7 + 8, 7 + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + 7); + } + writelong(dsta, srca, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXT.W Dn */ +uae_u32 REGPARAM2 op_4880_0_comp_nf(uae_u32 opcode) /* EXT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + { + int dst = scratchie++; + sign_extend_8_rr(dst,src); + if(srcreg != dst) { + mov_w_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,(An) */ +uae_u32 REGPARAM2 op_4890_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(srca, dstreg + 8); + } + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + offset+=2; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writeword(tmp,i,scratchie); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,-(An) */ +uae_u32 REGPARAM2 op_48a0_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca=dodgy?scratchie++:dstreg+8; + if (dodgy) { + mov_l_rr(srca,8+dstreg); + } + if (1 && !special_mem && !jit_n_addr_unsafe && !(mask & (1 << (7 - dstreg)))) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + offset-=2; + mov_l_rr(tmp,15-i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + } + } + lea_l_brr(8+dstreg,srca,(uae_s32)offset); + } else { + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + sub_l_ri(srca,2); + writeword(srca,15-i,scratchie); + } + } + mov_l_rr(8+dstreg,srca); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_48a8_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + dstreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + offset+=2; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writeword(tmp,i,scratchie); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_48b0_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + offset+=2; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writeword(tmp,i,scratchie); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_48b8_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + offset+=2; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writeword(tmp,i,scratchie); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_48b9_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_16(tmp); + mov_w_Rr(native,tmp,offset); + offset+=2; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writeword(tmp,i,scratchie); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXT.L Dn */ +uae_u32 REGPARAM2 op_48c0_0_comp_nf(uae_u32 opcode) /* EXT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + { + int dst = src; + sign_extend_16_rr(src,src); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,(An) */ +uae_u32 REGPARAM2 op_48d0_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(srca, dstreg + 8); + } + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + offset+=4; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writelong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,-(An) */ +uae_u32 REGPARAM2 op_48e0_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(srca, 8 + dstreg); + } + if (1 && !special_mem && !jit_n_addr_unsafe && !(mask & (1 << (7 - dstreg)))) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + offset-=4; + mov_l_rr(tmp,15-i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + } + } + lea_l_brr(8+dstreg,srca,(uae_s32)offset); + } else { + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + sub_l_ri(srca,4); + writelong(srca,15-i,scratchie); + } + } + mov_l_rr(8+dstreg,srca); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,(d16,An) */ +uae_u32 REGPARAM2 op_48e8_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + dstreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + offset+=4; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writelong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_48f0_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + offset+=4; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writelong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,(xxx).W */ +uae_u32 REGPARAM2 op_48f8_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + offset+=4; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writelong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMLE.L #.W,(xxx).L */ +uae_u32 REGPARAM2 op_48f9_0_comp_nf(uae_u32 opcode) /* MVMLE */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + int tmp=scratchie++; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + mov_l_rr(tmp,i); + mid_bswap_32(tmp); + mov_l_Rr(native,tmp,offset); + offset+=4; + } + } + } else { + mov_l_rr(tmp,srca); + for (i=0;i<16 && mask;i++) { + if ((mask>>i)&1) { + writelong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXT.B Dn */ +uae_u32 REGPARAM2 op_49c0_0_comp_nf(uae_u32 opcode) /* EXT */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + dont_care_flags(); + { + int dst = src; + sign_extend_8_rr(src,src); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B Dn */ +uae_u32 REGPARAM2 op_4a00_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (An) */ +uae_u32 REGPARAM2 op_4a10_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (An)+ */ +uae_u32 REGPARAM2 op_4a18_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B -(An) */ +uae_u32 REGPARAM2 op_4a20_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (d16,An) */ +uae_u32 REGPARAM2 op_4a28_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4a30_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (xxx).W */ +uae_u32 REGPARAM2 op_4a38_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (xxx).L */ +uae_u32 REGPARAM2 op_4a39_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (d16,PC) */ +uae_u32 REGPARAM2 op_4a3a_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4a3b_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.B #.B */ +uae_u32 REGPARAM2 op_4a3c_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W Dn */ +uae_u32 REGPARAM2 op_4a40_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W An */ +uae_u32 REGPARAM2 op_4a48_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (An) */ +uae_u32 REGPARAM2 op_4a50_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (An)+ */ +uae_u32 REGPARAM2 op_4a58_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W -(An) */ +uae_u32 REGPARAM2 op_4a60_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (d16,An) */ +uae_u32 REGPARAM2 op_4a68_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4a70_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (xxx).W */ +uae_u32 REGPARAM2 op_4a78_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (xxx).L */ +uae_u32 REGPARAM2 op_4a79_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (d16,PC) */ +uae_u32 REGPARAM2 op_4a7a_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4a7b_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.W #.W */ +uae_u32 REGPARAM2 op_4a7c_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L Dn */ +uae_u32 REGPARAM2 op_4a80_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L An */ +uae_u32 REGPARAM2 op_4a88_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (An) */ +uae_u32 REGPARAM2 op_4a90_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (An)+ */ +uae_u32 REGPARAM2 op_4a98_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L -(An) */ +uae_u32 REGPARAM2 op_4aa0_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (d16,An) */ +uae_u32 REGPARAM2 op_4aa8_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4ab0_0_comp_nf(uae_u32 opcode) /* TST */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (xxx).W */ +uae_u32 REGPARAM2 op_4ab8_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (xxx).L */ +uae_u32 REGPARAM2 op_4ab9_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (d16,PC) */ +uae_u32 REGPARAM2 op_4aba_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4abb_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* TST.L #.L */ +uae_u32 REGPARAM2 op_4abc_0_comp_nf(uae_u32 opcode) /* TST */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,Dn */ +uae_u32 REGPARAM2 op_4c00_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + int dst = dstreg; + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,(An) */ +uae_u32 REGPARAM2 op_4c10_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,(An)+ */ +uae_u32 REGPARAM2 op_4c18_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,-(An) */ +uae_u32 REGPARAM2 op_4c20_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,(d16,An) */ +uae_u32 REGPARAM2 op_4c28_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_4c30_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,(xxx).W */ +uae_u32 REGPARAM2 op_4c38_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,(xxx).L */ +uae_u32 REGPARAM2 op_4c39_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_4c3a_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(dsta, address + PC16off); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4c3b_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + int pctmp = scratchie++; + int dsta = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULL.L #.W,#.L */ +uae_u32 REGPARAM2 op_4c3c_0_comp_nf(uae_u32 opcode) /* MULL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + int r2=(extra>>12)&7; + int tmp=scratchie++; + { + int dst = scratchie++; + mov_l_ri(dst, comp_get_ilong((m68k_pc_offset+=4)-4)); + if (extra&0x0400) { + int r3=(extra&7); + mov_l_rr(r3,dst); + if (extra&0x0800) { + imul_64_32(r2,r3); + } else { + mul_64_32(r2,r3); + } + } else { + imul_32_32(r2,dst); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(An) */ +uae_u32 REGPARAM2 op_4c90_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(srca, dstreg + 8); + } + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(An)+ */ +uae_u32 REGPARAM2 op_4c98_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, dstreg + 8); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + lea_l_brr(8+dstreg,srca,offset); + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + mov_l_rr(8+dstreg,tmp); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(d16,An) */ +uae_u32 REGPARAM2 op_4ca8_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + dstreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_4cb0_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(xxx).W */ +uae_u32 REGPARAM2 op_4cb8_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(xxx).L */ +uae_u32 REGPARAM2 op_4cb9_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_4cba_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.W #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4cbb_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_w_rR(i,native,offset); + mid_bswap_16(i); + sign_extend_16_rr(i,i); + offset+=2; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + sign_extend_16_rr(i,i); + add_l_ri(tmp,2); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(An) */ +uae_u32 REGPARAM2 op_4cd0_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(srca, dstreg + 8); + } + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(An)+ */ +uae_u32 REGPARAM2 op_4cd8_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, dstreg + 8); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + lea_l_brr(8+dstreg,srca,offset); + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + mov_l_rr(8+dstreg,tmp); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(d16,An) */ +uae_u32 REGPARAM2 op_4ce8_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + dstreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_4cf0_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(xxx).W */ +uae_u32 REGPARAM2 op_4cf8_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(xxx).L */ +uae_u32 REGPARAM2 op_4cf9_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_4cfa_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MVMEL.L #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4cfb_0_comp_nf(uae_u32 opcode) /* MVMEL */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); + int native=scratchie++; + int i; + signed char offset=0; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + if (1 && !special_mem && !jit_n_addr_unsafe) { + get_n_addr(srca,native,scratchie); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + mov_l_rR(i,native,offset); + mid_bswap_32(i); + offset+=4; + } + } + } else { + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + add_l_ri(tmp,4); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* LINK.W An,#.W */ +uae_u32 REGPARAM2 op_4e50_0_comp_nf(uae_u32 opcode) /* LINK */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + if (srcreg == 7) { + m68k_pc_offset = m68k_pc_offset_thisinst; + FAIL(1); + return 0; + } + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,src,scratchie); + mov_l_rr(src,SP_REG); + sign_extend_16_rr(offs,offs); + add_l(SP_REG,offs); + if(srcreg + 8 != src) { + mov_l_rr(srcreg + 8, src); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* UNLK.L An */ +uae_u32 REGPARAM2 op_4e58_0_comp_nf(uae_u32 opcode) /* UNLK */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + mov_l_rr(SP_REG,src); + readlong(SP_REG,src,scratchie); + add_l_ri(SP_REG,4); + if(srcreg + 8 != src) { + mov_l_rr(srcreg + 8, src); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* NOP.L */ +uae_u32 REGPARAM2 op_4e71_0_comp_nf(uae_u32 opcode) /* NOP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* RTD.L #.W */ +uae_u32 REGPARAM2 op_4e74_0_comp_nf(uae_u32 opcode) /* RTD */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + add_l_ri(offs,4); + { + int newad=scratchie++; + readlong(SP_REG,newad,scratchie); + mov_l_mr(JITPTR ®s.pc,newad); + get_n_addr_jmp(newad,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + add_l(SP_REG,offs); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* RTS.L */ +uae_u32 REGPARAM2 op_4e75_0_comp_nf(uae_u32 opcode) /* RTS */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int newad=scratchie++; + readlong(SP_REG,newad,scratchie); + mov_l_mr(JITPTR ®s.pc,newad); + get_n_addr_jmp(newad,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + lea_l_brr(SP_REG,SP_REG,4); + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (An) */ +uae_u32 REGPARAM2 op_4e90_0_comp_nf(uae_u32 opcode) /* JSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (d16,An) */ +uae_u32 REGPARAM2 op_4ea8_0_comp_nf(uae_u32 opcode) /* JSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4eb0_0_comp_nf(uae_u32 opcode) /* JSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (xxx).W */ +uae_u32 REGPARAM2 op_4eb8_0_comp_nf(uae_u32 opcode) /* JSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (xxx).L */ +uae_u32 REGPARAM2 op_4eb9_0_comp_nf(uae_u32 opcode) /* JSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (d16,PC) */ +uae_u32 REGPARAM2 op_4eba_0_comp_nf(uae_u32 opcode) /* JSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JSR.L (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4ebb_0_comp_nf(uae_u32 opcode) /* JSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (An) */ +uae_u32 REGPARAM2 op_4ed0_0_comp_nf(uae_u32 opcode) /* JMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (d16,An) */ +uae_u32 REGPARAM2 op_4ee8_0_comp_nf(uae_u32 opcode) /* JMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (d8,An,Xn) */ +uae_u32 REGPARAM2 op_4ef0_0_comp_nf(uae_u32 opcode) /* JMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (xxx).W */ +uae_u32 REGPARAM2 op_4ef8_0_comp_nf(uae_u32 opcode) /* JMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (xxx).L */ +uae_u32 REGPARAM2 op_4ef9_0_comp_nf(uae_u32 opcode) /* JMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (d16,PC) */ +uae_u32 REGPARAM2 op_4efa_0_comp_nf(uae_u32 opcode) /* JMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* JMP.L (d8,PC,Xn) */ +uae_u32 REGPARAM2 op_4efb_0_comp_nf(uae_u32 opcode) /* JMP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + mov_l_mr(JITPTR ®s.pc,srca); + get_n_addr_jmp(srca,PC_P,scratchie); + mov_l_mr(JITPTR ®s.pc_oldp,PC_P); + m68k_pc_offset=0; + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,Dn */ +uae_u32 REGPARAM2 op_5000_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(An) */ +uae_u32 REGPARAM2 op_5010_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(An)+ */ +uae_u32 REGPARAM2 op_5018_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,-(An) */ +uae_u32 REGPARAM2 op_5020_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(d16,An) */ +uae_u32 REGPARAM2 op_5028_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_5030_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(xxx).W */ +uae_u32 REGPARAM2 op_5038_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.B #,(xxx).L */ +uae_u32 REGPARAM2 op_5039_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,Dn */ +uae_u32 REGPARAM2 op_5040_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDAQ.W #,An */ +uae_u32 REGPARAM2 op_5048_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(An) */ +uae_u32 REGPARAM2 op_5050_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(An)+ */ +uae_u32 REGPARAM2 op_5058_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,-(An) */ +uae_u32 REGPARAM2 op_5060_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(d16,An) */ +uae_u32 REGPARAM2 op_5068_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_5070_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(xxx).W */ +uae_u32 REGPARAM2 op_5078_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.W #,(xxx).L */ +uae_u32 REGPARAM2 op_5079_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,Dn */ +uae_u32 REGPARAM2 op_5080_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDAQ.L #,An */ +uae_u32 REGPARAM2 op_5088_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(An) */ +uae_u32 REGPARAM2 op_5090_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(An)+ */ +uae_u32 REGPARAM2 op_5098_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_5 +/* ADDQ.L #,-(An) */ +uae_u32 REGPARAM2 op_50a0_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(d16,An) */ +uae_u32 REGPARAM2 op_50a8_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_50b0_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(xxx).W */ +uae_u32 REGPARAM2 op_50b8_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDQ.L #,(xxx).L */ +uae_u32 REGPARAM2 op_50b9_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_50c0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_50c8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_50d0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_50d8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_50e0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_50e8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_50f0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_50f8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_50f9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + mov_l_ri(val,0); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,Dn */ +uae_u32 REGPARAM2 op_5100_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(An) */ +uae_u32 REGPARAM2 op_5110_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(An)+ */ +uae_u32 REGPARAM2 op_5118_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,-(An) */ +uae_u32 REGPARAM2 op_5120_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(d16,An) */ +uae_u32 REGPARAM2 op_5128_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_5130_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(xxx).W */ +uae_u32 REGPARAM2 op_5138_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.B #,(xxx).L */ +uae_u32 REGPARAM2 op_5139_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,Dn */ +uae_u32 REGPARAM2 op_5140_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBAQ.W #,An */ +uae_u32 REGPARAM2 op_5148_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(An) */ +uae_u32 REGPARAM2 op_5150_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(An)+ */ +uae_u32 REGPARAM2 op_5158_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,-(An) */ +uae_u32 REGPARAM2 op_5160_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(d16,An) */ +uae_u32 REGPARAM2 op_5168_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_5170_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(xxx).W */ +uae_u32 REGPARAM2 op_5178_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.W #,(xxx).L */ +uae_u32 REGPARAM2 op_5179_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,Dn */ +uae_u32 REGPARAM2 op_5180_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBAQ.L #,An */ +uae_u32 REGPARAM2 op_5188_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(An) */ +uae_u32 REGPARAM2 op_5190_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(An)+ */ +uae_u32 REGPARAM2 op_5198_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,-(An) */ +uae_u32 REGPARAM2 op_51a0_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(d16,An) */ +uae_u32 REGPARAM2 op_51a8_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_51b0_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(xxx).W */ +uae_u32 REGPARAM2 op_51b8_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBQ.L #,(xxx).L */ +uae_u32 REGPARAM2 op_51b9_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_51c0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_51c8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + start_needflags(); + sub_w_ri(src,1); + end_needflags(); + { + uintptr v2; + uintptr v1=get_const(PC_P); + v2=get_const(offs); + register_branch(v1,v2,3); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_51d0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_51d8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_51e0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_51e8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_51f0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_51f8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_51f9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + mov_l_ri(val,1); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_52c0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_52c8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,7); + cmov_l_rr(src,nsrc,7); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_52d0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_52d8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_52e0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_52e8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_52f0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_52f8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_52f9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,6); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_53c0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_53c8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,6); + cmov_l_rr(src,nsrc,6); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_53d0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_53d8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_53e0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_53e8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_53f0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_53f8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_53f9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,7); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_54c0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_54c8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,3); + cmov_l_rr(src,nsrc,3); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_54d0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_54d8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_54e0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_54e8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_54f0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_54f8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_54f9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,2); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_55c0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_55c8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,2); + cmov_l_rr(src,nsrc,2); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_55d0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_55d8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_55e0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_55e8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_55f0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_55f8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_55f9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,3); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_56c0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_56c8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,5); + cmov_l_rr(src,nsrc,5); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_56d0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_56d8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_56e0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_56e8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_56f0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_56f8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_56f9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,4); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_57c0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_57c8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,4); + cmov_l_rr(src,nsrc,4); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_57d0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_57d8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_57e0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_57e8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_57f0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_57f8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_57f9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,5); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5ac0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5ac8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,9); + cmov_l_rr(src,nsrc,9); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5ad0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5ad8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5ae0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5ae8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5af0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5af8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5af9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,8); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5bc0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5bc8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,8); + cmov_l_rr(src,nsrc,8); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5bd0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5bd8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5be0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5be8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5bf0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5bf8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5bf9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,9); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5cc0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5cc8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,13); + cmov_l_rr(src,nsrc,13); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5cd0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5cd8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5ce0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5ce8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5cf0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5cf8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5cf9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,12); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5dc0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5dc8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,12); + cmov_l_rr(src,nsrc,12); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5dd0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5dd8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5de0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5de8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5df0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5df8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5df9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,13); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5ec0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5ec8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,15); + cmov_l_rr(src,nsrc,15); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5ed0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5ed8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5ee0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5ee8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5ef0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5ef8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5ef9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,14); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B Dn */ +uae_u32 REGPARAM2 op_5fc0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + if(srcreg != val) { + mov_b_rr(srcreg, val); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* DBcc.W Dn,#.W */ +uae_u32 REGPARAM2 op_5fc8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int offs = scratchie++; + mov_l_ri(offs, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(offs,offs); + sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(offs,JITPTR comp_pc_p); + add_l_ri(offs,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + { + int nsrc=scratchie++; + make_flags_live(); + mov_l_rr(nsrc,src); + lea_l_brr(scratchie,src,(uae_s32)-1); + mov_w_rr(src,scratchie); + cmov_l_rr(offs,PC_P,14); + cmov_l_rr(src,nsrc,14); + start_needflags(); + test_w_rr(nsrc,nsrc); + end_needflags(); + cmov_l_rr(PC_P,offs,5); + if(srcreg != src) { + mov_w_rr(srcreg, src); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An) */ +uae_u32 REGPARAM2 op_5fd0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (An)+ */ +uae_u32 REGPARAM2 op_5fd8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B -(An) */ +uae_u32 REGPARAM2 op_5fe0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d16,An) */ +uae_u32 REGPARAM2 op_5fe8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (d8,An,Xn) */ +uae_u32 REGPARAM2 op_5ff0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).W */ +uae_u32 REGPARAM2 op_5ff8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Scc.B (xxx).L */ +uae_u32 REGPARAM2 op_5ff9_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int val = scratchie++; + make_flags_live(); + setcc(val,15); + sub_b_ri(val,1); + writebyte(srca, val, scratchie); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6000_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + mov_l_rr(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6001_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + mov_l_rr(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_60ff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + mov_l_rr(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSR.W #.W */ +uae_u32 REGPARAM2 op_6100_0_comp_nf(uae_u32 opcode) /* BSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + add_l_ri(src,m68k_pc_offset_thisinst+2); + m68k_pc_offset=0; + add_l(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSRQ.B # */ +uae_u32 REGPARAM2 op_6101_0_comp_nf(uae_u32 opcode) /* BSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + add_l_ri(src,m68k_pc_offset_thisinst+2); + m68k_pc_offset=0; + add_l(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BSR.L #.L */ +uae_u32 REGPARAM2 op_61ff_0_comp_nf(uae_u32 opcode) /* BSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + { + uae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset); + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(SP_REG,4); + writelong_clobber(SP_REG,ret,scratchie); + add_l_ri(src,m68k_pc_offset_thisinst+2); + m68k_pc_offset=0; + add_l(PC_P,src); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6200_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,7); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6201_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,7); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_62ff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,7); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6300_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,6); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6301_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,6); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_6 +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_63ff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,6); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6400_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,3); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6401_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,3); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_64ff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,3); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6500_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,2); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6501_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,2); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_65ff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,2); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6600_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,5); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6601_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,5); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_66ff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,5); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6700_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,4); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6701_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,4); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_67ff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,4); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6a00_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,9); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6a01_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,9); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6aff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,9); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6b00_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,8); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6b01_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,8); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6bff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,8); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6c00_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,13); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6c01_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,13); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6cff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,13); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6d00_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,12); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6d01_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,12); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6dff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,12); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6e00_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,15); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6e01_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,15); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6eff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,15); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.W #.W */ +uae_u32 REGPARAM2 op_6f00_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + sign_extend_16_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,14); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* BccQ.B # */ +uae_u32 REGPARAM2 op_6f01_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + sign_extend_8_rr(src,src); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,14); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* Bcc.L #.L */ +uae_u32 REGPARAM2 op_6fff_0_comp_nf(uae_u32 opcode) /* Bcc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + mov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src)); + sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); + add_l_ri(src,JITPTR comp_pc_p); + mov_l_ri(PC_P,JITPTR comp_pc_p); + add_l_ri(src,m68k_pc_offset); + add_l_ri(PC_P,m68k_pc_offset); + m68k_pc_offset=0; + uintptr v1=get_const(PC_P); + uintptr v2=get_const(src); + register_branch(v1,v2,14); + make_flags_live(); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVEQ.L #,Dn */ +uae_u32 REGPARAM2 op_7000_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 8) & 255); + #else + uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, srcreg); + { + int dst = dstreg; + dont_care_flags(); + mov_l_rr(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,Dn */ +uae_u32 REGPARAM2 op_8000_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (An),Dn */ +uae_u32 REGPARAM2 op_8010_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (An)+,Dn */ +uae_u32 REGPARAM2 op_8018_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B -(An),Dn */ +uae_u32 REGPARAM2 op_8020_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_8028_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_8030_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_8038_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_8039_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_803a_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_803b_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B #.B,Dn */ +uae_u32 REGPARAM2 op_803c_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,Dn */ +uae_u32 REGPARAM2 op_8040_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (An),Dn */ +uae_u32 REGPARAM2 op_8050_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (An)+,Dn */ +uae_u32 REGPARAM2 op_8058_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W -(An),Dn */ +uae_u32 REGPARAM2 op_8060_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_8068_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_8070_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_8078_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_8079_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_807a_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_807b_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W #.W,Dn */ +uae_u32 REGPARAM2 op_807c_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,Dn */ +uae_u32 REGPARAM2 op_8080_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (An),Dn */ +uae_u32 REGPARAM2 op_8090_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (An)+,Dn */ +uae_u32 REGPARAM2 op_8098_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L -(An),Dn */ +uae_u32 REGPARAM2 op_80a0_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_80a8_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_80b0_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_80b8_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_80b9_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_80ba_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_80bb_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L #.L,Dn */ +uae_u32 REGPARAM2 op_80bc_0_comp_nf(uae_u32 opcode) /* OR */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + { + or_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(An) */ +uae_u32 REGPARAM2 op_8110_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_8118_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,-(An) */ +uae_u32 REGPARAM2 op_8120_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_8128_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_8130_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_8138_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_8139_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(An) */ +uae_u32 REGPARAM2 op_8150_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_8158_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,-(An) */ +uae_u32 REGPARAM2 op_8160_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_8168_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_8170_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_8178_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_8179_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l(dst,scratchie); + forget_about(scratchie); + } else + or_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(An) */ +uae_u32 REGPARAM2 op_8190_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_8198_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,-(An) */ +uae_u32 REGPARAM2 op_81a0_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_81a8_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_81b0_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_81b8_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* OR.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_81b9_0_comp_nf(uae_u32 opcode) /* OR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + or_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,Dn */ +uae_u32 REGPARAM2 op_9000_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (An),Dn */ +uae_u32 REGPARAM2 op_9010_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (An)+,Dn */ +uae_u32 REGPARAM2 op_9018_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B -(An),Dn */ +uae_u32 REGPARAM2 op_9020_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_9028_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_9030_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_9038_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_9039_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_903a_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_903b_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B #.B,Dn */ +uae_u32 REGPARAM2 op_903c_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + sub_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,Dn */ +uae_u32 REGPARAM2 op_9040_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W An,Dn */ +uae_u32 REGPARAM2 op_9048_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (An),Dn */ +uae_u32 REGPARAM2 op_9050_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (An)+,Dn */ +uae_u32 REGPARAM2 op_9058_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W -(An),Dn */ +uae_u32 REGPARAM2 op_9060_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_9068_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_9070_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_9078_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_9079_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_907a_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_907b_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W #.W,Dn */ +uae_u32 REGPARAM2 op_907c_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + sub_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,Dn */ +uae_u32 REGPARAM2 op_9080_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L An,Dn */ +uae_u32 REGPARAM2 op_9088_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (An),Dn */ +uae_u32 REGPARAM2 op_9090_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (An)+,Dn */ +uae_u32 REGPARAM2 op_9098_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L -(An),Dn */ +uae_u32 REGPARAM2 op_90a0_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_90a8_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_90b0_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_90b8_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_90b9_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_90ba_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_90bb_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L #.L,Dn */ +uae_u32 REGPARAM2 op_90bc_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + sub_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W Dn,An */ +uae_u32 REGPARAM2 op_90c0_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W An,An */ +uae_u32 REGPARAM2 op_90c8_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (An),An */ +uae_u32 REGPARAM2 op_90d0_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (An)+,An */ +uae_u32 REGPARAM2 op_90d8_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W -(An),An */ +uae_u32 REGPARAM2 op_90e0_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (d16,An),An */ +uae_u32 REGPARAM2 op_90e8_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_90f0_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (xxx).W,An */ +uae_u32 REGPARAM2 op_90f8_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (xxx).L,An */ +uae_u32 REGPARAM2 op_90f9_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (d16,PC),An */ +uae_u32 REGPARAM2 op_90fa_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_90fb_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.W #.W,An */ +uae_u32 REGPARAM2 op_90fc_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.B Dn,Dn */ +uae_u32 REGPARAM2 op_9100_0_comp_nf(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + restore_carry(); + sbb_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.B -(An),-(An) */ +uae_u32 REGPARAM2 op_9108_0_comp_nf(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + restore_carry(); + sbb_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(An) */ +uae_u32 REGPARAM2 op_9110_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_9118_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,-(An) */ +uae_u32 REGPARAM2 op_9120_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_9128_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_9130_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_9138_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_9139_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + sub_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.W Dn,Dn */ +uae_u32 REGPARAM2 op_9140_0_comp_nf(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + restore_carry(); + sbb_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.W -(An),-(An) */ +uae_u32 REGPARAM2 op_9148_0_comp_nf(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + restore_carry(); + sbb_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(An) */ +uae_u32 REGPARAM2 op_9150_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_9158_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,-(An) */ +uae_u32 REGPARAM2 op_9160_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_9168_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_9170_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_9178_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_9179_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + sub_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.L Dn,Dn */ +uae_u32 REGPARAM2 op_9180_0_comp_nf(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + restore_carry(); + sbb_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBX.L -(An),-(An) */ +uae_u32 REGPARAM2 op_9188_0_comp_nf(uae_u32 opcode) /* SUBX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + restore_carry(); + sbb_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(An) */ +uae_u32 REGPARAM2 op_9190_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_9198_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,-(An) */ +uae_u32 REGPARAM2 op_91a0_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_91a8_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_91b0_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_91b8_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUB.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_91b9_0_comp_nf(uae_u32 opcode) /* SUB */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + sub_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L Dn,An */ +uae_u32 REGPARAM2 op_91c0_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L An,An */ +uae_u32 REGPARAM2 op_91c8_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (An),An */ +uae_u32 REGPARAM2 op_91d0_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (An)+,An */ +uae_u32 REGPARAM2 op_91d8_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L -(An),An */ +uae_u32 REGPARAM2 op_91e0_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (d16,An),An */ +uae_u32 REGPARAM2 op_91e8_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_91f0_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (xxx).W,An */ +uae_u32 REGPARAM2 op_91f8_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (xxx).L,An */ +uae_u32 REGPARAM2 op_91f9_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (d16,PC),An */ +uae_u32 REGPARAM2 op_91fa_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_91fb_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* SUBA.L #.L,An */ +uae_u32 REGPARAM2 op_91fc_0_comp_nf(uae_u32 opcode) /* SUBA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + sub_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B Dn,Dn */ +uae_u32 REGPARAM2 op_b000_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (An),Dn */ +uae_u32 REGPARAM2 op_b010_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (An)+,Dn */ +uae_u32 REGPARAM2 op_b018_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B -(An),Dn */ +uae_u32 REGPARAM2 op_b020_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_b028_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_b030_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_b038_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_b039_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_b03a_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_b03b_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.B #.B,Dn */ +uae_u32 REGPARAM2 op_b03c_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W Dn,Dn */ +uae_u32 REGPARAM2 op_b040_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W An,Dn */ +uae_u32 REGPARAM2 op_b048_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (An),Dn */ +uae_u32 REGPARAM2 op_b050_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (An)+,Dn */ +uae_u32 REGPARAM2 op_b058_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W -(An),Dn */ +uae_u32 REGPARAM2 op_b060_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_b068_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_b070_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_b078_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_b079_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_b07a_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_b07b_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.W #.W,Dn */ +uae_u32 REGPARAM2 op_b07c_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L Dn,Dn */ +uae_u32 REGPARAM2 op_b080_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L An,Dn */ +uae_u32 REGPARAM2 op_b088_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (An),Dn */ +uae_u32 REGPARAM2 op_b090_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (An)+,Dn */ +uae_u32 REGPARAM2 op_b098_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L -(An),Dn */ +uae_u32 REGPARAM2 op_b0a0_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif + +#ifdef PART_7 +/* CMP.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_b0a8_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_b0b0_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_b0b8_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_b0b9_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_b0ba_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_b0bb_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMP.L #.L,Dn */ +uae_u32 REGPARAM2 op_b0bc_0_comp_nf(uae_u32 opcode) /* CMP */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W Dn,An */ +uae_u32 REGPARAM2 op_b0c0_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W An,An */ +uae_u32 REGPARAM2 op_b0c8_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (An),An */ +uae_u32 REGPARAM2 op_b0d0_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (An)+,An */ +uae_u32 REGPARAM2 op_b0d8_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W -(An),An */ +uae_u32 REGPARAM2 op_b0e0_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (d16,An),An */ +uae_u32 REGPARAM2 op_b0e8_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_b0f0_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (xxx).W,An */ +uae_u32 REGPARAM2 op_b0f8_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (xxx).L,An */ +uae_u32 REGPARAM2 op_b0f9_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (d16,PC),An */ +uae_u32 REGPARAM2 op_b0fa_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_b0fb_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.W #.W,An */ +uae_u32 REGPARAM2 op_b0fc_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + sign_extend_16_rr(tmps,src); + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,Dn */ +uae_u32 REGPARAM2 op_b100_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPM.B (An)+,(An)+ */ +uae_u32 REGPARAM2 op_b108_0_comp_nf(uae_u32 opcode) /* CMPM */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(An) */ +uae_u32 REGPARAM2 op_b110_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_b118_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,-(An) */ +uae_u32 REGPARAM2 op_b120_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_b128_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_b130_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_b138_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_b139_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_b(dst,src); + } + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,Dn */ +uae_u32 REGPARAM2 op_b140_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPM.W (An)+,(An)+ */ +uae_u32 REGPARAM2 op_b148_0_comp_nf(uae_u32 opcode) /* CMPM */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(An) */ +uae_u32 REGPARAM2 op_b150_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_b158_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,-(An) */ +uae_u32 REGPARAM2 op_b160_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_b168_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_b170_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_b178_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_b179_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + { + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + xor_l(dst,scratchie); + forget_about(scratchie); + } else + xor_w(dst,src); + } + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,Dn */ +uae_u32 REGPARAM2 op_b180_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + { + xor_l(dst,src); + } + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPM.L (An)+,(An)+ */ +uae_u32 REGPARAM2 op_b188_0_comp_nf(uae_u32 opcode) /* CMPM */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + { + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(An) */ +uae_u32 REGPARAM2 op_b190_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_b198_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,-(An) */ +uae_u32 REGPARAM2 op_b1a0_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_b1a8_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_b1b0_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_b1b8_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EOR.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_b1b9_0_comp_nf(uae_u32 opcode) /* EOR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + { + xor_l(dst,src); + } + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L Dn,An */ +uae_u32 REGPARAM2 op_b1c0_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L An,An */ +uae_u32 REGPARAM2 op_b1c8_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (An),An */ +uae_u32 REGPARAM2 op_b1d0_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (An)+,An */ +uae_u32 REGPARAM2 op_b1d8_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L -(An),An */ +uae_u32 REGPARAM2 op_b1e0_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (d16,An),An */ +uae_u32 REGPARAM2 op_b1e8_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_b1f0_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (xxx).W,An */ +uae_u32 REGPARAM2 op_b1f8_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (xxx).L,An */ +uae_u32 REGPARAM2 op_b1f9_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (d16,PC),An */ +uae_u32 REGPARAM2 op_b1fa_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_b1fb_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* CMPA.L #.L,An */ +uae_u32 REGPARAM2 op_b1fc_0_comp_nf(uae_u32 opcode) /* CMPA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmps=scratchie++; + tmps=src; + dont_care_flags(); + /* Weird --- CMP with noflags ;-) */ + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,Dn */ +uae_u32 REGPARAM2 op_c000_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (An),Dn */ +uae_u32 REGPARAM2 op_c010_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (An)+,Dn */ +uae_u32 REGPARAM2 op_c018_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B -(An),Dn */ +uae_u32 REGPARAM2 op_c020_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_c028_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_c030_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_c038_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_c039_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_c03a_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_c03b_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B #.B,Dn */ +uae_u32 REGPARAM2 op_c03c_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,Dn */ +uae_u32 REGPARAM2 op_c040_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (An),Dn */ +uae_u32 REGPARAM2 op_c050_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (An)+,Dn */ +uae_u32 REGPARAM2 op_c058_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W -(An),Dn */ +uae_u32 REGPARAM2 op_c060_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_c068_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_c070_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_c078_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_c079_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_c07a_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_c07b_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W #.W,Dn */ +uae_u32 REGPARAM2 op_c07c_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,Dn */ +uae_u32 REGPARAM2 op_c080_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (An),Dn */ +uae_u32 REGPARAM2 op_c090_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (An)+,Dn */ +uae_u32 REGPARAM2 op_c098_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L -(An),Dn */ +uae_u32 REGPARAM2 op_c0a0_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_c0a8_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_c0b0_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_c0b8_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_c0b9_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_c0ba_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_c0bb_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L #.L,Dn */ +uae_u32 REGPARAM2 op_c0bc_0_comp_nf(uae_u32 opcode) /* AND */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + and_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W Dn,Dn */ +uae_u32 REGPARAM2 op_c0c0_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int src = srcreg; + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (An),Dn */ +uae_u32 REGPARAM2 op_c0d0_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (An)+,Dn */ +uae_u32 REGPARAM2 op_c0d8_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W -(An),Dn */ +uae_u32 REGPARAM2 op_c0e0_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_c0e8_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_c0f0_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_c0f8_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_c0f9_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_c0fa_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_c0fb_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULU.W #.W,Dn */ +uae_u32 REGPARAM2 op_c0fc_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + zero_extend_16_rr(scratchie,src); + zero_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(An) */ +uae_u32 REGPARAM2 op_c110_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_c118_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,-(An) */ +uae_u32 REGPARAM2 op_c120_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_c128_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_c130_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_c138_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_c139_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_8_rr(scratchie,src); + or_l_ri(scratchie,0xffffff00); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXG.L Dn,Dn */ +uae_u32 REGPARAM2 op_c140_0_comp_nf(uae_u32 opcode) /* EXG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + int tmp=scratchie++; + mov_l_rr(tmp,src); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + if(dstreg != tmp) { + mov_l_rr(dstreg, tmp); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXG.L An,An */ +uae_u32 REGPARAM2 op_c148_0_comp_nf(uae_u32 opcode) /* EXG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + mov_l_rr(tmp,src); + if(srcreg + 8 != dst) { + mov_l_rr(srcreg + 8, dst); + } + if(dstreg + 8 != tmp) { + mov_l_rr(dstreg + 8, tmp); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(An) */ +uae_u32 REGPARAM2 op_c150_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_c158_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,-(An) */ +uae_u32 REGPARAM2 op_c160_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_c168_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_c170_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_c178_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_c179_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + if (kill_rodent(dst)) { + zero_extend_16_rr(scratchie,src); + or_l_ri(scratchie,0xffff0000); + and_l(dst,scratchie); + forget_about(scratchie); + } else + and_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* EXG.L Dn,An */ +uae_u32 REGPARAM2 op_c188_0_comp_nf(uae_u32 opcode) /* EXG */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + mov_l_rr(tmp,src); + if(srcreg != dst) { + mov_l_rr(srcreg, dst); + } + if(dstreg + 8 != tmp) { + mov_l_rr(dstreg + 8, tmp); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(An) */ +uae_u32 REGPARAM2 op_c190_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_c198_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,-(An) */ +uae_u32 REGPARAM2 op_c1a0_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_c1a8_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_c1b0_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_c1b8_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* AND.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_c1b9_0_comp_nf(uae_u32 opcode) /* AND */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + and_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W Dn,Dn */ +uae_u32 REGPARAM2 op_c1c0_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int src = srcreg; + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (An),Dn */ +uae_u32 REGPARAM2 op_c1d0_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (An)+,Dn */ +uae_u32 REGPARAM2 op_c1d8_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W -(An),Dn */ +uae_u32 REGPARAM2 op_c1e0_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_c1e8_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_c1f0_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_c1f8_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_c1f9_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_c1fa_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_c1fb_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MULS.W #.W,Dn */ +uae_u32 REGPARAM2 op_c1fc_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + sign_extend_16_rr(scratchie,src); + sign_extend_16_rr(dst,dst); + imul_32_32(dst,scratchie); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,Dn */ +uae_u32 REGPARAM2 op_d000_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (An),Dn */ +uae_u32 REGPARAM2 op_d010_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (An)+,Dn */ +uae_u32 REGPARAM2 op_d018_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + lea_l_brr(srcreg + 8,srcreg + 8, areg_byteinc[srcreg]); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B -(An),Dn */ +uae_u32 REGPARAM2 op_d020_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (d16,An),Dn */ +uae_u32 REGPARAM2 op_d028_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_d030_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (xxx).W,Dn */ +uae_u32 REGPARAM2 op_d038_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (xxx).L,Dn */ +uae_u32 REGPARAM2 op_d039_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (d16,PC),Dn */ +uae_u32 REGPARAM2 op_d03a_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_d03b_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B #.B,Dn */ +uae_u32 REGPARAM2 op_d03c_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + add_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,Dn */ +uae_u32 REGPARAM2 op_d040_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W An,Dn */ +uae_u32 REGPARAM2 op_d048_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (An),Dn */ +uae_u32 REGPARAM2 op_d050_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (An)+,Dn */ +uae_u32 REGPARAM2 op_d058_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W -(An),Dn */ +uae_u32 REGPARAM2 op_d060_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (d16,An),Dn */ +uae_u32 REGPARAM2 op_d068_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_d070_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (xxx).W,Dn */ +uae_u32 REGPARAM2 op_d078_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (xxx).L,Dn */ +uae_u32 REGPARAM2 op_d079_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (d16,PC),Dn */ +uae_u32 REGPARAM2 op_d07a_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_d07b_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W #.W,Dn */ +uae_u32 REGPARAM2 op_d07c_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dstreg; + dont_care_flags(); + add_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,Dn */ +uae_u32 REGPARAM2 op_d080_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L An,Dn */ +uae_u32 REGPARAM2 op_d088_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (An),Dn */ +uae_u32 REGPARAM2 op_d090_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (An)+,Dn */ +uae_u32 REGPARAM2 op_d098_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L -(An),Dn */ +uae_u32 REGPARAM2 op_d0a0_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (d16,An),Dn */ +uae_u32 REGPARAM2 op_d0a8_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (d8,An,Xn),Dn */ +uae_u32 REGPARAM2 op_d0b0_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (xxx).W,Dn */ +uae_u32 REGPARAM2 op_d0b8_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (xxx).L,Dn */ +uae_u32 REGPARAM2 op_d0b9_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (d16,PC),Dn */ +uae_u32 REGPARAM2 op_d0ba_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L (d8,PC,Xn),Dn */ +uae_u32 REGPARAM2 op_d0bb_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L #.L,Dn */ +uae_u32 REGPARAM2 op_d0bc_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dstreg; + dont_care_flags(); + add_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W Dn,An */ +uae_u32 REGPARAM2 op_d0c0_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W An,An */ +uae_u32 REGPARAM2 op_d0c8_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (An),An */ +uae_u32 REGPARAM2 op_d0d0_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (An)+,An */ +uae_u32 REGPARAM2 op_d0d8_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readword(srca,src,scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 2); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W -(An),An */ +uae_u32 REGPARAM2 op_d0e0_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (d16,An),An */ +uae_u32 REGPARAM2 op_d0e8_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_d0f0_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (xxx).W,An */ +uae_u32 REGPARAM2 op_d0f8_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (xxx).L,An */ +uae_u32 REGPARAM2 op_d0f9_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (d16,PC),An */ +uae_u32 REGPARAM2 op_d0fa_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_d0fb_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readword(srca,src,scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.W #.W,An */ +uae_u32 REGPARAM2 op_d0fc_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + sign_extend_16_rr(tmp,src); + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.B Dn,Dn */ +uae_u32 REGPARAM2 op_d100_0_comp_nf(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + restore_carry(); + adc_b(dst,src); + if(dstreg != dst) { + mov_b_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.B -(An),-(An) */ +uae_u32 REGPARAM2 op_d108_0_comp_nf(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, (uae_s32)-areg_byteinc[srcreg]); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readbyte(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + { + dont_care_flags(); + restore_carry(); + adc_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(An) */ +uae_u32 REGPARAM2 op_d110_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(An)+ */ +uae_u32 REGPARAM2 op_d118_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + lea_l_brr(dstreg + 8,dstreg + 8, areg_byteinc[dstreg]); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,-(An) */ +uae_u32 REGPARAM2 op_d120_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, (uae_s32)-areg_byteinc[dstreg]); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(d16,An) */ +uae_u32 REGPARAM2 op_d128_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_d130_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(xxx).W */ +uae_u32 REGPARAM2 op_d138_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.B Dn,(xxx).L */ +uae_u32 REGPARAM2 op_d139_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readbyte(dsta, dst, scratchie); + dont_care_flags(); + add_b(dst,src); + writebyte(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.W Dn,Dn */ +uae_u32 REGPARAM2 op_d140_0_comp_nf(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + restore_carry(); + adc_w(dst,src); + if(dstreg != dst) { + mov_w_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.W -(An),-(An) */ +uae_u32 REGPARAM2 op_d148_0_comp_nf(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -2); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readword(srca,src,scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + { + dont_care_flags(); + restore_carry(); + adc_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(An) */ +uae_u32 REGPARAM2 op_d150_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(An)+ */ +uae_u32 REGPARAM2 op_d158_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 2); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,-(An) */ +uae_u32 REGPARAM2 op_d160_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -2); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(d16,An) */ +uae_u32 REGPARAM2 op_d168_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_d170_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(xxx).W */ +uae_u32 REGPARAM2 op_d178_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.W Dn,(xxx).L */ +uae_u32 REGPARAM2 op_d179_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readword(dsta,dst,scratchie); + dont_care_flags(); + add_w(dst,src); + writeword(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.L Dn,Dn */ +uae_u32 REGPARAM2 op_d180_0_comp_nf(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dstreg; + { + dont_care_flags(); + restore_carry(); + adc_l(dst,src); + if(dstreg != dst) { + mov_l_rr(dstreg, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDX.L -(An),-(An) */ +uae_u32 REGPARAM2 op_d188_0_comp_nf(uae_u32 opcode) /* ADDX */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + { + dont_care_flags(); + restore_carry(); + adc_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(An) */ +uae_u32 REGPARAM2 op_d190_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(An)+ */ +uae_u32 REGPARAM2 op_d198_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + lea_l_brr(dstreg + 8, dstreg + 8, 4); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,-(An) */ +uae_u32 REGPARAM2 op_d1a0_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + lea_l_brr(dstreg + 8, dstreg + 8, -4); + if (dodgy) { + mov_l_rr(dsta, 8 + dstreg); + } + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(d16,An) */ +uae_u32 REGPARAM2 op_d1a8_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_rr(dsta, 8 + dstreg); + lea_l_brr(dsta, dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_d1b0_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + calc_disp_ea_020(dstreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), dsta, scratchie); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(xxx).W */ +uae_u32 REGPARAM2 op_d1b8_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADD.L Dn,(xxx).L */ +uae_u32 REGPARAM2 op_d1b9_0_comp_nf(uae_u32 opcode) /* ADD */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dst = scratchie++; + readlong(dsta, dst, scratchie); + dont_care_flags(); + add_l(dst,src); + writelong(dsta, dst, scratchie); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L Dn,An */ +uae_u32 REGPARAM2 op_d1c0_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = srcreg; + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L An,An */ +uae_u32 REGPARAM2 op_d1c8_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(src, srcreg + 8); + } + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (An),An */ +uae_u32 REGPARAM2 op_d1d0_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (An)+,An */ +uae_u32 REGPARAM2 op_d1d8_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int src = scratchie++; + readlong(srca, src, scratchie); + lea_l_brr(srcreg + 8, srcreg + 8, 4); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L -(An),An */ +uae_u32 REGPARAM2 op_d1e0_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + { + int srca = dodgy ? scratchie++ : srcreg + 8; + lea_l_brr(srcreg + 8, srcreg + 8, -4); + if (dodgy) { + mov_l_rr(srca, 8 + srcreg); + } + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (d16,An),An */ +uae_u32 REGPARAM2 op_d1e8_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_rr(srca, 8 + srcreg); + lea_l_brr(srca, srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (d8,An,Xn),An */ +uae_u32 REGPARAM2 op_d1f0_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + calc_disp_ea_020(srcreg + 8, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (xxx).W,An */ +uae_u32 REGPARAM2 op_d1f8_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (xxx).L,An */ +uae_u32 REGPARAM2 op_d1f9_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (d16,PC),An */ +uae_u32 REGPARAM2 op_d1fa_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); + mov_l_ri(srca, address + PC16off); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L (d8,PC,Xn),An */ +uae_u32 REGPARAM2 op_d1fb_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int pctmp = scratchie++; + int srca = scratchie++; + uae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset); + { + mov_l_ri(pctmp,address); + calc_disp_ea_020(pctmp, comp_get_iword((m68k_pc_offset+=2)-2), srca, scratchie); + { + int src = scratchie++; + readlong(srca, src, scratchie); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ADDA.L #.L,An */ +uae_u32 REGPARAM2 op_d1fc_0_comp_nf(uae_u32 opcode) /* ADDA */ +{ + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + { + int src = scratchie++; + mov_l_ri(src, comp_get_ilong((m68k_pc_offset+=4)-4)); + { + int dst = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dst, dstreg + 8); + } + { + int tmp=scratchie++; + tmp=src; + add_l(dst,tmp); + if(dstreg + 8 != dst) { + mov_l_rr(dstreg + 8, dst); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* ASRQ.B #,Dn */ +uae_u32 REGPARAM2 op_e000_0_comp_nf(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shra_b_ri(data,srcreg); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSRQ.B #,Dn */ +uae_u32 REGPARAM2 op_e008_0_comp_nf(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shrl_b_ri(data,srcreg); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* RORQ.B #,Dn */ +uae_u32 REGPARAM2 op_e018_0_comp_nf(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + ror_b_rr(data,cnt); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASR.B Dn,Dn */ +uae_u32 REGPARAM2 op_e020_0_comp_nf(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int setval = scratchie++; + mov_l_ri(cdata, 0); + mov_l_ri(setval, 0xffffffff); + test_l_ri(data, 0x00000080); + cmov_l_rr(setval, cdata, NATIVE_CC_EQ); + mov_l_rr(cdata, setval); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x08); + cmov_l_rr(cdata, setval, NATIVE_CC_HI); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shra_b_rr(cdata, tmpcnt); + mov_b_rr(data, cdata); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSR.B Dn,Dn */ +uae_u32 REGPARAM2 op_e028_0_comp_nf(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x08); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shrl_b_rr(cdata, tmpcnt); + mov_b_rr(data, cdata); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROR.B Dn,Dn */ +uae_u32 REGPARAM2 op_e038_0_comp_nf(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + ror_b_rr(data,cnt); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASRQ.W #,Dn */ +uae_u32 REGPARAM2 op_e040_0_comp_nf(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shra_w_ri(data,srcreg); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +#endif + +#ifdef PART_8 +/* LSRQ.W #,Dn */ +uae_u32 REGPARAM2 op_e048_0_comp_nf(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shrl_w_ri(data,srcreg); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* RORQ.W #,Dn */ +uae_u32 REGPARAM2 op_e058_0_comp_nf(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + ror_w_rr(data,cnt); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASR.W Dn,Dn */ +uae_u32 REGPARAM2 op_e060_0_comp_nf(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int setval = scratchie++; + mov_l_ri(cdata, 0); + mov_l_ri(setval, 0xffffffff); + test_l_ri(data, 0x00008000); + cmov_l_rr(setval, cdata, NATIVE_CC_EQ); + mov_l_rr(cdata, setval); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x10); + cmov_l_rr(cdata, setval, NATIVE_CC_HI); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shra_w_rr(cdata, tmpcnt); + mov_w_rr(data, cdata); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSR.W Dn,Dn */ +uae_u32 REGPARAM2 op_e068_0_comp_nf(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x10); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shrl_w_rr(cdata, tmpcnt); + mov_w_rr(data, cdata); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROR.W Dn,Dn */ +uae_u32 REGPARAM2 op_e078_0_comp_nf(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + ror_w_rr(data,cnt); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASRQ.L #,Dn */ +uae_u32 REGPARAM2 op_e080_0_comp_nf(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shra_l_ri(data,srcreg); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSRQ.L #,Dn */ +uae_u32 REGPARAM2 op_e088_0_comp_nf(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shrl_l_ri(data,srcreg); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* RORQ.L #,Dn */ +uae_u32 REGPARAM2 op_e098_0_comp_nf(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + ror_l_rr(data,cnt); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASR.L Dn,Dn */ +uae_u32 REGPARAM2 op_e0a0_0_comp_nf(uae_u32 opcode) /* ASR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + int setval = scratchie++; + mov_l_ri(cdata, 0); + mov_l_ri(setval, 0xffffffff); + test_l_ri(data, 0x80000000); + cmov_l_rr(setval, cdata, NATIVE_CC_EQ); + mov_l_rr(cdata, setval); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x20); + cmov_l_rr(cdata, setval, NATIVE_CC_HI); + cmov_l_rr(data, setval, NATIVE_CC_EQ); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shra_l_rr(cdata, tmpcnt); + mov_l_rr(data, cdata); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSR.L Dn,Dn */ +uae_u32 REGPARAM2 op_e0a8_0_comp_nf(uae_u32 opcode) /* LSR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x20); + cmov_l_rr(data, cdata, NATIVE_CC_EQ); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shrl_l_rr(cdata, tmpcnt); + mov_l_rr(data, cdata); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROR.L Dn,Dn */ +uae_u32 REGPARAM2 op_e0b8_0_comp_nf(uae_u32 opcode) /* ROR */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + ror_l_rr(data,cnt); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASLQ.B #,Dn */ +uae_u32 REGPARAM2 op_e100_0_comp_nf(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shll_b_ri(data,srcreg); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSLQ.B #,Dn */ +uae_u32 REGPARAM2 op_e108_0_comp_nf(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shll_b_ri(data,srcreg); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROLQ.B #,Dn */ +uae_u32 REGPARAM2 op_e118_0_comp_nf(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + rol_b_rr(data,cnt); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASL.B Dn,Dn */ +uae_u32 REGPARAM2 op_e120_0_comp_nf(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x08); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_b_rr(cdata, tmpcnt); + mov_b_rr(data, cdata); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSL.B Dn,Dn */ +uae_u32 REGPARAM2 op_e128_0_comp_nf(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x08); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_b_rr(cdata, tmpcnt); + mov_b_rr(data, cdata); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROL.B Dn,Dn */ +uae_u32 REGPARAM2 op_e138_0_comp_nf(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + rol_b_rr(data,cnt); + if(dstreg != data) { + mov_b_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASLQ.W #,Dn */ +uae_u32 REGPARAM2 op_e140_0_comp_nf(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shll_w_ri(data,srcreg); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSLQ.W #,Dn */ +uae_u32 REGPARAM2 op_e148_0_comp_nf(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shll_w_ri(data,srcreg); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROLQ.W #,Dn */ +uae_u32 REGPARAM2 op_e158_0_comp_nf(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + rol_w_rr(data,cnt); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASL.W Dn,Dn */ +uae_u32 REGPARAM2 op_e160_0_comp_nf(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x10); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_w_rr(cdata, tmpcnt); + mov_w_rr(data, cdata); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSL.W Dn,Dn */ +uae_u32 REGPARAM2 op_e168_0_comp_nf(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x10); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_w_rr(cdata, tmpcnt); + mov_w_rr(data, cdata); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROL.W Dn,Dn */ +uae_u32 REGPARAM2 op_e178_0_comp_nf(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + rol_w_rr(data,cnt); + if(dstreg != data) { + mov_w_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASLQ.L #,Dn */ +uae_u32 REGPARAM2 op_e180_0_comp_nf(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shll_l_ri(data,srcreg); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSLQ.L #,Dn */ +uae_u32 REGPARAM2 op_e188_0_comp_nf(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + shll_l_ri(data,srcreg); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROLQ.L #,Dn */ +uae_u32 REGPARAM2 op_e198_0_comp_nf(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; + #else + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + dont_care_flags(); + { + int cnt = scratchie++; + mov_l_ri(cnt, srcreg); + { + int data = dstreg; + { + rol_l_rr(data,cnt); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ASL.L Dn,Dn */ +uae_u32 REGPARAM2 op_e1a0_0_comp_nf(uae_u32 opcode) /* ASL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + if (needed_flags & FLAG_V) { + FAIL(1); + return 0; + } + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x20); + cmov_l_rr(data, cdata, NATIVE_CC_EQ); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_l_rr(cdata, tmpcnt); + mov_l_rr(data, cdata); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* LSL.L Dn,Dn */ +uae_u32 REGPARAM2 op_e1a8_0_comp_nf(uae_u32 opcode) /* LSL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + { + int cdata = scratchie++; + int tmpcnt = scratchie++; + mov_l_ri(cdata, 0); + mov_l_rr(tmpcnt, cnt); + and_l_ri(tmpcnt, 63); + cmp_b_ri(tmpcnt, 0x20); + cmov_l_rr(data, cdata, NATIVE_CC_EQ); + cmov_l_rr(cdata, data, NATIVE_CC_LS); + shll_l_rr(cdata, tmpcnt); + mov_l_rr(data, cdata); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* ROL.L Dn,Dn */ +uae_u32 REGPARAM2 op_e1b8_0_comp_nf(uae_u32 opcode) /* ROL */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 1) & 7); + #else + uae_s32 srcreg = ((opcode >> 9) & 7); + #endif + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + if ((uae_u32)srcreg==(uae_u32)dstreg) { + FAIL(1); + return 0; + } + { + dont_care_flags(); + { + int cnt = srcreg; + { + int data = dstreg; + { + rol_l_rr(data,cnt); + if(dstreg != data) { + mov_l_rr(dstreg, data); + } + } + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,Dn */ +uae_u32 REGPARAM2 op_f200_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,An */ +uae_u32 REGPARAM2 op_f208_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(An) */ +uae_u32 REGPARAM2 op_f210_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(An)+ */ +uae_u32 REGPARAM2 op_f218_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,-(An) */ +uae_u32 REGPARAM2 op_f220_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(d16,An) */ +uae_u32 REGPARAM2 op_f228_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_f230_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(xxx).W */ +uae_u32 REGPARAM2 op_f238_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(xxx).L */ +uae_u32 REGPARAM2 op_f239_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(d16,PC) */ +uae_u32 REGPARAM2 op_f23a_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_s32 dstreg = 2; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,(d8,PC,Xn) */ +uae_u32 REGPARAM2 op_f23b_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_s32 dstreg = 3; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FPP.L #.W,#.L */ +uae_u32 REGPARAM2 op_f23c_0_comp_nf(uae_u32 opcode) /* FPP */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fpp_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,Dn */ +uae_u32 REGPARAM2 op_f240_0_comp_nf(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(An) */ +uae_u32 REGPARAM2 op_f250_0_comp_nf(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(An)+ */ +uae_u32 REGPARAM2 op_f258_0_comp_nf(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,-(An) */ +uae_u32 REGPARAM2 op_f260_0_comp_nf(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(d16,An) */ +uae_u32 REGPARAM2 op_f268_0_comp_nf(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(d8,An,Xn) */ +uae_u32 REGPARAM2 op_f270_0_comp_nf(uae_u32 opcode) /* FScc */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(xxx).W */ +uae_u32 REGPARAM2 op_f278_0_comp_nf(uae_u32 opcode) /* FScc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FScc.L #.W,(xxx).L */ +uae_u32 REGPARAM2 op_f279_0_comp_nf(uae_u32 opcode) /* FScc */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); + comp_fscc_opp(opcode,extra); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FBccQ.L #,#.W */ +uae_u32 REGPARAM2 op_f280_0_comp_nf(uae_u32 opcode) /* FBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 63); + #else + uae_s32 srcreg = (opcode & 63); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + comp_fbcc_opp(opcode); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* FBccQ.L #,#.L */ +uae_u32 REGPARAM2 op_f2c0_0_comp_nf(uae_u32 opcode) /* FBcc */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 63); + #else + uae_s32 srcreg = (opcode & 63); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + #ifdef USE_JIT_FPU + comp_fbcc_opp(opcode); + #else + failure = 1; + #endif + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + if (failure) { + m68k_pc_offset = m68k_pc_offset_thisinst; + } + return 0; +} +/* MOVE16.L (An)+,(xxx).L */ +uae_u32 REGPARAM2 op_f600_0_comp_nf(uae_u32 opcode) /* MOVE16 */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int src=scratchie++; + int dst=scratchie++; + { + int srca = scratchie++; + mov_l_rr(srca, srcreg + 8); + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + mov_l_rr(src,srca); + mov_l_rr(dst,dsta); + and_l_ri(src,~15); + and_l_ri(dst,~15); + add_l_ri(srcreg+8,16); + if (special_mem || jit_n_addr_unsafe) { + int tmp=scratchie; + scratchie+=4; + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + } else + { + int tmp=scratchie; + scratchie+=4; + get_n_addr(src,src,scratchie); + get_n_addr(dst,dst,scratchie); + mov_l_rR(tmp+0,src,0); + mov_l_rR(tmp+1,src,4); + mov_l_rR(tmp+2,src,8); + mov_l_rR(tmp+3,src,12); + mov_l_Rr(dst,tmp+0,0); + forget_about(tmp+0); + mov_l_Rr(dst,tmp+1,4); + forget_about(tmp+1); + mov_l_Rr(dst,tmp+2,8); + forget_about(tmp+2); + mov_l_Rr(dst,tmp+3,12); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE16.L (xxx).L,(An)+ */ +uae_u32 REGPARAM2 op_f608_0_comp_nf(uae_u32 opcode) /* MOVE16 */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int src=scratchie++; + int dst=scratchie++; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dsta = scratchie++; + mov_l_rr(dsta, dstreg + 8); + mov_l_rr(src,srca); + mov_l_rr(dst,dsta); + and_l_ri(src,~15); + and_l_ri(dst,~15); + add_l_ri(dstreg+8,16); + if (special_mem || jit_n_addr_unsafe) { + int tmp=scratchie; + scratchie+=4; + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + } else + { + int tmp=scratchie; + scratchie+=4; + get_n_addr(src,src,scratchie); + get_n_addr(dst,dst,scratchie); + mov_l_rR(tmp+0,src,0); + mov_l_rR(tmp+1,src,4); + mov_l_rR(tmp+2,src,8); + mov_l_rR(tmp+3,src,12); + mov_l_Rr(dst,tmp+0,0); + forget_about(tmp+0); + mov_l_Rr(dst,tmp+1,4); + forget_about(tmp+1); + mov_l_Rr(dst,tmp+2,8); + forget_about(tmp+2); + mov_l_Rr(dst,tmp+3,12); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE16.L (An),(xxx).L */ +uae_u32 REGPARAM2 op_f610_0_comp_nf(uae_u32 opcode) /* MOVE16 */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int src=scratchie++; + int dst=scratchie++; + { + int srca = dodgy ? scratchie++ : srcreg + 8; + if (dodgy) { + mov_l_rr(srca, srcreg + 8); + } + { + int dsta = scratchie++; + mov_l_ri(dsta, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + mov_l_rr(src,srca); + mov_l_rr(dst,dsta); + and_l_ri(src,~15); + and_l_ri(dst,~15); + if (special_mem || jit_n_addr_unsafe) { + int tmp=scratchie; + scratchie+=4; + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + } else + { + int tmp=scratchie; + scratchie+=4; + get_n_addr(src,src,scratchie); + get_n_addr(dst,dst,scratchie); + mov_l_rR(tmp+0,src,0); + mov_l_rR(tmp+1,src,4); + mov_l_rR(tmp+2,src,8); + mov_l_rR(tmp+3,src,12); + mov_l_Rr(dst,tmp+0,0); + forget_about(tmp+0); + mov_l_Rr(dst,tmp+1,4); + forget_about(tmp+1); + mov_l_Rr(dst,tmp+2,8); + forget_about(tmp+2); + mov_l_Rr(dst,tmp+3,12); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE16.L (xxx).L,(An) */ +uae_u32 REGPARAM2 op_f618_0_comp_nf(uae_u32 opcode) /* MOVE16 */ +{ + uae_u32 dstreg = opcode & 7; + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int src=scratchie++; + int dst=scratchie++; + { + int srca = scratchie++; + mov_l_ri(srca, comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ + { + int dsta = dodgy ? scratchie++ : dstreg + 8; + if (dodgy) { + mov_l_rr(dsta, dstreg + 8); + } + mov_l_rr(src,srca); + mov_l_rr(dst,dsta); + and_l_ri(src,~15); + and_l_ri(dst,~15); + if (special_mem || jit_n_addr_unsafe) { + int tmp=scratchie; + scratchie+=4; + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + } else + { + int tmp=scratchie; + scratchie+=4; + get_n_addr(src,src,scratchie); + get_n_addr(dst,dst,scratchie); + mov_l_rR(tmp+0,src,0); + mov_l_rR(tmp+1,src,4); + mov_l_rR(tmp+2,src,8); + mov_l_rR(tmp+3,src,12); + mov_l_Rr(dst,tmp+0,0); + forget_about(tmp+0); + mov_l_Rr(dst,tmp+1,4); + forget_about(tmp+1); + mov_l_Rr(dst,tmp+2,8); + forget_about(tmp+2); + mov_l_Rr(dst,tmp+3,12); + } + } + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +/* MOVE16.L (An)+,(An)+ */ +uae_u32 REGPARAM2 op_f620_0_comp_nf(uae_u32 opcode) /* MOVE16 */ +{ + #if defined(HAVE_GET_WORD_UNSWAPPED) + uae_u32 srcreg = ((opcode >> 8) & 7); + #else + uae_s32 srcreg = (opcode & 7); + #endif + uae_s32 dstreg = 0; + uae_u32 dodgy=(srcreg==(uae_s32)dstreg); + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; + { + uae_u8 scratchie=S1; + int src=scratchie++; + int dst=scratchie++; + uae_u16 dstreg=((comp_get_iword((m68k_pc_offset+=2)-2))>>12)&0x07; + mov_l_rr(src,8+srcreg); + mov_l_rr(dst,8+dstreg); + and_l_ri(src,~15); + and_l_ri(dst,~15); + if (srcreg != dstreg) { + add_l_ri(srcreg+8,16); + } + add_l_ri(dstreg+8,16); + if (special_mem || jit_n_addr_unsafe) { + int tmp=scratchie; + scratchie+=4; + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + add_l_ri(src,4); + add_l_ri(dst,4); + readlong(src,tmp,scratchie); + writelong_clobber(dst,tmp,scratchie); + } else + { + int tmp=scratchie; + scratchie+=4; + get_n_addr(src,src,scratchie); + get_n_addr(dst,dst,scratchie); + mov_l_rR(tmp+0,src,0); + mov_l_rR(tmp+1,src,4); + mov_l_rR(tmp+2,src,8); + mov_l_rR(tmp+3,src,12); + mov_l_Rr(dst,tmp+0,0); + forget_about(tmp+0); + mov_l_Rr(dst,tmp+1,4); + forget_about(tmp+1); + mov_l_Rr(dst,tmp+2,8); + forget_about(tmp+2); + mov_l_Rr(dst,tmp+3,12); + } + } + if (m68k_pc_offset > SYNC_PC_OFFSET) { + sync_m68k_pc(); + } + return 0; +} +#endif diff --git a/jit/x86/compemu_x86.h b/jit/x86/compemu_x86.h new file mode 100644 index 00000000..fff26ad4 --- /dev/null +++ b/jit/x86/compemu_x86.h @@ -0,0 +1,577 @@ +/* + * compiler/compemu.h - Public interface and definitions + * + * Copyright (c) 2001-2004 Milan Jurik of ARAnyM dev team (see AUTHORS) + * + * Inspired by Christian Bauer's Basilisk II + * + * This file is part of the ARAnyM project which builds a new and powerful + * TOS/FreeMiNT compatible virtual machine running on almost any hardware. + * + * JIT compiler m68k -> IA-32 and AMD64 + * + * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer + * Adaptation for Basilisk II and improvements, copyright 2000-2004 Gwenole Beauchesne + * Portions related to CPU detection come from linux/arch/i386/kernel/setup.c + * + * ARAnyM is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * ARAnyM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with ARAnyM; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef COMPEMU_X86_H +#define COMPEMU_X86_H + +#include "sysconfig.h" +#include "newcpu.h" + +#ifdef UAE +#ifdef CPU_64_BIT +typedef uae_u64 uintptr; +typedef uae_s64 intptr; +#else +typedef uae_u32 uintptr; +#endif +/* FIXME: cpummu.cpp also checks for USE_JIT, possibly others */ +#define USE_JIT +#endif + +#define JITPTR (uintptr) + +#ifdef USE_JIT + +/* Allocate memory near the JIT cache / .data segment for RIP-relative access. + * options=0 uses anchor-based allocation; options=1 forces low 2GB (MAP_32BIT). */ +extern void *jit_vm_acquire(uae_u32 size, int options = 0); + +#ifdef JIT_DEBUG +/* dump some information (m68k block, x86 block addresses) about the compiler state */ +extern void compiler_dumpstate(void); +#endif + +/* Now that we do block chaining, and also have linked lists on each tag, + TAGMASK can be much smaller and still do its job. Saves several megs + of memory! */ +#define TAGMASK 0x0000ffff +#define TAGSIZE (TAGMASK+1) +#define MAXRUN 1024 +#define cacheline(x) (((uintptr)x)&TAGMASK) + +extern uae_u8* start_pc_p; +extern uae_u32 start_pc; + +struct blockinfo_t; + +struct cpu_history { + uae_u16* location; +#ifdef UAE + uae_u8 specmem; +#endif +}; + +union cacheline { + cpuop_func *handler; + blockinfo_t * bi; +}; + +/* Use new spill/reload strategy when calling external functions */ +#define USE_OPTIMIZED_CALLS 0 +#if USE_OPTIMIZED_CALLS +#error implementation in progress +#endif + +/* (gb) When on, this option can save up to 30% compilation time + * when many lazy flushes occur (e.g. apps in MacOS 8.x). + */ +#define USE_SEPARATE_BIA 1 + +/* Use chain of checksum_info_t to compute the block checksum */ +#define USE_CHECKSUM_INFO 1 + +/* Use code inlining, aka follow-up of constant jumps */ +#define USE_INLINING 1 + +/* Inlining requires the chained checksum information */ +#if USE_INLINING +#undef USE_CHECKSUM_INFO +#define USE_CHECKSUM_INFO 1 +#endif + +/* Does flush_icache_range() only check for blocks falling in the requested range? */ +#define LAZY_FLUSH_ICACHE_RANGE 0 + +#define USE_F_ALIAS 1 +#define USE_OFFSET 1 +#define COMP_DEBUG 1 + +#if COMP_DEBUG +#define Dif(x) if (x) +#else +#define Dif(x) if (0) +#endif + +#define SCALE 2 + +#define BYTES_PER_INST 10240 /* paranoid ;-) */ +#if defined(CPU_arm) +#define LONGEST_68K_INST 256 /* The number of bytes the longest possible + 68k instruction takes */ +#else +#define LONGEST_68K_INST 16 /* The number of bytes the longest possible + 68k instruction takes */ +#endif +#define MAX_CHECKSUM_LEN 2048 /* The maximum size we calculate checksums + for. Anything larger will be flushed + unconditionally even with SOFT_FLUSH */ +#define MAX_HOLD_BI 3 /* One for the current block, and up to two + for jump targets */ + +#define INDIVIDUAL_INST 0 +#define FLAG_X 0x0010 +#define FLAG_N 0x0008 +#define FLAG_Z 0x0004 +#define FLAG_V 0x0002 +#define FLAG_C 0x0001 +#define FLAG_CZNV (FLAG_C | FLAG_Z | FLAG_N | FLAG_V) +#define FLAG_ALL (FLAG_C | FLAG_Z | FLAG_N | FLAG_V | FLAG_X) +#define FLAG_ZNV (FLAG_Z | FLAG_N | FLAG_V) + +#define KILLTHERAT 1 /* Set to 1 to avoid some partial_rat_stalls */ + +#if defined(CPU_arm) +#define USE_DATA_BUFFER +#define N_REGS 13 /* really 16, but 13 to 15 are SP, LR, PC */ +#else +#if defined(CPU_x86_64) +#define N_REGS 16 /* really only 15, but they are numbered 0-3,5-15 */ +#else +#define N_REGS 8 /* really only 7, but they are numbered 0,1,2,3,5,6,7 */ +#endif +#endif +#define N_FREGS 6 /* That leaves us two positions on the stack to play with */ + +/* Functions exposed to newcpu, or to what was moved from newcpu.c to + * compemu_support.c */ +extern void compiler_init(void); +extern void compiler_exit(void); +extern bool compiler_use_jit(void); +extern void flush(int save_regs); +void flush_reg(int reg); +extern void set_target(uae_u8* t); +extern uae_u8* get_target(void); +#ifdef UAE +extern void build_comp(void); +#endif +extern void set_cache_state(int enabled); +extern int get_cache_state(void); +extern uae_u32 get_jitted_size(void); +#ifdef JIT +extern void (*flush_icache)(int); +#endif +extern void alloc_cache(void); +extern int check_for_cache_miss(void); +#ifdef UAE +extern void disable_jit_on_runtime_alloc_failure(const char *what); +#endif + +/* JIT FPU compilation */ +struct jit_disable_opcodes { + bool fbcc; + bool fdbcc; + bool fscc; + bool ftrapcc; + bool fsave; + bool frestore; + bool fmove; + bool fmovem; + bool fmovec; /* for move control register */ + bool fmovecr; /* for move from constant rom */ + bool fint; + bool fsinh; + bool fintrz; + bool fsqrt; + bool flognp1; + bool fetoxm1; + bool ftanh; + bool fatan; + bool fasin; + bool fatanh; + bool fsin; + bool ftan; + bool fetox; + bool ftwotox; + bool ftentox; + bool flogn; + bool flog10; + bool flog2; + bool fabs; + bool fcosh; + bool fneg; + bool facos; + bool fcos; + bool fgetexp; + bool fgetman; + bool fdiv; + bool fmod; + bool fadd; + bool fmul; + bool fsgldiv; + bool frem; + bool fscale; + bool fsglmul; + bool fsub; + bool fsincos; + bool fcmp; + bool ftst; +}; +extern struct jit_disable_opcodes jit_disable; + + +extern void comp_fpp_opp (uae_u32 opcode, uae_u16 extra); +extern void comp_fbcc_opp (uae_u32 opcode); +extern void comp_fscc_opp (uae_u32 opcode, uae_u16 extra); +void comp_fdbcc_opp (uae_u32 opcode, uae_u16 extra); +void comp_ftrapcc_opp (uae_u32 opcode, uaecptr oldpc); +void comp_fsave_opp (uae_u32 opcode); +void comp_frestore_opp (uae_u32 opcode); + +extern uae_u32 needed_flags; +extern uae_u8* comp_pc_p; +extern void* pushall_call_handler; + +#define VREGS 32 +#define VFREGS 16 + +#define INMEM 1 +#define CLEAN 2 +#define DIRTY 3 +#define UNDEF 4 +#define ISCONST 5 + +typedef struct { + uae_u32* mem; + uintptr val; /* Must be pointer-width: PC_P holds a host pointer (64-bit on x86_64) */ + uae_u8 is_swapped; + uae_u8 status; + uae_s8 realreg; /* gb-- realreg can hold -1 */ + uae_u8 realind; /* The index in the holds[] array */ + uae_u8 needflush; + uae_u8 validsize; + uae_u8 dirtysize; + uae_u8 dummy; +} reg_status; + +typedef struct { + uae_u32* mem; + double val; + uae_u8 status; + uae_s8 realreg; /* gb-- realreg can hold -1 */ + uae_u8 realind; + uae_u8 needflush; +} freg_status; + +#define SP_REG 15 +#define PC_P 16 +#define FLAGX 17 +#define FLAGTMP 18 +#define NEXT_HANDLER 19 +#define S1 20 +#define S2 21 +#define S3 22 +#define S4 23 +#define S5 24 +#define S6 25 +#define S7 26 +#define S8 27 +#define S9 28 +#define S10 29 +#define S11 30 +#define S12 31 + +#define FP_RESULT 8 +#define FS1 9 +#define FS2 10 +#define FS3 11 + +typedef struct { + uae_u32 touched; + uae_s8 holds[VREGS]; + uae_u8 nholds; + uae_u8 canbyte; + uae_u8 canword; + uae_u8 locked; +} n_status; + +typedef struct { + uae_u32 touched; + uae_s8 holds[VFREGS]; + uae_u8 nholds; + uae_u8 locked; +} fn_status; + +/* For flag handling */ +#define NADA 1 +#define TRASH 2 +#define VALID 3 + +/* needflush values */ +#define NF_SCRATCH 0 +#define NF_TOMEM 1 +#define NF_HANDLER 2 + +typedef struct { + /* Integer part */ + reg_status state[VREGS]; + n_status nat[N_REGS]; + uae_u32 flags_on_stack; + uae_u32 flags_in_flags; + uae_u32 flags_are_important; + /* FPU part */ + freg_status fate[VFREGS]; + fn_status fat[N_FREGS]; + + /* x86 FPU part */ + uae_s8 spos[N_FREGS]; + uae_s8 onstack[6]; + uae_s8 tos; +} bigstate; + +typedef struct { + /* Integer part */ + uae_s8 virt[VREGS]; + uae_s8 nat[N_REGS]; +} smallstate; + +extern int touchcnt; + +#define IMM uae_s32 +#define IMPTR uintptr +#define RR1 uae_u32 +#define RR2 uae_u32 +#define RR4 uae_u32 +/* + R1, R2, R4 collides with ARM registers defined in ucontext +#define R1 uae_u32 +#define R2 uae_u32 +#define R4 uae_u32 +*/ +#define W1 uae_u32 +#define W2 uae_u32 +#define W4 uae_u32 +#define RW1 uae_u32 +#define RW2 uae_u32 +#define RW4 uae_u32 +#define MEMR uintptr +#define MEMW uintptr +#define MEMRW uintptr +#define MEMPTR uintptr +#define MEMPTRR MEMPTR +#define MEMPTRW MEMPTR +#define MEMPTRRW MEMPTR + +#define FW uae_u32 +#define FR uae_u32 +#define FRW uae_u32 + +#define MIDFUNC(nargs,func,args) void func args +#define COMPCALL(func) func + +#define LOWFUNC(flags,mem,nargs,func,args) static inline void func args + +/* What we expose to the outside */ +#define DECLARE_MIDFUNC(func) extern void func + +#if defined(CPU_i386) || defined(CPU_x86_64) +#include "compemu_midfunc_x86.h" +#endif + +#undef DECLARE_MIDFUNC + +extern int failure; +#define FAIL(x) do { failure|=x; } while (0) + +/* Convenience functions exposed to gencomp */ +extern uae_u32 m68k_pc_offset; +extern void readbyte(int address, int dest, int tmp); +extern void readword(int address, int dest, int tmp); +extern void readlong(int address, int dest, int tmp); +extern void writebyte(int address, int source, int tmp); +extern void writeword(int address, int source, int tmp); +extern void writelong(int address, int source, int tmp); +extern void writeword_clobber(int address, int source, int tmp); +extern void writelong_clobber(int address, int source, int tmp); +extern void get_n_addr(int address, int dest, int tmp); +extern void get_n_addr_jmp(int address, int dest, int tmp); +extern void calc_disp_ea_020(int base, uae_u32 dp, int target, int tmp); +/* Set native Z flag only if register is zero */ +extern void set_zero(int r, int tmp); +extern int kill_rodent(int r); +#define SYNC_PC_OFFSET 100 +extern void sync_m68k_pc(void); +extern uintptr get_const(int r); +extern int is_const(int r); +extern void register_branch(uintptr not_taken, uintptr taken, uae_u8 cond); +void compemu_make_sr(int sr, int tmp); +void compemu_enter_super(int sr); +void compemu_exc_make_frame(int format, int sr, int currpc, int nr, int tmp); +void compemu_bkpt(void); +extern bool disasm_this_inst; + +#define comp_get_ibyte(o) do_get_mem_byte((uae_u8 *)(comp_pc_p + (o) + 1)) +#define comp_get_iword(o) do_get_mem_word((uae_u16 *)(comp_pc_p + (o))) +#define comp_get_ilong(o) do_get_mem_long((uae_u32 *)(comp_pc_p + (o))) + +struct blockinfo_t; + +typedef struct dep_t { + uae_u32* jmp_off; + struct blockinfo_t* target; + struct blockinfo_t* source; + struct dep_t** prev_p; + struct dep_t* next; +} dependency; + +typedef struct checksum_info_t { + uae_u8 *start_p; + uae_u32 length; + struct checksum_info_t *next; +} checksum_info; + +typedef struct blockinfo_t { + uae_s32 count; + cpuop_func* direct_handler_to_use; + cpuop_func* handler_to_use; + /* The direct handler does not check for the correct address */ + + cpuop_func* handler; + cpuop_func* direct_handler; + + cpuop_func* direct_pen; + cpuop_func* direct_pcc; + +#ifdef UAE + uae_u8* nexthandler; +#endif + uae_u8* pc_p; + + uae_u32 c1; + uae_u32 c2; +#if USE_CHECKSUM_INFO + checksum_info *csi; +#else + uae_u32 len; + uae_u32 min_pcp; +#endif + + struct blockinfo_t* next_same_cl; + struct blockinfo_t** prev_same_cl_p; + struct blockinfo_t* next; + struct blockinfo_t** prev_p; + + uae_u8 optlevel; + uae_u8 needed_flags; + uae_u8 status; + uae_u8 havestate; + + dependency dep[2]; /* Holds things we depend on */ + dependency* deplist; /* List of things that depend on this */ + smallstate env; + +#ifdef JIT_DEBUG + /* (gb) size of the compiled block (direct handler) */ + uae_u32 direct_handler_size; +#endif +} blockinfo; + +#define BI_INVALID 0 +#define BI_ACTIVE 1 +#define BI_NEED_RECOMP 2 +#define BI_NEED_CHECK 3 +#define BI_CHECKING 4 +#define BI_COMPILING 5 +#define BI_FINALIZING 6 + +void execute_normal(void); +void exec_nostats(void); +void do_nothing(void); + +#else + +static inline void flush_icache(void) { } + +#endif /* !USE_JIT */ + +#ifdef UAE + +#define JIT_EXCEPTION_HANDLER +// #define JIT_ALWAYS_DISTRUST + +/* ARAnyM uses fpu_register name, used in scratch_t */ +/* FIXME: check that no ARAnyM code assumes different floating point type */ +typedef fptype fpu_register; + +extern void compile_block(cpu_history* pc_hist, int blocklen, int totcyles); + +#define MAXCYCLES (1000 * CYCLE_UNIT) +#define scaled_cycles(x) (currprefs.m68k_speed<0?(((x)/SCALE)?(((x)/SCALE +#include +#include +#include +#include +#include +#undef abort + +#ifdef UAE + /* + #define DISABLE_I_OR_AND_EOR + #define DISABLE_I_SUB + #define DISABLE_I_SUBA + #define DISABLE_I_SUBX + #define DISABLE_I_ADD + #define DISABLE_I_ADDA + #define DISABLE_I_ADDX + #define DISABLE_I_NEG + #define DISABLE_I_NEGX + #define DISABLE_I_CLR + #define DISABLE_I_NOT + #define DISABLE_I_TST + #define DISABLE_I_BCHG_BCLR_BSET_BTST + #define DISABLE_I_CMPM_CMP + #define DISABLE_I_CMPA + #define DISABLE_I_MOVE + #define DISABLE_I_MOVEA + #define DISABLE_I_SWAP + #define DISABLE_I_EXG + #define DISABLE_I_EXT + #define DISABLE_I_MVMEL + #define DISABLE_I_MVMLE + #define DISABLE_I_RTD + #define DISABLE_I_LINK + #define DISABLE_I_UNLK + #define DISABLE_I_RTS + #define DISABLE_I_JSR + #define DISABLE_I_JMP + #define DISABLE_I_BSR + #define DISABLE_I_BCC + #define DISABLE_I_LEA + #define DISABLE_I_PEA + #define DISABLE_I_DBCC + #define DISABLE_I_SCC + #define DISABLE_I_MULU + #define DISABLE_I_MULS + #define DISABLE_I_ASR + #define DISABLE_I_ASL + #define DISABLE_I_LSR + #define DISABLE_I_LSL + #define DISABLE_I_ROL + #define DISABLE_I_ROR + #define DISABLE_I_MULL + #define DISABLE_I_FPP + #define DISABLE_I_FBCC + #define DISABLE_I_FSCC + #define DISABLE_I_MOVE16 + */ + +#endif /* UAE */ + +#ifdef UAE +#define JIT_PATH "jit/" +#ifdef FSUAE +#define GEN_PATH "gen/" +#else +#define GEN_PATH "jit/x86/" +#endif +#define RETURN "return 0;" +#define RETTYPE "uae_u32" +#define NEXT_CPU_LEVEL 5 +#else +#define JIT_PATH "compiler/" +#define GEN_PATH "" +#define RETURN "return;" +#define RETTYPE "void" +#define NEXT_CPU_LEVEL 4 +#endif + +#define BOOL_TYPE "int" +#define failure global_failure=1 +#define FAILURE global_failure=1 +#define isjump global_isjump=1 +#define is_const_jump global_iscjump=1 +#define isaddx global_isaddx=1 +#define uses_cmov global_cmov=1 +#define mayfail global_mayfail=1 +#define uses_fpu global_fpu=1 + +int hack_opcode; + +static int global_failure; +static int global_isjump; +static int global_iscjump; +static int global_isaddx; +static int global_cmov; +static int long_opcode; +static int global_mayfail; +static int global_fpu; + +static char endstr[1000]; + +#include "flags_x86.h" + +#ifndef __attribute__ +# ifndef __GNUC__ +# define __attribute__(x) +# endif +#endif + +#define GENA_GETV_NO_FETCH 0 +#define GENA_GETV_FETCH 1 +#define GENA_GETV_FETCH_ALIGN 2 +#define GENA_MOVEM_DO_INC 0 +#define GENA_MOVEM_NO_INC 1 +#define GENA_MOVEM_MOVE16 2 + + +static int cond_codes[] = { -1, -1, +NATIVE_CC_HI, NATIVE_CC_LS, +NATIVE_CC_CC, NATIVE_CC_CS, +NATIVE_CC_NE, NATIVE_CC_EQ, +-1, -1, +NATIVE_CC_PL, NATIVE_CC_MI, +NATIVE_CC_GE, NATIVE_CC_LT, +NATIVE_CC_GT, NATIVE_CC_LE +}; + +static int brace_level; + +static char outbuffer[30000]; + +static void comprintf(const char *format, ...) +{ + char outbuf[1000]; + va_list parms; + va_start(parms, format); + _vsnprintf(outbuf, sizeof(outbuf) - 1, format, parms); + outbuf[sizeof(outbuf) - 1] = 0; + va_end(parms); + + char *p = outbuf; + bool firstspace = true; + while (*p) { + char v = *p; + if (v == '\t' || (v == ' ' && p[1] == ' ') || (firstspace && v == ' ')) { + memmove(p, p + 1, strlen(p + 1) + 1); + } else { + firstspace = false; + p++; + } + } + + p = outbuf; + for (;;) { + char *pe = p; + int islf = 0; + while (*pe != 0 && *pe != '\n') { + pe++; + } + if (*pe == '\n') { + islf = 1; + *pe = 0; + } + + char outbuf2[1000]; + strcpy(outbuf2, p); + outbuf2[pe - p] = 0; + + if (outbuf2[0]) { + char *ps = outbuf2; + while (*ps) { + char v = *ps; + if (v == '}') { + brace_level--; + } + ps++; + } + for (int i = 0; i < brace_level; i++) { + strcat(outbuffer, "\t"); + } + strcat(outbuffer, outbuf2); + + ps = outbuf2; + while (*ps) { + char v = *ps; + if (v == '{') { + brace_level++; + } + ps++; + } + } + + if (islf) { + strcat(outbuffer, "\n"); + pe++; + } + if (*pe == 0) + break; + p = pe; + } +} + +static void com_discard(void) +{ + outbuffer[0] = 0; +} + +static void com_flush(void) +{ + printf("%s", outbuffer); + com_discard(); +} + + +static FILE *headerfile; +static FILE *stblfile; + +static int using_prefetch; +static int using_exception_3; +static int cpu_level; +static int noflags; + +/* For the current opcode, the next lower level that will have different code. + * Initialized to -1 for each opcode. If it remains unchanged, indicates we + * are done with that opcode. */ +static int next_cpu_level; + +static int *opcode_map; +static int *opcode_next_clev; +static int *opcode_last_postfix; +static unsigned long *counts; + +static void read_counts(void) +{ + FILE *file; + unsigned long opcode, count, total; + char name[20]; + int nr = 0; + memset(counts, 0, 65536 * sizeof * counts); + + file = fopen("frequent.68k", "r"); + if (file) + { + if (fscanf(file, "Total: %lu\n", &total) != 1) { + assert(0); + } + while (fscanf(file, "%lx: %lu %s\n", &opcode, &count, name) == 3) + { + opcode_next_clev[nr] = NEXT_CPU_LEVEL; + opcode_last_postfix[nr] = -1; + opcode_map[nr++] = opcode; + counts[opcode] = count; + } + fclose(file); + } + if (nr == nr_cpuop_funcs) + return; + for (opcode = 0; opcode < 0x10000; opcode++) + { + if (table68k[opcode].handler == -1 && table68k[opcode].mnemo != i_ILLG + && counts[opcode] == 0) + { + opcode_next_clev[nr] = NEXT_CPU_LEVEL; + opcode_last_postfix[nr] = -1; + opcode_map[nr++] = opcode; + counts[opcode] = count; + } + } + assert(nr == nr_cpuop_funcs); +} + +static int n_braces = 0; +static int insn_n_cycles; + +static void start_brace(void) +{ + n_braces++; + comprintf("{\n"); +} + +static void close_brace(void) +{ + assert(n_braces > 0); + n_braces--; + comprintf("}\n"); +} + +static void finish_braces(void) +{ + while (n_braces > 0) + close_brace(); +} + +static inline void gen_update_next_handler(void) +{ + return; /* Can anything clever be done here? */ +} + +static void gen_writebyte(const char *address, const char *source) +{ + comprintf("\twritebyte(%s, %s, scratchie);\n", address, source); +} + +static void gen_writeword(const char *address, const char *source) +{ + comprintf("\twriteword(%s, %s, scratchie);\n", address, source); +} + +static void gen_writelong(const char *address, const char *source) +{ + comprintf("\twritelong(%s, %s, scratchie);\n", address, source); +} + +static void gen_readbyte(const char *address, const char *dest) +{ + comprintf("\treadbyte(%s, %s, scratchie);\n", address, dest); +} + +static void gen_readword(const char *address, const char *dest) +{ + comprintf("\treadword(%s,%s,scratchie);\n", address, dest); +} + +static void gen_readlong(const char *address, const char *dest) +{ + comprintf("\treadlong(%s, %s, scratchie);\n", address, dest); +} + + + +static const char * +gen_nextilong(void) +{ + static char buffer[80]; + + sprintf(buffer, "comp_get_ilong((m68k_pc_offset+=4)-4)"); + insn_n_cycles += 4; + + long_opcode = 1; + return buffer; +} + +static const char * +gen_nextiword(void) +{ + static char buffer[80]; + + sprintf(buffer, "comp_get_iword((m68k_pc_offset+=2)-2)"); + insn_n_cycles += 2; + + long_opcode = 1; + return buffer; +} + +static const char * +gen_nextibyte(void) +{ + static char buffer[80]; + + sprintf(buffer, "comp_get_ibyte((m68k_pc_offset+=2)-2)"); + insn_n_cycles += 2; + + long_opcode = 1; + return buffer; +} + + +static void +swap_opcode(void) +{ +#ifdef UAE + /* no-op */ +#else + comprintf("#ifdef USE_JIT_FPU\n"); + comprintf("#if defined(HAVE_GET_WORD_UNSWAPPED) && !defined(FULLMMU)\n"); + comprintf("\topcode = do_byteswap_16(opcode);\n"); + comprintf("#endif\n"); + comprintf("#endif\n"); +#endif +} + +static void sync_m68k_pc(void) +{ + comprintf("if (m68k_pc_offset > SYNC_PC_OFFSET) {\n"); + comprintf("sync_m68k_pc();\n"); + comprintf("}\n"); +} + + +static void gen_set_fault_pc(void) +{ + start_brace(); + comprintf("\tsync_m68k_pc();\n"); + comprintf("\tuae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset;\n"); + comprintf("\tint ret=scratchie++;\n" + "\tmov_l_ri(ret,retadd);\n" + "\tmov_l_mr((uintptr)®s.fault_pc,ret);\n"); +} + + +static void make_sr(void) +{ + start_brace(); + comprintf("\tint sr = scratchie++;\n"); + comprintf("\tint tmp = scratchie++;\n"); + comprintf("\tcompemu_make_sr(sr, tmp);\n"); +} + + +static void disasm_this_inst(void) +{ + comprintf("\tdisasm_this_inst = true;\n"); +} + + +/* getv == 1: fetch data; getv != 0: check for odd address. If movem != 0, + * the calling routine handles Apdi and Aipi modes. + * gb-- movem == 2 means the same thing but for a MOVE16 instruction */ +static void genamode(amodes mode, const char *reg, wordsizes size, const char *name, int getv, int movem) +{ + start_brace(); + switch (mode) + { + case Dreg: /* Do we need to check dodgy here? */ + assert(movem == GENA_MOVEM_DO_INC); + if (getv == GENA_GETV_FETCH || getv == GENA_GETV_FETCH_ALIGN) + { + /* We generate the variable even for getv==2, so we can use + it as a destination for MOVE */ + comprintf("\tint %s = %s;\n", name, reg); + } + return; + + case Areg: + assert(movem == GENA_MOVEM_DO_INC); + if (getv == GENA_GETV_FETCH || getv == GENA_GETV_FETCH_ALIGN) + { + /* see above */ + comprintf("\tint %s = dodgy ? scratchie++ : %s + 8;\n", name, reg); + if (getv == GENA_GETV_FETCH) + { + comprintf("\tif (dodgy) {\n"); + comprintf("\t\tmov_l_rr(%s, %s + 8);\n", name, reg); + comprintf("}\n"); + } + } + return; + + case Aind: + comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); + comprintf("\tif (dodgy) {\n"); + comprintf("\t\tmov_l_rr(%sa, %s + 8);\n", name, reg); + comprintf("}\n"); + break; + case Aipi: + comprintf("\tint %sa = scratchie++;\n", name); + comprintf("\tmov_l_rr(%sa, %s + 8);\n", name, reg); + break; + case Apdi: + switch (size) + { + case sz_byte: + if (movem != GENA_MOVEM_DO_INC) + { + comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); + comprintf("\tif (dodgy) {\n"); + comprintf("\t\tmov_l_rr(%sa, 8 + %s);\n", name, reg); + comprintf("}\n"); + } else + { + start_brace(); + comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); + comprintf("\tlea_l_brr(%s + 8, %s + 8, (uae_s32)-areg_byteinc[%s]);\n", reg, reg, reg); + comprintf("\tif (dodgy) {\n"); + comprintf("\t\tmov_l_rr(%sa, 8 + %s);\n", name, reg); + comprintf("}\n"); + } + break; + case sz_word: + if (movem != GENA_MOVEM_DO_INC) + { + comprintf("\tint %sa=dodgy?scratchie++:%s+8;\n", name, reg); + comprintf("\tif (dodgy) {\n"); + comprintf("\tmov_l_rr(%sa,8+%s);\n", name, reg); + comprintf("}\n"); + } else + { + start_brace(); + comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); + comprintf("\tlea_l_brr(%s + 8, %s + 8, -2);\n", reg, reg); + comprintf("\tif (dodgy) {\n"); + comprintf("\t\tmov_l_rr(%sa, 8 + %s);\n", name, reg); + comprintf("}\n"); + } + break; + case sz_long: + if (movem != GENA_MOVEM_DO_INC) + { + comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); + comprintf("\tif (dodgy) {\n"); + comprintf("\t\tmov_l_rr(%sa, 8 + %s);\n", name, reg); + comprintf("}\n"); + } else + { + start_brace(); + comprintf("\tint %sa = dodgy ? scratchie++ : %s + 8;\n", name, reg); + comprintf("\tlea_l_brr(%s + 8, %s + 8, -4);\n", reg, reg); + comprintf("\tif (dodgy) {\n"); + comprintf("\t\tmov_l_rr(%sa, 8 + %s);\n", name, reg); + comprintf("}\n"); + } + break; + default: + assert(0); + break; + } + break; + case Ad16: + comprintf("\tint %sa = scratchie++;\n", name); + comprintf("\tmov_l_rr(%sa, 8 + %s);\n", name, reg); + comprintf("\tlea_l_brr(%sa, %sa, (uae_s32)(uae_s16)%s);\n", name, name, gen_nextiword()); + break; + case Ad8r: + comprintf("\tint %sa = scratchie++;\n", name); + comprintf("\tcalc_disp_ea_020(%s + 8, %s, %sa, scratchie);\n", reg, gen_nextiword(), name); + break; + + case PC16: + comprintf("\tint %sa = scratchie++;\n", name); + comprintf("\tuae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset);\n"); + comprintf("\tuae_s32 PC16off = (uae_s32)(uae_s16)%s;\n", gen_nextiword()); + comprintf("\tmov_l_ri(%sa, address + PC16off);\n", name); + break; + + case PC8r: + comprintf("\tint pctmp = scratchie++;\n"); + comprintf("\tint %sa = scratchie++;\n", name); + comprintf("\tuae_u32 address = (uae_u32)(start_pc + ((char *)comp_pc_p - (char *)start_pc_p) + m68k_pc_offset);\n"); + start_brace(); + comprintf("\tmov_l_ri(pctmp,address);\n"); + + comprintf("\tcalc_disp_ea_020(pctmp, %s, %sa, scratchie);\n", gen_nextiword(), name); + break; + case absw: + comprintf("\tint %sa = scratchie++;\n", name); + comprintf("\tmov_l_ri(%sa, (uae_s32)(uae_s16)%s);\n", name, gen_nextiword()); + break; + case absl: + comprintf("\tint %sa = scratchie++;\n", name); + comprintf("\tmov_l_ri(%sa, %s); /* absl */\n", name, gen_nextilong()); + break; + case imm: + assert(getv == GENA_GETV_FETCH); + switch (size) + { + case sz_byte: + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s, (uae_s32)(uae_s8)%s);\n", name, gen_nextibyte()); + break; + case sz_word: + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s, (uae_s32)(uae_s16)%s);\n", name, gen_nextiword()); + break; + case sz_long: + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s, %s);\n", name, gen_nextilong()); + break; + default: + assert(0); + break; + } + return; + case imm0: + assert(getv == GENA_GETV_FETCH); + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s, (uae_s32)(uae_s8)%s);\n", name, gen_nextibyte()); + return; + case imm1: + assert(getv == GENA_GETV_FETCH); + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s, (uae_s32)(uae_s16)%s);\n", name, gen_nextiword()); + return; + case imm2: + assert(getv == GENA_GETV_FETCH); + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s, %s);\n", name, gen_nextilong()); + return; + case immi: + assert(getv == GENA_GETV_FETCH); + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s, %s);\n", name, reg); + return; + default: + assert(0); + break; + } + + /* We get here for all non-reg non-immediate addressing modes to + * actually fetch the value. */ + if (getv == GENA_GETV_FETCH) + { + char astring[80]; + sprintf(astring, "%sa", name); + switch (size) + { + case sz_byte: + insn_n_cycles += 2; + break; + case sz_word: + insn_n_cycles += 2; + break; + case sz_long: + insn_n_cycles += 4; + break; + default: + assert(0); + break; + } + start_brace(); + comprintf("\tint %s = scratchie++;\n", name); + switch (size) + { + case sz_byte: + gen_readbyte(astring, name); + break; + case sz_word: + gen_readword(astring, name); + break; + case sz_long: + gen_readlong(astring, name); + break; + default: + assert(0); + break; + } + } + + /* We now might have to fix up the register for pre-dec or post-inc + * addressing modes. */ + if (movem == GENA_MOVEM_DO_INC) + { + switch (mode) + { + case Aipi: + switch (size) + { + case sz_byte: + comprintf("\tlea_l_brr(%s + 8,%s + 8, areg_byteinc[%s]);\n", reg, reg, reg); + break; + case sz_word: + comprintf("\tlea_l_brr(%s + 8, %s + 8, 2);\n", reg, reg); + break; + case sz_long: + comprintf("\tlea_l_brr(%s + 8, %s + 8, 4);\n", reg, reg); + break; + default: + assert(0); + break; + } + break; + case Apdi: + break; + default: + break; + } + } +} + +static void genastore(const char *from, amodes mode, const char *reg, wordsizes size, const char *to) +{ + switch (mode) + { + case Dreg: + switch (size) + { + case sz_byte: + comprintf("\tif(%s != %s) {\n", reg, from); + comprintf("\t\tmov_b_rr(%s, %s);\n", reg, from); + comprintf("}\n"); + break; + case sz_word: + comprintf("\tif(%s != %s) {\n", reg, from); + comprintf("\t\tmov_w_rr(%s, %s);\n", reg, from); + comprintf("}\n"); + break; + case sz_long: + comprintf("\tif(%s != %s) {\n", reg, from); + comprintf("\t\tmov_l_rr(%s, %s);\n", reg, from); + comprintf("}\n"); + break; + default: + assert(0); + break; + } + break; + case Areg: + switch (size) + { + case sz_word: + comprintf("\tif(%s + 8 != %s) {\n", reg, from); + comprintf("\t\tmov_w_rr(%s + 8, %s);\n", reg, from); + comprintf("}\n"); + break; + case sz_long: + comprintf("\tif(%s + 8 != %s) {\n", reg, from); + comprintf("\t\tmov_l_rr(%s + 8, %s);\n", reg, from); + comprintf("}\n"); + break; + default: + assert(0); + break; + } + break; + + case Apdi: + case absw: + case PC16: + case PC8r: + case Ad16: + case Ad8r: + case Aipi: + case Aind: + case absl: + { + char astring[80]; + sprintf(astring, "%sa", to); + + switch (size) + { + case sz_byte: + insn_n_cycles += 2; + gen_writebyte(astring, from); + break; + case sz_word: + insn_n_cycles += 2; + gen_writeword(astring, from); + break; + case sz_long: + insn_n_cycles += 4; + gen_writelong(astring, from); + break; + default: + assert(0); + break; + } + } + break; + case imm: + case imm0: + case imm1: + case imm2: + case immi: + assert(0); + break; + default: + assert(0); + break; + } +} + +static void genmov16(uae_u32 opcode, struct instr *curi) +{ + comprintf("\tint src=scratchie++;\n"); + comprintf("\tint dst=scratchie++;\n"); + + if ((opcode & 0xfff8) == 0xf620) { + /* MOVE16 (Ax)+,(Ay)+ */ + comprintf("\tuae_u16 dstreg=((%s)>>12)&0x07;\n", gen_nextiword()); + comprintf("\tmov_l_rr(src,8+srcreg);\n"); + comprintf("\tmov_l_rr(dst,8+dstreg);\n"); + } else { + /* Other variants */ + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_NO_FETCH, GENA_MOVEM_MOVE16); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_NO_FETCH, GENA_MOVEM_MOVE16); + comprintf("\tmov_l_rr(src,srca);\n"); + comprintf("\tmov_l_rr(dst,dsta);\n"); + } + + /* Align on 16-byte boundaries */ + comprintf("\tand_l_ri(src,~15);\n"); + comprintf("\tand_l_ri(dst,~15);\n"); + + if ((opcode & 0xfff8) == 0xf620) { + comprintf("\tif (srcreg != dstreg) {\n"); + comprintf("\tadd_l_ri(srcreg+8,16);\n"); + comprintf("}\n"); + comprintf("\tadd_l_ri(dstreg+8,16);\n"); + } else if ((opcode & 0xfff8) == 0xf600) + comprintf("\tadd_l_ri(srcreg+8,16);\n"); + else if ((opcode & 0xfff8) == 0xf608) + comprintf("\tadd_l_ri(dstreg+8,16);\n"); + +#ifdef UAE + comprintf("\tif (special_mem || jit_n_addr_unsafe) {\n"); + comprintf("\t\tint tmp=scratchie;\n"); + comprintf("\tscratchie+=4;\n" + "\treadlong(src,tmp,scratchie);\n" + "\twritelong_clobber(dst,tmp,scratchie);\n" + "\tadd_l_ri(src,4);\n" + "\tadd_l_ri(dst,4);\n" + "\treadlong(src,tmp,scratchie);\n" + "\twritelong_clobber(dst,tmp,scratchie);\n" + "\tadd_l_ri(src,4);\n" + "\tadd_l_ri(dst,4);\n" + "\treadlong(src,tmp,scratchie);\n" + "\twritelong_clobber(dst,tmp,scratchie);\n" + "\tadd_l_ri(src,4);\n" + "\tadd_l_ri(dst,4);\n" + "\treadlong(src,tmp,scratchie);\n" + "\twritelong_clobber(dst,tmp,scratchie);\n"); + comprintf("\t} else\n"); +#endif + start_brace(); + comprintf("\tint tmp=scratchie;\n"); + comprintf("\tscratchie+=4;\n" + "\tget_n_addr(src,src,scratchie);\n" + "\tget_n_addr(dst,dst,scratchie);\n" + "\tmov_l_rR(tmp+0,src,0);\n" + "\tmov_l_rR(tmp+1,src,4);\n" + "\tmov_l_rR(tmp+2,src,8);\n" + "\tmov_l_rR(tmp+3,src,12);\n" + "\tmov_l_Rr(dst,tmp+0,0);\n" + "\tforget_about(tmp+0);\n" + "\tmov_l_Rr(dst,tmp+1,4);\n" + "\tforget_about(tmp+1);\n" + "\tmov_l_Rr(dst,tmp+2,8);\n" + "\tforget_about(tmp+2);\n" + "\tmov_l_Rr(dst,tmp+3,12);\n"); + close_brace(); +} + +static void +genmovemel(uae_u16 opcode) +{ + comprintf("\tuae_u16 mask = %s;\n", gen_nextiword()); + comprintf("\tint native=scratchie++;\n"); + comprintf("\tint i;\n"); + comprintf("\tsigned char offset=0;\n"); + genamode(table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_NO_INC); +#ifdef UAE + if (table68k[opcode].size == sz_long) + comprintf("\tif (1 && !special_mem && !jit_n_addr_unsafe) {\n"); + else + comprintf("\tif (1 && !special_mem && !jit_n_addr_unsafe) {\n"); +#endif + + /* Fast but unsafe... */ + comprintf("\tget_n_addr(srca,native,scratchie);\n"); + + comprintf("\tfor (i=0;i<16;i++) {\n" + "\t\tif ((mask>>i)&1) {\n"); + switch (table68k[opcode].size) { + case sz_long: + comprintf("\t\t\tmov_l_rR(i,native,offset);\n" + "\t\t\tmid_bswap_32(i);\n" + "\t\t\toffset+=4;\n"); + break; + case sz_word: + comprintf("\t\t\tmov_w_rR(i,native,offset);\n" + "\t\t\tmid_bswap_16(i);\n" + "\t\t\tsign_extend_16_rr(i,i);\n" + "\t\t\toffset+=2;\n"); + break; + default: assert(0); + } + comprintf("\t\t}\n"); + comprintf("\t}\n"); + if (table68k[opcode].dmode == Aipi) { + comprintf("\t\t\tlea_l_brr(8+dstreg,srca,offset);\n"); + } + /* End fast but unsafe. */ + +#ifdef UAE + comprintf("\t} else {\n"); + + comprintf("\t\tint tmp=scratchie++;\n"); + + comprintf("\t\tmov_l_rr(tmp,srca);\n"); + comprintf("\t\tfor (i=0;i<16;i++) {\n" + "\t\t\tif ((mask>>i)&1) {\n"); + switch (table68k[opcode].size) { + case sz_long: + comprintf("\t\t\t\treadlong(tmp,i,scratchie);\n" + "\t\t\t\tadd_l_ri(tmp,4);\n"); + break; + case sz_word: + comprintf("\t\t\t\treadword(tmp,i,scratchie);\n" + "\t\t\t\tsign_extend_16_rr(i,i);\n" + "\t\t\t\tadd_l_ri(tmp,2);\n"); + break; + default: assert(0); + } + + comprintf("\t\t\t}\n"); + comprintf("\t\t}\n"); + if (table68k[opcode].dmode == Aipi) { + comprintf("\t\tmov_l_rr(8+dstreg,tmp);\n"); + } + comprintf("\t}\n"); +#endif + +} + + +static void +genmovemle(uae_u16 opcode) +{ + comprintf("\tuae_u16 mask = %s;\n", gen_nextiword()); + comprintf("\tint native=scratchie++;\n"); + comprintf("\tint i;\n"); + comprintf("\tint tmp=scratchie++;\n"); + comprintf("\tsigned char offset=0;\n"); + genamode(table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_NO_INC); + +#ifdef UAE + /* *Sigh* Some clever geek realized that the fastest way to copy a + buffer from main memory to the gfx card is by using movmle. Good + on her, but unfortunately, gfx mem isn't "real" mem, and thus that + act of cleverness means that movmle must pay attention to special_mem, + or Genetic Species is a rather boring-looking game ;-) */ + if (table68k[opcode].dmode != Apdi) { + comprintf("\tif (1 && !special_mem && !jit_n_addr_unsafe) {\n"); + } else { + // if Apdi and dstreg is included with mask: use indirect mode. + comprintf("\tif (1 && !special_mem && !jit_n_addr_unsafe && !(mask & (1 << (7 - dstreg)))) {\n"); + } +#endif + + comprintf("\tget_n_addr(srca,native,scratchie);\n"); + + if (table68k[opcode].dmode != Apdi) { + comprintf("\tfor (i=0;i<16 && mask;i++) {\n" + "\t\tif ((mask>>i)&1) {\n"); + switch (table68k[opcode].size) { + case sz_long: + comprintf("\t\t\tmov_l_rr(tmp,i);\n" + "\t\t\tmid_bswap_32(tmp);\n" + "\t\t\tmov_l_Rr(native,tmp,offset);\n" + "\t\t\toffset+=4;\n"); + break; + case sz_word: + comprintf("\t\t\tmov_l_rr(tmp,i);\n" + "\t\t\tmid_bswap_16(tmp);\n" + "\t\t\tmov_w_Rr(native,tmp,offset);\n" + "\t\t\toffset+=2;\n"); + break; + default: assert(0); + } + } else { /* Pre-decrement */ + comprintf("\tfor (i=0;i<16 && mask;i++) {\n" + "\t\tif ((mask>>i)&1) {\n"); + switch (table68k[opcode].size) { + case sz_long: + comprintf("\t\t\toffset-=4;\n" + "\t\t\tmov_l_rr(tmp,15-i);\n" + "\t\t\tmid_bswap_32(tmp);\n" + "\t\t\tmov_l_Rr(native,tmp,offset);\n" + ); + break; + case sz_word: + comprintf("\t\t\toffset-=2;\n" + "\t\t\tmov_l_rr(tmp,15-i);\n" + "\t\t\tmid_bswap_16(tmp);\n" + "\t\t\tmov_w_Rr(native,tmp,offset);\n" + ); + break; + default: assert(0); + } + } + + comprintf("\t\t}\n"); + comprintf("\t}\n"); + if (table68k[opcode].dmode == Apdi) { + comprintf("\t\t\tlea_l_brr(8+dstreg,srca,(uae_s32)offset);\n"); + } +#ifdef UAE + comprintf("\t} else {\n"); + + if (table68k[opcode].dmode != Apdi) { + comprintf("\tmov_l_rr(tmp,srca);\n"); + comprintf("\tfor (i=0;i<16 && mask;i++) {\n" + "\t\tif ((mask>>i)&1) {\n"); + switch (table68k[opcode].size) { + case sz_long: + comprintf("\t\t\twritelong(tmp,i,scratchie);\n" + "\t\t\tadd_l_ri(tmp,4);\n"); + break; + case sz_word: + comprintf("\t\t\twriteword(tmp,i,scratchie);\n" + "\t\t\tadd_l_ri(tmp,2);\n"); + break; + default: assert(0); + } + } else { /* Pre-decrement */ + comprintf("\tfor (i=0;i<16 && mask;i++) {\n" + "\t\tif ((mask>>i)&1) {\n"); + switch (table68k[opcode].size) { + case sz_long: + comprintf("\t\t\tsub_l_ri(srca,4);\n" + "\t\t\twritelong(srca,15-i,scratchie);\n"); + break; + case sz_word: + comprintf("\t\t\tsub_l_ri(srca,2);\n" + "\t\t\twriteword(srca,15-i,scratchie);\n"); + break; + default: assert(0); + } + } + + comprintf("\t\t}\n"); + comprintf("\t}\n"); + if (table68k[opcode].dmode == Apdi) { + comprintf("\t\t\tmov_l_rr(8+dstreg,srca);\n"); + } + comprintf("\t}\n"); +#endif +} + + +static void +duplicate_carry(void) +{ + comprintf("\tif (needed_flags&FLAG_X) {\n"); + comprintf("\tduplicate_carry();\n"); + comprintf("}\n"); +} + +typedef enum +{ + flag_logical_noclobber, flag_logical, flag_add, flag_sub, flag_cmp, + flag_addx, flag_subx, flag_zn, flag_av, flag_sv, flag_and, flag_or, + flag_eor, flag_mov +} +flagtypes; + + +static void +genflags(flagtypes type, wordsizes size, const char *value, const char *src, const char *dst) +{ + if (noflags) { + switch (type) { + case flag_cmp: + comprintf("\tdont_care_flags();\n"); + comprintf("/* Weird --- CMP with noflags ;-) */\n"); + return; + case flag_add: + case flag_sub: + comprintf("\tdont_care_flags();\n"); + { + const char *op; + switch (type) { + case flag_add: op = "add"; break; + case flag_sub: op = "sub"; break; + default: assert(0); + } + switch (size) + { + case sz_byte: + comprintf("\t%s_b(%s,%s);\n", op, dst, src); + break; + case sz_word: + comprintf("\t%s_w(%s,%s);\n", op, dst, src); + break; + case sz_long: + comprintf("\t%s_l(%s,%s);\n", op, dst, src); + break; + } + return; + } + break; + + case flag_and: + comprintf("\tdont_care_flags();\n"); + switch (size) + { + case sz_byte: + comprintf("if (kill_rodent(dst)) {\n"); + comprintf("\tzero_extend_8_rr(scratchie,%s);\n", src); + comprintf("\tor_l_ri(scratchie,0xffffff00);\n"); + comprintf("\tand_l(%s,scratchie);\n", dst); + comprintf("\tforget_about(scratchie);\n"); + comprintf("\t} else \n" + "\tand_b(%s,%s);\n", dst, src); + break; + case sz_word: + comprintf("if (kill_rodent(dst)) {\n"); + comprintf("\tzero_extend_16_rr(scratchie,%s);\n", src); + comprintf("\tor_l_ri(scratchie,0xffff0000);\n"); + comprintf("\tand_l(%s,scratchie);\n", dst); + comprintf("\tforget_about(scratchie);\n"); + comprintf("\t} else \n" + "\tand_w(%s,%s);\n", dst, src); + break; + case sz_long: + comprintf("\tand_l(%s,%s);\n", dst, src); + break; + } + return; + + case flag_mov: + comprintf("\tdont_care_flags();\n"); + switch (size) + { + case sz_byte: + comprintf("if (kill_rodent(dst)) {\n"); + comprintf("\tzero_extend_8_rr(scratchie,%s);\n", src); + comprintf("\tand_l_ri(%s,0xffffff00);\n", dst); + comprintf("\tor_l(%s,scratchie);\n", dst); + comprintf("\tforget_about(scratchie);\n"); + comprintf("\t} else \n" + "\tmov_b_rr(%s,%s);\n", dst, src); + break; + case sz_word: + comprintf("if (kill_rodent(dst)) {\n"); + comprintf("\tzero_extend_16_rr(scratchie,%s);\n", src); + comprintf("\tand_l_ri(%s,0xffff0000);\n", dst); + comprintf("\tor_l(%s,scratchie);\n", dst); + comprintf("\tforget_about(scratchie);\n"); + comprintf("\t} else \n" + "\tmov_w_rr(%s,%s);\n", dst, src); + break; + case sz_long: + comprintf("\tmov_l_rr(%s,%s);\n", dst, src); + break; + } + return; + + case flag_or: + case flag_eor: + comprintf("\tdont_care_flags();\n"); + start_brace(); + { + const char *op; + switch (type) { + case flag_or: op = "or"; break; + case flag_eor: op = "xor"; break; + default: assert(0); + } + switch (size) + { + case sz_byte: + comprintf("if (kill_rodent(dst)) {\n"); + comprintf("\tzero_extend_8_rr(scratchie,%s);\n", src); + comprintf("\t%s_l(%s,scratchie);\n", op, dst); + comprintf("\tforget_about(scratchie);\n"); + comprintf("\t} else \n" + "\t%s_b(%s,%s);\n", op, dst, src); + break; + case sz_word: + comprintf("if (kill_rodent(dst)) {\n"); + comprintf("\tzero_extend_16_rr(scratchie,%s);\n", src); + comprintf("\t%s_l(%s,scratchie);\n", op, dst); + comprintf("\tforget_about(scratchie);\n"); + comprintf("\t} else \n" + "\t%s_w(%s,%s);\n", op, dst, src); + break; + case sz_long: + comprintf("\t%s_l(%s,%s);\n", op, dst, src); + break; + } + close_brace(); + return; + } + + + case flag_addx: + case flag_subx: + comprintf("\tdont_care_flags();\n"); + { + const char *op; + switch (type) { + case flag_addx: op = "adc"; break; + case flag_subx: op = "sbb"; break; + default: assert(0); + } + comprintf("\trestore_carry();\n"); /* Reload the X flag into C */ + switch (size) + { + case sz_byte: + comprintf("\t%s_b(%s,%s);\n", op, dst, src); + break; + case sz_word: + comprintf("\t%s_w(%s,%s);\n", op, dst, src); + break; + case sz_long: + comprintf("\t%s_l(%s,%s);\n", op, dst, src); + break; + } + return; + } + break; + default: return; + } + } + + /* Need the flags, but possibly not all of them */ + switch (type) + { + case flag_logical_noclobber: + failure; + /* fall through */ + + case flag_and: + case flag_or: + case flag_eor: + comprintf("\tdont_care_flags();\n"); + start_brace(); + { + const char *op; + switch (type) { + case flag_and: op = "and"; break; + case flag_or: op = "or"; break; + case flag_eor: op = "xor"; break; + default: assert(0); + } + switch (size) + { + case sz_byte: + comprintf("\tstart_needflags();\n" + "\t%s_b(%s,%s);\n", op, dst, src); + break; + case sz_word: + comprintf("\tstart_needflags();\n" + "\t%s_w(%s,%s);\n", op, dst, src); + break; + case sz_long: + comprintf("\tstart_needflags();\n" + "\t%s_l(%s,%s);\n", op, dst, src); + break; + } + comprintf("\tlive_flags();\n"); + comprintf("\tend_needflags();\n"); + close_brace(); + return; + } + + case flag_mov: + comprintf("\tdont_care_flags();\n"); + start_brace(); + { + switch (size) + { + case sz_byte: + comprintf("\tif (%s!=%s) {\n", src, dst); + comprintf("\tmov_b_ri(%s,0);\n" + "\tstart_needflags();\n", dst); + comprintf("\tor_b(%s,%s);\n", dst, src); + comprintf("\t} else {\n"); + comprintf("\tmov_b_rr(%s,%s);\n", dst, src); + comprintf("\ttest_b_rr(%s,%s);\n", dst, dst); + comprintf("\t}\n"); + break; + case sz_word: + comprintf("\tif (%s!=%s) {\n", src, dst); + comprintf("\tmov_w_ri(%s,0);\n" + "\tstart_needflags();\n", dst); + comprintf("\tor_w(%s,%s);\n", dst, src); + comprintf("\t} else {\n"); + comprintf("\tmov_w_rr(%s,%s);\n", dst, src); + comprintf("\ttest_w_rr(%s,%s);\n", dst, dst); + comprintf("\t}\n"); + break; + case sz_long: + comprintf("\tif (%s!=%s) {\n", src, dst); + comprintf("\tmov_l_ri(%s,0);\n" + "\tstart_needflags();\n", dst); + comprintf("\tor_l(%s,%s);\n", dst, src); + comprintf("\t} else {\n"); + comprintf("\tmov_l_rr(%s,%s);\n", dst, src); + comprintf("\ttest_l_rr(%s,%s);\n", dst, dst); + comprintf("\t}\n"); + break; + } + comprintf("\tlive_flags();\n"); + comprintf("\tend_needflags();\n"); + close_brace(); + return; + } + + case flag_logical: + comprintf("\tdont_care_flags();\n"); + start_brace(); + switch (size) + { + case sz_byte: + comprintf("\tstart_needflags();\n" + "\ttest_b_rr(%s,%s);\n", value, value); + break; + case sz_word: + comprintf("\tstart_needflags();\n" + "\ttest_w_rr(%s,%s);\n", value, value); + break; + case sz_long: + comprintf("\tstart_needflags();\n" + "\ttest_l_rr(%s,%s);\n", value, value); + break; + } + comprintf("\tlive_flags();\n"); + comprintf("\tend_needflags();\n"); + close_brace(); + return; + + + case flag_add: + case flag_sub: + case flag_cmp: + comprintf("\tdont_care_flags();\n"); + { + const char *op; + switch (type) { + case flag_add: op = "add"; break; + case flag_sub: op = "sub"; break; + case flag_cmp: op = "cmp"; break; + default: assert(0); + } + switch (size) + { + case sz_byte: + comprintf("\tstart_needflags();\n" + "\t%s_b(%s,%s);\n", op, dst, src); + break; + case sz_word: + comprintf("\tstart_needflags();\n" + "\t%s_w(%s,%s);\n", op, dst, src); + break; + case sz_long: + comprintf("\tstart_needflags();\n" + "\t%s_l(%s,%s);\n", op, dst, src); + break; + } + comprintf("\tlive_flags();\n"); + comprintf("\tend_needflags();\n"); + if (type != flag_cmp) { + duplicate_carry(); + } + comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + + return; + } + + case flag_addx: + case flag_subx: + uses_cmov; + comprintf("\tdont_care_flags();\n"); + { + const char *op; + switch (type) { + case flag_addx: op = "adc"; break; + case flag_subx: op = "sbb"; break; + default: assert(0); + } + start_brace(); + comprintf("\tint zero=scratchie++;\n" + "\tint one=scratchie++;\n" + "\tif (needed_flags&FLAG_Z) {\n" + "\tmov_l_ri(zero,0);\n" + "\tmov_l_ri(one,-1);\n" + "\tmake_flags_live();\n" + "\tcmov_l_rr(zero,one,%d);\n" + "\t}\n", NATIVE_CC_NE); + comprintf("\trestore_carry();\n"); /* Reload the X flag into C */ + switch (size) + { + case sz_byte: + comprintf("\tstart_needflags();\n" + "\t%s_b(%s,%s);\n", op, dst, src); + break; + case sz_word: + comprintf("\tstart_needflags();\n" + "\t%s_w(%s,%s);\n", op, dst, src); + break; + case sz_long: + comprintf("\tstart_needflags();\n" + "\t%s_l(%s,%s);\n", op, dst, src); + break; + } + comprintf("\tlive_flags();\n"); + comprintf("\tif (needed_flags&FLAG_Z) {\n"); + comprintf("\tcmov_l_rr(zero,one,%d);\n", NATIVE_CC_NE); + comprintf("\tset_zero(zero, one);\n"); /* No longer need one */ + comprintf("\tlive_flags();\n"); + comprintf("\t}\n"); + comprintf("\tend_needflags();\n"); + duplicate_carry(); + comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + return; + } + default: + failure; + break; + } +} + +static int /* returns zero for success, non-zero for failure */ +gen_opcode(unsigned int opcode) +{ + struct instr *curi = table68k + opcode; + const char *ssize = NULL; + + insn_n_cycles = 2; + global_failure = 0; + long_opcode = 0; + global_isjump = 0; + global_iscjump = 0; + global_isaddx = 0; + global_cmov = 0; + global_fpu = 0; + global_mayfail = 0; + hack_opcode = opcode; + endstr[0] = 0; + + start_brace(); + comprintf("\tuae_u8 scratchie=S1;\n"); + switch (curi->plev) + { + case 0: /* not privileged */ + break; + case 1: /* unprivileged only on 68000 */ + if (cpu_level == 0) + break; + if (next_cpu_level < 0) + next_cpu_level = 0; + + /* fall through */ + case 2: /* priviledged */ + failure; /* Easy ones first */ + break; + case 3: /* privileged if size == word */ + if (curi->size == sz_byte) + break; + failure; + break; + } + switch (curi->size) { + case sz_byte: ssize = "b"; break; + case sz_word: ssize = "w"; break; + case sz_long: ssize = "l"; break; + default: assert(0); + } + (void)ssize; + + switch (curi->mnemo) + { + case i_OR: + case i_AND: + case i_EOR: +#ifdef DISABLE_I_OR_AND_EOR + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + switch (curi->mnemo) { + case i_OR: genflags(flag_or, curi->size, "", "src", "dst"); break; + case i_AND: genflags(flag_and, curi->size, "", "src", "dst"); break; + case i_EOR: genflags(flag_eor, curi->size, "", "src", "dst"); break; + } + genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); + break; + + case i_ORSR: + case i_EORSR: + failure; + isjump; + break; + + case i_ANDSR: + failure; + isjump; + break; + + case i_SUB: +#ifdef DISABLE_I_SUB + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genflags(flag_sub, curi->size, "", "src", "dst"); + genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); + break; + + case i_SUBA: +#ifdef DISABLE_I_SUBA + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", sz_long, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tint tmp=scratchie++;\n"); + switch (curi->size) { + case sz_byte: comprintf("\tsign_extend_8_rr(tmp,src);\n"); break; + case sz_word: comprintf("\tsign_extend_16_rr(tmp,src);\n"); break; + case sz_long: comprintf("\ttmp=src;\n"); break; + default: assert(0); + } + comprintf("\tsub_l(dst,tmp);\n"); + genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); + break; + + case i_SUBX: +#ifdef DISABLE_I_SUBX + failure; +#endif + isaddx; + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genflags(flag_subx, curi->size, "", "src", "dst"); + genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); + break; + + case i_SBCD: + failure; + /* I don't think so! */ + break; + + case i_ADD: +#ifdef DISABLE_I_ADD + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genflags(flag_add, curi->size, "", "src", "dst"); + genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); + break; + + case i_ADDA: +#ifdef DISABLE_I_ADDA + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", sz_long, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tint tmp=scratchie++;\n"); + switch (curi->size) { + case sz_byte: comprintf("\tsign_extend_8_rr(tmp,src);\n"); break; + case sz_word: comprintf("\tsign_extend_16_rr(tmp,src);\n"); break; + case sz_long: comprintf("\ttmp=src;\n"); break; + default: assert(0); + } + comprintf("\tadd_l(dst,tmp);\n"); + genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); + break; + + case i_ADDX: +#ifdef DISABLE_I_ADDX + failure; +#endif + isaddx; + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + genflags(flag_addx, curi->size, "", "src", "dst"); + genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); + break; + + case i_ABCD: + failure; + /* No BCD maths for me.... */ + break; + + case i_NEG: +#ifdef DISABLE_I_NEG + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tint dst=scratchie++;\n"); + comprintf("\tmov_l_ri(dst,0);\n"); + genflags(flag_sub, curi->size, "", "src", "dst"); + genastore("dst", curi->smode, "srcreg", curi->size, "src"); + break; + + case i_NEGX: +#ifdef DISABLE_I_NEGX + failure; +#endif + isaddx; + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tint dst=scratchie++;\n"); + comprintf("\tmov_l_ri(dst,0);\n"); + genflags(flag_subx, curi->size, "", "src", "dst"); + genastore("dst", curi->smode, "srcreg", curi->size, "src"); + break; + + case i_NBCD: + failure; + /* Nope! */ + break; + + case i_CLR: +#ifdef DISABLE_I_CLR + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tint dst=scratchie++;\n"); + comprintf("\tmov_l_ri(dst,0);\n"); + genflags(flag_logical, curi->size, "dst", "", ""); + genastore("dst", curi->smode, "srcreg", curi->size, "src"); + break; + + case i_NOT: +#ifdef DISABLE_I_NOT + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tint dst=scratchie++;\n"); + comprintf("\tmov_l_ri(dst,0xffffffff);\n"); + genflags(flag_eor, curi->size, "", "src", "dst"); + genastore("dst", curi->smode, "srcreg", curi->size, "src"); + break; + + case i_TST: +#ifdef DISABLE_I_TST + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genflags(flag_logical, curi->size, "src", "", ""); + break; + case i_BCHG: + case i_BCLR: + case i_BSET: + case i_BTST: +#ifdef DISABLE_I_BCHG_BCLR_BSET_BTST + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tint s=scratchie++;\n" + "\tint tmp=scratchie++;\n" + "\tmov_l_rr(s,src);\n"); + if (curi->size == sz_byte) + comprintf("\tand_l_ri(s,7);\n"); + else + comprintf("\tand_l_ri(s,31);\n"); + + { + const char *op; + int need_write = 1; + + switch (curi->mnemo) { + case i_BCHG: op = "btc"; break; + case i_BCLR: op = "btr"; break; + case i_BSET: op = "bts"; break; + case i_BTST: op = "bt"; need_write = 0; break; + default: op = ""; assert(0); + } + comprintf("\t%s_l_rr(dst,s);\n" /* Answer now in C */ + "\tsbb_l(s,s);\n" /* s is 0 if bit was 0, -1 otherwise */ + "\tmake_flags_live();\n" /* Get the flags back */ + "\tdont_care_flags();\n", op); + if (!noflags) { + comprintf("\tstart_needflags();\n" + "\tset_zero(s,tmp);\n" + "\tlive_flags();\n" + "\tend_needflags();\n"); + } + if (need_write) + genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); + } + break; + + case i_CMPM: + case i_CMP: +#ifdef DISABLE_I_CMPM_CMP + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + genflags(flag_cmp, curi->size, "", "src", "dst"); + break; + + case i_CMPA: +#ifdef DISABLE_I_CMPA + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", sz_long, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tint tmps=scratchie++;\n"); + switch (curi->size) { + case sz_byte: comprintf("\tsign_extend_8_rr(tmps,src);\n"); break; + case sz_word: comprintf("\tsign_extend_16_rr(tmps,src);\n"); break; + case sz_long: comprintf("tmps=src;\n"); break; + default: assert(0); + } + genflags(flag_cmp, sz_long, "", "tmps", "dst"); + break; + /* The next two are coded a little unconventional, but they are doing + * weird things... */ + + case i_MVPRM: + isjump; + failure; + break; + + case i_MVPMR: + isjump; + failure; + break; + + case i_MOVE: +#ifdef DISABLE_I_MOVE + failure; +#endif + switch (curi->dmode) { + case Dreg: + case Areg: + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); + genflags(flag_mov, curi->size, "", "src", "dst"); + genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); + break; + default: /* It goes to memory, not a register */ + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); + genflags(flag_logical, curi->size, "src", "", ""); + genastore("src", curi->dmode, "dstreg", curi->size, "dst"); + break; + } + break; + + case i_MOVEA: +#ifdef DISABLE_I_MOVEA + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); + + start_brace(); + comprintf("\tint tmps=scratchie++;\n"); + switch (curi->size) { + case sz_word: comprintf("\tsign_extend_16_rr(dst,src);\n"); break; + case sz_long: comprintf("\tmov_l_rr(dst,src);\n"); break; + default: assert(0); + } + genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); + break; + + case i_MVSR2: + isjump; + failure; + break; + + case i_MV2SR: + isjump; + failure; + break; + + case i_SWAP: +#ifdef DISABLE_I_SWAP + failure; +#endif + genamode(curi->smode, "srcreg", sz_long, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + comprintf("\tdont_care_flags();\n"); + comprintf("\trol_l_ri(src,16);\n"); + genflags(flag_logical, sz_long, "src", "", ""); + genastore("src", curi->smode, "srcreg", sz_long, "src"); + break; + + case i_EXG: +#ifdef DISABLE_I_EXG + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tint tmp=scratchie++;\n" + "\tmov_l_rr(tmp,src);\n"); + genastore("dst", curi->smode, "srcreg", curi->size, "src"); + genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); + break; + + case i_EXT: +#ifdef DISABLE_I_EXT + failure; +#endif + genamode(curi->smode, "srcreg", sz_long, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + comprintf("\tdont_care_flags();\n"); + start_brace(); + switch (curi->size) + { + case sz_byte: + comprintf("\tint dst = src;\n" + "\tsign_extend_8_rr(src,src);\n"); + break; + case sz_word: + comprintf("\tint dst = scratchie++;\n" + "\tsign_extend_8_rr(dst,src);\n"); + break; + case sz_long: + comprintf("\tint dst = src;\n" + "\tsign_extend_16_rr(src,src);\n"); + break; + default: + assert(0); + } + genflags(flag_logical, + curi->size == sz_word ? sz_word : sz_long, "dst", "", ""); + genastore("dst", curi->smode, "srcreg", + curi->size == sz_word ? sz_word : sz_long, "src"); + break; + + case i_MVMEL: +#ifdef DISABLE_I_MVMEL + failure; +#endif + genmovemel(opcode); + break; + + case i_MVMLE: +#ifdef DISABLE_I_MVMLE + failure; +#endif + genmovemle(opcode); + break; + + case i_TRAP: +#ifdef DISABLE_I_TRAP + failure; +#endif + isjump; + mayfail; + start_brace(); + comprintf(" int trapno = srcreg + 32;\n"); + gen_set_fault_pc(); + make_sr(); + comprintf(" compemu_enter_super(sr);\n"); + comprintf(" compemu_exc_make_frame(0, sr, ret, trapno, scratchie);\n"); + comprintf(" forget_about(ret);\n"); + /* m68k_setpc (get_long (regs.vbr + 4*nr)); */ + start_brace(); + comprintf(" int srca = scratchie++;\n"); + comprintf(" mov_l_rm(srca, (uintptr)®s.vbr);\n"); + comprintf(" mov_l_brR(srca, srca, MEMBaseDiff + trapno * 4); mid_bswap_32(srca);\n"); + comprintf(" mov_l_mr(JITPTR ®s.pc, srca);\n"); + comprintf(" get_n_addr_jmp(srca, PC_P, scratchie);\n"); + comprintf(" mov_l_mr(JITPTR ®s.pc_oldp, PC_P);\n"); + gen_update_next_handler(); + disasm_this_inst(); /* for debugging only */ + /* + * this currently deactivates this feature, since it does not work yet + */ + failure; + break; + + case i_MVR2USP: + isjump; + failure; + break; + + case i_MVUSP2R: + isjump; + failure; + break; + + case i_RESET: + isjump; + failure; + break; + + case i_NOP: + break; + + case i_STOP: + isjump; + failure; + break; + + case i_RTE: + isjump; + failure; + break; + + case i_RTD: +#ifdef DISABLE_I_RTD + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "offs", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + /* offs is constant */ + comprintf("\tadd_l_ri(offs,4);\n"); + start_brace(); + comprintf("\tint newad=scratchie++;\n" + "\treadlong(SP_REG,newad,scratchie);\n" + "\tmov_l_mr(JITPTR ®s.pc,newad);\n" + "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" + "\tmov_l_mr(JITPTR ®s.pc_oldp,PC_P);\n" + "\tm68k_pc_offset=0;\n" + "\tadd_l(SP_REG,offs);\n"); + gen_update_next_handler(); + isjump; + break; + + case i_LINK: +#ifdef DISABLE_I_LINK + failure; +#endif + comprintf("\tif (srcreg == 7) {\n" + "\t\tm68k_pc_offset = m68k_pc_offset_thisinst;\n" + "\t\tFAIL(1);\n" + "\t\t" RETURN "\n" + "\t}\n"); + genamode(curi->smode, "srcreg", sz_long, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "offs", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + comprintf("\tsub_l_ri(SP_REG,4);\n" + "\twritelong_clobber(SP_REG,src,scratchie);\n" + "\tmov_l_rr(src,SP_REG);\n"); + if (curi->size == sz_word) + comprintf("\tsign_extend_16_rr(offs,offs);\n"); + comprintf("\tadd_l(SP_REG,offs);\n"); + genastore("src", curi->smode, "srcreg", sz_long, "src"); + break; + + case i_UNLK: +#ifdef DISABLE_I_UNLK + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + comprintf("\tmov_l_rr(SP_REG,src);\n" + "\treadlong(SP_REG,src,scratchie);\n" + "\tadd_l_ri(SP_REG,4);\n"); + genastore("src", curi->smode, "srcreg", curi->size, "src"); + break; + + case i_RTS: +#ifdef DISABLE_I_RTS + failure; +#endif + comprintf("\tint newad=scratchie++;\n" + "\treadlong(SP_REG,newad,scratchie);\n" + "\tmov_l_mr(JITPTR ®s.pc,newad);\n" + "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" + "\tmov_l_mr(JITPTR ®s.pc_oldp,PC_P);\n" + "\tm68k_pc_offset=0;\n" + "\tlea_l_brr(SP_REG,SP_REG,4);\n"); + gen_update_next_handler(); + isjump; + break; + + case i_TRAPV: + isjump; + failure; + break; + + case i_RTR: + isjump; + failure; + break; + + case i_JSR: +#ifdef DISABLE_I_JSR + failure; +#endif + isjump; + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_NO_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tuae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset);\n"); + comprintf("\tint ret=scratchie++;\n" + "\tmov_l_ri(ret,retadd);\n" + "\tsub_l_ri(SP_REG,4);\n" + "\twritelong_clobber(SP_REG,ret,scratchie);\n"); + comprintf("\tmov_l_mr(JITPTR ®s.pc,srca);\n" + "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" + "\tmov_l_mr(JITPTR ®s.pc_oldp,PC_P);\n" + "\tm68k_pc_offset=0;\n"); + gen_update_next_handler(); + break; + + case i_JMP: +#ifdef DISABLE_I_JMP + failure; +#endif + isjump; + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_NO_FETCH, GENA_MOVEM_DO_INC); + comprintf("\tmov_l_mr(JITPTR ®s.pc,srca);\n" + "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" + "\tmov_l_mr(JITPTR ®s.pc_oldp,PC_P);\n" + "\tm68k_pc_offset=0;\n"); + gen_update_next_handler(); + break; + + case i_BSR: +#ifdef DISABLE_I_BSR + failure; +#endif + is_const_jump; + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + if (curi->size == sz_long) { + /* Sign-extend 32-bit displacement to pointer width for backward branches. + comp_get_ilong() returns uae_u32 which zero-extends to uintptr on 64-bit; + a negative displacement like 0xFFFFF000 must become 0xFFFFFFFFFFFFF000. + Uses get_const/mov_l_ri (accessible from generated code) instead of + isconst/live (static in compemu_support, not visible here). */ + comprintf("\tmov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src));\n"); + } + start_brace(); + comprintf("\tuae_u32 retadd=(uae_u32)(start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset);\n"); + comprintf("\tint ret=scratchie++;\n" + "\tmov_l_ri(ret,retadd);\n" + "\tsub_l_ri(SP_REG,4);\n" + "\twritelong_clobber(SP_REG,ret,scratchie);\n"); + comprintf("\tadd_l_ri(src,m68k_pc_offset_thisinst+2);\n"); + comprintf("\tm68k_pc_offset=0;\n"); + comprintf("\tadd_l(PC_P,src);\n"); + + comprintf("\tcomp_pc_p=(uae_u8*)(uintptr)get_const(PC_P);\n"); + gen_update_next_handler(); + break; + + case i_Bcc: +#ifdef DISABLE_I_BCC + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + /* That source is an immediate, so we can clobber it with abandon */ + switch (curi->size) { + case sz_byte: comprintf("\tsign_extend_8_rr(src,src);\n"); break; + case sz_word: comprintf("\tsign_extend_16_rr(src,src);\n"); break; + case sz_long: + /* Sign-extend 32-bit displacement to pointer width for backward branches. + Same fix as BSR.L above. */ + comprintf("\tmov_l_ri(src, (uintptr)(uae_s32)(uae_u32)get_const(src));\n"); + break; + } + comprintf("\tsub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2);\n"); + /* Leave the following as "add" --- it will allow it to be optimized + away due to src being a constant ;-) */ + comprintf("\tadd_l_ri(src,JITPTR comp_pc_p);\n"); + comprintf("\tmov_l_ri(PC_P,JITPTR comp_pc_p);\n"); + /* Now they are both constant. Might as well fold in m68k_pc_offset */ + comprintf("\tadd_l_ri(src,m68k_pc_offset);\n"); + comprintf("\tadd_l_ri(PC_P,m68k_pc_offset);\n"); + comprintf("\tm68k_pc_offset=0;\n"); + + if (curi->cc >= 2) { + comprintf("\tuintptr v1=get_const(PC_P);\n" + "\tuintptr v2=get_const(src);\n" + "\tregister_branch(v1,v2,%d);\n", + cond_codes[curi->cc]); + comprintf("\tmake_flags_live();\n"); /* Load the flags */ + isjump; + } else { + is_const_jump; + } + + switch (curi->cc) { + case 0: /* Unconditional jump */ + comprintf("\tmov_l_rr(PC_P,src);\n"); + comprintf("\tcomp_pc_p=(uae_u8*)(uintptr)get_const(PC_P);\n"); + break; + case 1: break; /* This is silly! */ + case 8: failure; break; /* Work out details! FIXME */ + case 9: failure; break; /* Not critical, though! */ + + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + break; + default: assert(0); + } + break; + + case i_LEA: +#ifdef DISABLE_I_LEA + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_NO_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); + genastore("srca", curi->dmode, "dstreg", curi->size, "dst"); + break; + + case i_PEA: +#ifdef DISABLE_I_PEA + failure; +#endif + if (table68k[opcode].smode == Areg || + table68k[opcode].smode == Aind || + table68k[opcode].smode == Aipi || + table68k[opcode].smode == Apdi || + table68k[opcode].smode == Ad16 || + table68k[opcode].smode == Ad8r) + comprintf("if (srcreg==7) dodgy=1;\n"); + + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_NO_FETCH, GENA_MOVEM_DO_INC); + genamode(Apdi, "7", sz_long, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); + genastore("srca", Apdi, "7", sz_long, "dst"); + break; + + case i_DBcc: +#ifdef DISABLE_I_DBCC + failure; +#endif + isjump; + uses_cmov; + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "offs", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + + /* That offs is an immediate, so we can clobber it with abandon */ + switch (curi->size) { + case sz_word: comprintf("\tsign_extend_16_rr(offs,offs);\n"); break; + default: assert(0); /* Seems this only comes in word flavour */ + } + comprintf("\tsub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2);\n"); + comprintf("\tadd_l_ri(offs,JITPTR comp_pc_p);\n"); /* New PC, + once the + offset_68k is + * also added */ + /* Let's fold in the m68k_pc_offset at this point */ + comprintf("\tadd_l_ri(offs,m68k_pc_offset);\n"); + comprintf("\tadd_l_ri(PC_P,m68k_pc_offset);\n"); + comprintf("\tm68k_pc_offset=0;\n"); + + start_brace(); + comprintf("\tint nsrc=scratchie++;\n"); + + if (curi->cc >= 2) { + comprintf("\tmake_flags_live();\n"); /* Load the flags */ + } + + assert(curi->size == sz_word); + + switch (curi->cc) { + case 0: /* This is an elaborate nop? */ + break; + case 1: + comprintf("\tstart_needflags();\n"); + comprintf("\tsub_w_ri(src,1);\n"); + comprintf("\tend_needflags();\n"); + start_brace(); + comprintf("\tuintptr v2;\n" + "\tuintptr v1=get_const(PC_P);\n"); + comprintf("\tv2=get_const(offs);\n" + "\tregister_branch(v1,v2,%d);\n", NATIVE_CC_CC); + break; + + case 8: failure; break; /* Work out details! FIXME */ + case 9: failure; break; /* Not critical, though! */ + + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + comprintf("\tmov_l_rr(nsrc,src);\n"); + comprintf("\tlea_l_brr(scratchie,src,(uae_s32)-1);\n" + "\tmov_w_rr(src,scratchie);\n"); + comprintf("\tcmov_l_rr(offs,PC_P,%d);\n", + cond_codes[curi->cc]); + comprintf("\tcmov_l_rr(src,nsrc,%d);\n", + cond_codes[curi->cc]); + /* OK, now for cc=true, we have src==nsrc and offs==PC_P, + so whether we move them around doesn't matter. However, + if cc=false, we have offs==jump_pc, and src==nsrc-1 */ + + comprintf("\tstart_needflags();\n"); + comprintf("\ttest_w_rr(nsrc,nsrc);\n"); + comprintf("\tend_needflags();\n"); + comprintf("\tcmov_l_rr(PC_P,offs,%d);\n", NATIVE_CC_NE); + break; + default: assert(0); + } + genastore("src", curi->smode, "srcreg", curi->size, "src"); + gen_update_next_handler(); + break; + + case i_Scc: +#ifdef DISABLE_I_SCC + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC); + start_brace(); + comprintf("\tint val = scratchie++;\n"); + + /* We set val to 0 if we really should use 255, and to 1 for real 0 */ + switch (curi->cc) { + case 0: /* Unconditional set */ + comprintf("\tmov_l_ri(val,0);\n"); + break; + case 1: + /* Unconditional not-set */ + comprintf("\tmov_l_ri(val,1);\n"); + break; + case 8: failure; break; /* Work out details! FIXME */ + case 9: failure; break; /* Not critical, though! */ + + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + comprintf("\tmake_flags_live();\n"); /* Load the flags */ + /* All condition codes can be inverted by changing the LSB */ + comprintf("\tsetcc(val,%d);\n", + cond_codes[curi->cc] ^ 1); break; + default: assert(0); + } + comprintf("\tsub_b_ri(val,1);\n"); + genastore("val", curi->smode, "srcreg", curi->size, "src"); + break; + + case i_DIVU: + isjump; + failure; + break; + + case i_DIVS: + isjump; + failure; + break; + + case i_MULU: +#ifdef DISABLE_I_MULU + failure; +#endif + comprintf("\tdont_care_flags();\n"); + genamode(curi->smode, "srcreg", sz_word, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", sz_word, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + /* To do 16x16 unsigned multiplication, we actually use + 32x32 signed, and zero-extend the registers first. + That solves the problem of MUL needing dedicated registers + on the x86 */ + comprintf("\tzero_extend_16_rr(scratchie,src);\n" + "\tzero_extend_16_rr(dst,dst);\n" + "\timul_32_32(dst,scratchie);\n"); + genflags(flag_logical, sz_long, "dst", "", ""); + genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); + break; + + case i_MULS: +#ifdef DISABLE_I_MULS + failure; +#endif + comprintf("\tdont_care_flags();\n"); + genamode(curi->smode, "srcreg", sz_word, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", sz_word, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + comprintf("\tsign_extend_16_rr(scratchie,src);\n" + "\tsign_extend_16_rr(dst,dst);\n" + "\timul_32_32(dst,scratchie);\n"); + genflags(flag_logical, sz_long, "dst", "", ""); + genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); + break; + + case i_CHK: + isjump; + failure; + break; + + case i_CHK2: + isjump; + failure; + break; + + case i_ASR: +#ifdef DISABLE_I_ASR + failure; +#endif + mayfail; + if (curi->smode == Dreg) { + comprintf( + " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + " }\n"); + start_brace(); + } + comprintf("\tdont_care_flags();\n"); + + genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + + start_brace(); + if (!noflags) + comprintf("\tstart_needflags();\n"); + if (curi->smode != immi) { + uses_cmov; + start_brace(); + comprintf("\tint cdata = scratchie++;\n"); + comprintf("\tint tmpcnt = scratchie++;\n"); + comprintf("\tint setval = scratchie++;\n"); + if (!noflags) { + comprintf("\tint odata = scratchie++;\n"); + } + comprintf("\tmov_l_ri(cdata, 0);\n"); + comprintf("\tmov_l_ri(setval, 0xffffffff);\n"); + // if high bit = 0: setval = 0x00000000, else setval = 0xffffffff + comprintf("\ttest_l_ri(data, 0x%08x);\n", curi->size == sz_byte ? 0x80 : (curi->size == sz_word ? 0x8000 : 0x80000000)); + comprintf("\tcmov_l_rr(setval, cdata, NATIVE_CC_EQ);\n"); + comprintf("\tmov_l_rr(cdata, setval);\n"); + if (!noflags) { + // setval -> odata + comprintf("\tmov_l_rr(odata, setval);\n"); + } + comprintf("\tmov_l_rr(tmpcnt, cnt);\n"); + comprintf("\tand_l_ri(tmpcnt, 63);\n"); + if (!noflags) { + // shift == 0: tmpcnt (0) -> odata (C is always zero) + comprintf("\tcmov_l_rr(odata, tmpcnt, NATIVE_CC_EQ);\n"); + } + + switch (curi->size) { + case sz_byte: + comprintf("\tcmp_b_ri(tmpcnt, 0x08);\n"); + // shift > 8: setval -> cdata + comprintf("\tcmov_l_rr(cdata, setval, NATIVE_CC_HI);\n"); + // shift <= 8: data -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshra_b_rr(cdata, tmpcnt);\n"); + break; + case sz_word: + comprintf("\tcmp_b_ri(tmpcnt, 0x10);\n"); + // shift > 16: setval -> cdata + comprintf("\tcmov_l_rr(cdata, setval, NATIVE_CC_HI);\n"); + // shift <= 16: data -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshra_w_rr(cdata, tmpcnt);\n"); + break; + case sz_long: + comprintf("\tcmp_b_ri(tmpcnt, 0x20);\n"); + // shift > 32: setval -> cdata + comprintf("\tcmov_l_rr(cdata, setval, NATIVE_CC_HI);\n"); + // shift == 32? 0 -> cdata (x86 masks count by 31, 680x0 uses mask 63) + comprintf("\tcmov_l_rr(data, setval, NATIVE_CC_EQ);\n"); + // shift <= 32: data -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshra_l_rr(cdata, tmpcnt);\n"); + break; + default: assert(0); + } + /* Result of shift is now in data. */ + } else { + switch (curi->size) { + case sz_byte: comprintf("\tshra_b_ri(data,srcreg);\n"); break; + case sz_word: comprintf("\tshra_w_ri(data,srcreg);\n"); break; + case sz_long: comprintf("\tshra_l_ri(data,srcreg);\n"); break; + default: assert(0); + } + } + /* And create the flags */ + if (!noflags) { + comprintf("\tlive_flags();\n"); + comprintf("\tend_needflags();\n"); + if (curi->smode != immi) { + comprintf("\tsetcc_for_cntzero(tmpcnt, cdata, odata, 0, %d, 0);\n", curi->size); + } else { + comprintf("\tduplicate_carry();\n"); + } + comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } + if (curi->smode != immi) { + switch (curi->size) { + case sz_byte: comprintf("\tmov_b_rr(data, cdata);\n"); break; + case sz_word: comprintf("\tmov_w_rr(data, cdata);\n"); break; + case sz_long: comprintf("\tmov_l_rr(data, cdata);\n"); break; + default: assert(0); + } + } + + genastore("data", curi->dmode, "dstreg", curi->size, "data"); + break; + + case i_ASL: +#ifdef DISABLE_I_ASL + failure; +#endif + mayfail; + if (curi->smode == Dreg) { + comprintf( + " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + " }\n"); + start_brace(); + } + comprintf("\tdont_care_flags();\n"); + /* Except for the handling of the V flag, this is identical to + LSL. The handling of V is, uhm, unpleasant, so if it's needed, + let the normal emulation handle it. Shoulders of giants kinda + thing ;-) */ + comprintf( + " if (needed_flags & FLAG_V) {\n" + " FAIL(1);\n" + " " RETURN "\n" + " }\n"); + + genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + + start_brace(); + if (!noflags) + comprintf("\tstart_needflags();\n"); + if (curi->smode != immi) { + uses_cmov; + start_brace(); + comprintf("\tint cdata = scratchie++;\n"); + comprintf("\tint tmpcnt = scratchie++;\n"); + if (!noflags) { + comprintf("\tint odata = scratchie++;\n"); + comprintf("\tmov_l_rr(odata, data);\n"); + } + comprintf("\tmov_l_ri(cdata, 0);\n"); + comprintf("\tmov_l_rr(tmpcnt, cnt);\n"); + comprintf("\tand_l_ri(tmpcnt, 63);\n"); + if (!noflags) { + // shift == 0? cdata (0) -> odata (C is always zero) + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_EQ);\n"); + } + + switch (curi->size) { + case sz_byte: + // shift > 8? 0 -> odata (C is always zero) + comprintf("\tcmp_b_ri(tmpcnt, 0x08);\n"); + if (!noflags) { + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); + } + // shift <= 8? cdata -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshll_b_rr(cdata, tmpcnt);\n"); + break; + case sz_word: + // shift > 16? 0 -> odata (C is always zero) + comprintf("\tcmp_b_ri(tmpcnt, 0x10);\n"); + if (!noflags) { + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); + } + // shift <= 16? cdata -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshll_w_rr(cdata, tmpcnt);\n"); + break; + case sz_long: + // shift > 32? 0 -> odata (C is always zero) + comprintf("\tcmp_b_ri(tmpcnt, 0x20);\n"); + if (!noflags) { + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); + } + // shift == 32? 0 -> cdata (x86 masks count by 31, 680x0 uses mask 63) + comprintf("\tcmov_l_rr(data, cdata, NATIVE_CC_EQ);\n"); + // shift <= 32? cdata -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshll_l_rr(cdata, tmpcnt);\n"); + break; + default: assert(0); + } + /* Result of shift is now in data. */ + } else { + switch (curi->size) { + case sz_byte: comprintf("\tshll_b_ri(data,srcreg);\n"); break; + case sz_word: comprintf("\tshll_w_ri(data,srcreg);\n"); break; + case sz_long: comprintf("\tshll_l_ri(data,srcreg);\n"); break; + default: assert(0); + } + } + /* And create the flags */ + if (!noflags) { + comprintf("\tlive_flags();\n"); + comprintf("\tend_needflags();\n"); + if (curi->smode != immi) { + comprintf("\tsetcc_for_cntzero(tmpcnt, cdata, odata, 0, %d, 1);\n", curi->size); + } else { + comprintf("\tclear_overflow();\n"); + comprintf("\tduplicate_carry();\n"); + } + comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } + if (curi->smode != immi) { + switch (curi->size) { + case sz_byte: comprintf("\tmov_b_rr(data, cdata);\n"); break; + case sz_word: comprintf("\tmov_w_rr(data, cdata);\n"); break; + case sz_long: comprintf("\tmov_l_rr(data, cdata);\n"); break; + default: assert(0); + } + } + genastore("data", curi->dmode, "dstreg", curi->size, "data"); + break; + + case i_LSR: +#ifdef DISABLE_I_LSR + failure; +#endif + mayfail; + if (curi->smode == Dreg) { + comprintf( + " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + " }\n"); + start_brace(); + } + comprintf("\tdont_care_flags();\n"); + + genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + + start_brace(); + if (!noflags) + comprintf("\tstart_needflags();\n"); + if (curi->smode != immi) { + uses_cmov; + start_brace(); + comprintf("\tint cdata = scratchie++;\n"); + comprintf("\tint tmpcnt = scratchie++;\n"); + if (!noflags) { + comprintf("\tint odata = scratchie++;\n"); + comprintf("\tmov_l_rr(odata, data);\n"); + } + comprintf("\tmov_l_ri(cdata, 0);\n"); + comprintf("\tmov_l_rr(tmpcnt, cnt);\n"); + comprintf("\tand_l_ri(tmpcnt, 63);\n"); + if (!noflags) { + // shift == 0? cdata (0) -> odata (C is always zero) + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_EQ);\n"); + } + + switch (curi->size) { + case sz_byte: + // shift > 8? 0 -> odata (C is always zero) + comprintf("\tcmp_b_ri(tmpcnt, 0x08);\n"); + if (!noflags) { + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); + } + // shift <= 8? cdata -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshrl_b_rr(cdata, tmpcnt);\n"); + break; + case sz_word: + // shift > 16? 0 -> odata (C is always zero) + comprintf("\tcmp_b_ri(tmpcnt, 0x10);\n"); + if (!noflags) { + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); + } + // shift <= 16? cdata -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshrl_w_rr(cdata, tmpcnt);\n"); + break; + case sz_long: + // shift > 32? 0 -> odata (C is always zero) + comprintf("\tcmp_b_ri(tmpcnt, 0x20);\n"); + if (!noflags) { + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); + } + // shift == 32? 0 -> cdata (x86 masks count by 31, 680x0 uses mask 63) + comprintf("\tcmov_l_rr(data, cdata, NATIVE_CC_EQ);\n"); + // shift <= 32? cdata -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshrl_l_rr(cdata, tmpcnt);\n"); + break; + default: assert(0); + } + /* Result of shift is now in data. */ + } else { + switch (curi->size) { + case sz_byte: comprintf("\tshrl_b_ri(data,srcreg);\n"); break; + case sz_word: comprintf("\tshrl_w_ri(data,srcreg);\n"); break; + case sz_long: comprintf("\tshrl_l_ri(data,srcreg);\n"); break; + default: assert(0); + } + } + /* And create the flags */ + if (!noflags) { + comprintf("\tlive_flags();\n"); + comprintf("\tend_needflags();\n"); + if (curi->smode != immi) { + comprintf("\tsetcc_for_cntzero(tmpcnt, cdata, odata, %d, %d, 1);\n", curi->size == sz_byte ? 7 : curi->size == sz_word ? 15 : 31, curi->size); + } else { + comprintf("\tduplicate_carry();\n"); + } + comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } + if (curi->smode != immi) { + switch (curi->size) { + case sz_byte: comprintf("\tmov_b_rr(data, cdata);\n"); break; + case sz_word: comprintf("\tmov_w_rr(data, cdata);\n"); break; + case sz_long: comprintf("\tmov_l_rr(data, cdata);\n"); break; + default: assert(0); + } + } + genastore("data", curi->dmode, "dstreg", curi->size, "data"); + break; + + case i_LSL: +#ifdef DISABLE_I_LSL + failure; +#endif + mayfail; + if (curi->smode == Dreg) { + comprintf( + " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + " }\n"); + start_brace(); + } + comprintf("\tdont_care_flags();\n"); + + genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + + start_brace(); + if (!noflags) + comprintf("\tstart_needflags();\n"); + if (curi->smode != immi) { + uses_cmov; + start_brace(); + comprintf("\tint cdata = scratchie++;\n"); + comprintf("\tint tmpcnt = scratchie++;\n"); + if (!noflags) { + comprintf("\tint odata = scratchie++;\n"); + comprintf("\tmov_l_rr(odata, data);\n"); + } + comprintf("\tmov_l_ri(cdata, 0);\n"); + comprintf("\tmov_l_rr(tmpcnt, cnt);\n"); + comprintf("\tand_l_ri(tmpcnt, 63);\n"); + if (!noflags) { + // shift == 0? cdata (0) -> odata (C is always zero) + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_EQ);\n"); + } + + switch (curi->size) { + case sz_byte: + // shift > 8? 0 -> odata (C is always zero) + comprintf("\tcmp_b_ri(tmpcnt, 0x08);\n"); + if (!noflags) { + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); + } + // shift <= 8? cdata -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshll_b_rr(cdata, tmpcnt);\n"); + break; + case sz_word: + // shift > 16? 0 -> odata (C is always zero) + comprintf("\tcmp_b_ri(tmpcnt, 0x10);\n"); + if (!noflags) { + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); + } + // shift <= 16? cdata -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshll_w_rr(cdata, tmpcnt);\n"); + break; + case sz_long: + // shift > 32? 0 -> odata (C is always zero) + comprintf("\tcmp_b_ri(tmpcnt, 0x20);\n"); + if (!noflags) { + comprintf("\tcmov_l_rr(odata, cdata, NATIVE_CC_HI);\n"); + } + // shift == 32? 0 -> cdata (x86 masks count by 31, 680x0 uses mask 63) + comprintf("\tcmov_l_rr(data, cdata, NATIVE_CC_EQ);\n"); + // shift <= 32? cdata -> cdata ("normal" shift) + comprintf("\tcmov_l_rr(cdata, data, NATIVE_CC_LS);\n"); + comprintf("\tshll_l_rr(cdata, tmpcnt);\n"); + break; + default: assert(0); + } + /* Result of shift is now in data. */ + } else { + switch (curi->size) { + case sz_byte: comprintf("\tshll_b_ri(data,srcreg);\n"); break; + case sz_word: comprintf("\tshll_w_ri(data,srcreg);\n"); break; + case sz_long: comprintf("\tshll_l_ri(data,srcreg);\n"); break; + default: assert(0); + } + } + /* And create the flags */ + if (!noflags) { + comprintf("\tlive_flags();\n"); + comprintf("\tend_needflags();\n"); + if (curi->smode != immi) { + comprintf("\tsetcc_for_cntzero(tmpcnt, cdata, odata, 0, %d, 1);\n", curi->size); + } else { + comprintf("\tclear_overflow();\n"); + comprintf("\tduplicate_carry();\n"); + } + comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } + if (curi->smode != immi) { + switch (curi->size) { + case sz_byte: comprintf("\tmov_b_rr(data, cdata);\n"); break; + case sz_word: comprintf("\tmov_w_rr(data, cdata);\n"); break; + case sz_long: comprintf("\tmov_l_rr(data, cdata);\n"); break; + default: assert(0); + } + } + genastore("data", curi->dmode, "dstreg", curi->size, "data"); + break; + + case i_ROL: +#ifdef DISABLE_I_ROL + failure; +#endif + mayfail; + if (curi->smode == Dreg) { + comprintf( + " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + " }\n"); + start_brace(); + } + comprintf("\tdont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + + switch (curi->size) { + case sz_long: comprintf("\trol_l_rr(data,cnt);\n"); break; + case sz_word: comprintf("\trol_w_rr(data,cnt);\n"); break; + case sz_byte: comprintf("\trol_b_rr(data,cnt);\n"); break; + } + + if (!noflags) { + comprintf("\tstart_needflags();\n"); + + comprintf("\tint cdata = scratchie++;\n"); + comprintf("\tint zero = scratchie++;\n"); + comprintf("\tint tmpcnt = scratchie++;\n"); + comprintf("\tmov_l_rr(cdata,data);\n"); + comprintf("\tmov_l_rr(tmpcnt,cnt);\n"); + comprintf("\tmov_l_ri(zero,0);\n"); + // if shift count is zero: C is always cleared + comprintf("\tand_l_ri(tmpcnt,63);\n"); + comprintf("\tcmov_l_rr(cdata,zero,NATIVE_CC_EQ);\n"); + + /* + * x86 ROL instruction does not set ZF/SF, so we need extra checks here + */ + comprintf("\tif (needed_flags & FLAG_ZNV) {\n"); + switch (curi->size) { + case sz_byte: comprintf("\ttest_b_rr(data,data);\n"); break; + case sz_word: comprintf("\ttest_w_rr(data,data);\n"); break; + case sz_long: comprintf("\ttest_l_rr(data,data);\n"); break; + } + comprintf("}\n"); + comprintf("\tbt_l_ri(cdata,0x00);\n"); /* Set C */ + comprintf("\tlive_flags();\n"); + comprintf("\tend_needflags();\n"); + } + genastore("data", curi->dmode, "dstreg", curi->size, "data"); + break; + + case i_ROR: +#ifdef DISABLE_I_ROR + failure; +#endif + mayfail; + if (curi->smode == Dreg) { + comprintf( + " if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + " }\n"); + start_brace(); + } + comprintf("\tdont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "cnt", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + genamode(curi->dmode, "dstreg", curi->size, "data", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + start_brace(); + + switch (curi->size) { + case sz_long: comprintf("\tror_l_rr(data,cnt);\n"); break; + case sz_word: comprintf("\tror_w_rr(data,cnt);\n"); break; + case sz_byte: comprintf("\tror_b_rr(data,cnt);\n"); break; + } + + if (!noflags) { + comprintf("\tstart_needflags();\n"); + + comprintf("\tint cdata = scratchie++;\n"); + comprintf("\tint zero = scratchie++;\n"); + comprintf("\tint tmpcnt = scratchie++;\n"); + comprintf("\tmov_l_rr(cdata,data);\n"); + comprintf("\tmov_l_rr(tmpcnt,cnt);\n"); + comprintf("\tmov_l_ri(zero,0);\n"); + // if shift count is zero: C is always cleared + comprintf("\tand_l_ri(tmpcnt,63);\n"); + comprintf("\tcmov_l_rr(cdata,zero,NATIVE_CC_EQ);\n"); + /* + * x86 ROR instruction does not set ZF/SF, so we need extra checks here + */ + comprintf("\tif (needed_flags & FLAG_ZNV) {\n"); + switch (curi->size) { + case sz_byte: comprintf("\ttest_b_rr(data,data);\n"); break; + case sz_word: comprintf("\ttest_w_rr(data,data);\n"); break; + case sz_long: comprintf("\ttest_l_rr(data,data);\n"); break; + } + comprintf("}\n"); + switch (curi->size) { + case sz_byte: comprintf("\tbt_l_ri(cdata,0x07);\n"); break; + case sz_word: comprintf("\tbt_l_ri(cdata,0x0f);\n"); break; + case sz_long: comprintf("\tbt_l_ri(cdata,0x1f);\n"); break; + } + comprintf("\tlive_flags();\n"); + comprintf("\tend_needflags();\n"); + } + genastore("data", curi->dmode, "dstreg", curi->size, "data"); + break; + + case i_ROXL: + failure; + break; + + case i_ROXR: + failure; + break; + + case i_ASRW: + failure; + break; + + case i_ASLW: + failure; + break; + + case i_LSRW: + failure; + break; + + case i_LSLW: + failure; + break; + + case i_ROLW: + failure; + break; + + case i_RORW: + failure; + break; + + case i_ROXLW: + failure; + break; + + case i_ROXRW: + failure; + break; + + case i_MOVEC2: + isjump; + failure; + break; + + case i_MOVE2C: + isjump; + failure; + break; + + case i_CAS: + failure; + break; + + case i_CAS2: + failure; + break; + + case i_MOVES: /* ignore DFC and SFC because we have no MMU */ + isjump; + failure; + break; + + case i_BKPT: /* only needed for hardware emulators */ + isjump; + failure; + break; + + case i_CALLM: /* not present in 68030 */ + isjump; + failure; + break; + + case i_RTM: /* not present in 68030 */ + isjump; + failure; + break; + + case i_TRAPcc: + isjump; + failure; + break; + + case i_DIVL: + isjump; + failure; + break; + + case i_MULL: +#ifdef DISABLE_I_MULL + failure; +#endif + if (!noflags) { + failure; + break; + } + comprintf("\tuae_u16 extra=%s;\n", gen_nextiword()); + comprintf("\tint r2=(extra>>12)&7;\n" + "\tint tmp=scratchie++;\n"); + + genamode(curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH, GENA_MOVEM_DO_INC); + /* The two operands are in dst and r2 */ + comprintf("\tif (extra&0x0400) {\n" /* Need full 64 bit result */ + "\tint r3=(extra&7);\n" + "\tmov_l_rr(r3,dst);\n"); /* operands now in r3 and r2 */ + comprintf("\tif (extra&0x0800) { \n" /* signed */ + "\t\timul_64_32(r2,r3);\n" + "\t} else { \n" + "\t\tmul_64_32(r2,r3);\n" + "\t} \n"); + /* The result is in r2/tmp, with r2 holding the lower 32 bits */ + comprintf("\t} else {\n"); /* Only want 32 bit result */ + /* operands in dst and r2, result foes into r2 */ + /* shouldn't matter whether it's signed or unsigned?!? */ + comprintf("\timul_32_32(r2,dst);\n" + "\t}\n"); + break; + + case i_BFTST: + case i_BFEXTU: + case i_BFCHG: + case i_BFEXTS: + case i_BFCLR: + case i_BFFFO: + case i_BFSET: + case i_BFINS: + failure; + break; + + case i_PACK: + failure; + break; + + case i_UNPK: + failure; + break; + + case i_TAS: + failure; + break; + + case i_FPP: +#ifdef DISABLE_I_FPP + failure; +#endif + uses_fpu; + mayfail; + comprintf("#ifdef USE_JIT_FPU\n"); + comprintf("\tuae_u16 extra=%s;\n", gen_nextiword()); + swap_opcode(); + comprintf("\tcomp_fpp_opp(opcode,extra);\n"); + comprintf("#else\n"); + comprintf("\tfailure = 1;\n"); + comprintf("#endif\n"); + break; + + case i_FBcc: +#ifdef DISABLE_I_FBCC + failure; +#endif + uses_fpu; + isjump; + uses_cmov; + mayfail; + comprintf("#ifdef USE_JIT_FPU\n"); + swap_opcode(); + comprintf("\tcomp_fbcc_opp(opcode);\n"); + comprintf("#else\n"); + comprintf("\tfailure = 1;\n"); + comprintf("#endif\n"); + break; + + case i_FDBcc: + uses_fpu; + isjump; + failure; + break; + + case i_FScc: +#ifdef DISABLE_I_FSCC + failure; +#endif + uses_fpu; + mayfail; + uses_cmov; + comprintf("#ifdef USE_JIT_FPU\n"); + comprintf("\tuae_u16 extra=%s;\n", gen_nextiword()); + swap_opcode(); + comprintf("\tcomp_fscc_opp(opcode,extra);\n"); + comprintf("#else\n"); + comprintf("\tfailure = 1;\n"); + comprintf("#endif\n"); + break; + + case i_FTRAPcc: + uses_fpu; + isjump; + failure; + break; + + case i_FSAVE: + uses_fpu; + failure; + break; + + case i_FRESTORE: + uses_fpu; + failure; + break; + + case i_CINVL: + case i_CINVP: + case i_CINVA: + isjump; /* Not really, but it's probably a good idea to stop + translating at this point */ + failure; + comprintf("\tflush_icache();\n"); /* Differentiate a bit more? */ + break; + + case i_CPUSHL: + case i_CPUSHP: + case i_CPUSHA: + isjump; /* Not really, but it's probably a good idea to stop + translating at this point */ + failure; + break; + + case i_MOVE16: +#ifdef DISABLE_I_MOVE16 + failure; +#endif + genmov16(opcode, curi); + break; + +#ifdef UAE + case i_MMUOP030: + case i_PFLUSHN: + case i_PFLUSH: + case i_PFLUSHAN: + case i_PFLUSHA: + case i_PLPAR: + case i_PLPAW: + case i_PTESTR: + case i_PTESTW: + case i_LPSTOP: + case i_PULSE: + case i_HALT: + isjump; + failure; + break; +#endif + +#ifdef WINUAE_ARANYM + case i_EMULOP_RETURN: + isjump; + failure; + break; + + case i_EMULOP: + failure; + break; + + case i_NATFEAT_ID: + case i_NATFEAT_CALL: + failure; + break; + + case i_MMUOP: + isjump; + failure; + break; +#endif + + default: + assert(0); + break; + } + comprintf("%s", endstr); + finish_braces(); + sync_m68k_pc(); + if (global_mayfail) { + comprintf("if (failure) {\n"); + comprintf("m68k_pc_offset = m68k_pc_offset_thisinst;\n"); + comprintf("}\n"); + } + return global_failure; +} + +static void +generate_includes(FILE *f) +{ + fprintf(f, "#include \"sysconfig.h\"\n"); + fprintf(f, "#if defined(JIT)\n"); + fprintf(f, "#include \"sysdeps.h\"\n"); +#ifdef UAE + fprintf(f, "#include \"options.h\"\n"); + fprintf(f, "#include \"uae/memory.h\"\n"); +#else + fprintf(f, "#include \"m68k.h\"\n"); + fprintf(f, "#include \"memory-uae.h\"\n"); +#endif + fprintf(f, "#include \"readcpu.h\"\n"); + fprintf(f, "#include \"newcpu.h\"\n"); +#ifdef UAE + fprintf(f, "#include \"comptbl_x86.h\"\n"); +#else + fprintf(f, "#include \"comptbl.h\"\n"); +#endif + fprintf(f, "#include \"debug.h\"\n"); +} + +static int postfix; + + +static char *decodeEA(amodes mode, wordsizes size) +{ + static char buffer[80]; + + buffer[0] = 0; + switch (mode) { + case Dreg: + strcpy(buffer, "Dn"); + break; + case Areg: + strcpy(buffer, "An"); + break; + case Aind: + strcpy(buffer, "(An)"); + break; + case Aipi: + strcpy(buffer, "(An)+"); + break; + case Apdi: + strcpy(buffer, "-(An)"); + break; + case Ad16: + strcpy(buffer, "(d16,An)"); + break; + case Ad8r: + strcpy(buffer, "(d8,An,Xn)"); + break; + case PC16: + strcpy(buffer, "(d16,PC)"); + break; + case PC8r: + strcpy(buffer, "(d8,PC,Xn)"); + break; + case absw: + strcpy(buffer, "(xxx).W"); + break; + case absl: + strcpy(buffer, "(xxx).L"); + break; + case imm: + switch (size) { + case sz_byte: + strcpy(buffer, "#.B"); + break; + case sz_word: + strcpy(buffer, "#.W"); + break; + case sz_long: + strcpy(buffer, "#.L"); + break; + default: + break; + } + break; + case imm0: + strcpy(buffer, "#.B"); + break; + case imm1: + strcpy(buffer, "#.W"); + break; + case imm2: + strcpy(buffer, "#.L"); + break; + case immi: + strcpy(buffer, "#"); + break; + + default: + break; + } + return buffer; +} + +static char *outopcode(const char *name, int opcode) +{ + static char out[100]; + struct instr *ins; + + ins = &table68k[opcode]; + strcpy(out, name); + if (ins->smode == immi) + strcat(out, "Q"); + if (ins->size == sz_byte) + strcat(out, ".B"); + if (ins->size == sz_word) + strcat(out, ".W"); + if (ins->size == sz_long) + strcat(out, ".L"); + strcat(out, " "); + if (ins->suse) + strcat(out, decodeEA(ins->smode, ins->size)); + if (ins->duse) { + if (ins->suse) strcat(out, ","); + strcat(out, decodeEA(ins->dmode, ins->size)); + } + return out; +} + + +static void +generate_one_opcode(int rp, int noflags) +{ + int i; + uae_u16 smsk, dmsk; + unsigned int opcode = opcode_map[rp]; + int aborted = 0; + int have_srcreg = 0; + int have_dstreg = 0; + const char *name; + const char *tbl = noflags ? "nf" : "ff"; + + if (table68k[opcode].mnemo == i_ILLG + || table68k[opcode].clev > cpu_level) + return; + + for (i = 0; lookuptab[i].name[0]; i++) + { + if (table68k[opcode].mnemo == lookuptab[i].mnemo) + break; + } + + if (table68k[opcode].handler != -1) + return; + + name = ua(lookuptab[i].name); + comprintf("/* %s */\n", outopcode(name, opcode)); + comprintf(RETTYPE " REGPARAM2 op_%x_%d_comp_%s(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, tbl, name); + + switch (table68k[opcode].stype) + { + case 0: + smsk = 7; + break; + case 1: + smsk = 255; + break; + case 2: + smsk = 15; + break; + case 3: + smsk = 7; + break; + case 4: + smsk = 7; + break; + case 5: + smsk = 63; + break; +#ifndef UAE + case 6: + smsk = 255; + break; +#endif + case 7: + smsk = 3; + break; + default: + smsk = 0; + assert(0); + } + dmsk = 7; + + next_cpu_level = -1; + if (table68k[opcode].suse + && table68k[opcode].smode != imm && table68k[opcode].smode != imm0 + && table68k[opcode].smode != imm1 && table68k[opcode].smode != imm2 + && table68k[opcode].smode != absw && table68k[opcode].smode != absl + && table68k[opcode].smode != PC8r && table68k[opcode].smode != PC16) + { + have_srcreg = 1; + if (table68k[opcode].spos == -1) + { + if (((int)table68k[opcode].sreg) >= 128) + comprintf("\tuae_s32 srcreg = (uae_s32)(uae_s8)%d;\n", (int)table68k[opcode].sreg); + else + comprintf("\tuae_s32 srcreg = %d;\n", (int)table68k[opcode].sreg); + } else + { + char source[100]; + int pos = table68k[opcode].spos; + +#ifndef UAE + comprintf("#if defined(HAVE_GET_WORD_UNSWAPPED) && !defined(FULLMMU)\n"); +#else + comprintf("#if defined(HAVE_GET_WORD_UNSWAPPED)\n"); +#endif + + if (pos < 8 && (smsk >> (8 - pos)) != 0) + sprintf(source, "(((opcode >> %d) | (opcode << %d)) & %d)", + pos ^ 8, 8 - pos, dmsk); + else if (pos != 8) + sprintf(source, "((opcode >> %d) & %d)", pos ^ 8, smsk); + else + sprintf(source, "(opcode & %d)", smsk); + + if (table68k[opcode].stype == 3) + comprintf("\tuae_u32 srcreg = imm8_table[%s];\n", source); + else if (table68k[opcode].stype == 1) + comprintf("\tuae_u32 srcreg = (uae_s32)(uae_s8)%s;\n", source); + else + comprintf("\tuae_u32 srcreg = %s;\n", source); + + comprintf("#else\n"); + + if (pos) + sprintf(source, "((opcode >> %d) & %d)", pos, smsk); + else + sprintf(source, "(opcode & %d)", smsk); + + if (table68k[opcode].stype == 3) + comprintf("\tuae_s32 srcreg = imm8_table[%s];\n", source); + else if (table68k[opcode].stype == 1) + comprintf("\tuae_s32 srcreg = (uae_s32)(uae_s8)%s;\n", source); + else + comprintf("\tuae_s32 srcreg = %s;\n", source); + + comprintf("#endif\n"); + } + } + if (table68k[opcode].duse + /* Yes, the dmode can be imm, in case of LINK or DBcc */ + && table68k[opcode].dmode != imm && table68k[opcode].dmode != imm0 + && table68k[opcode].dmode != imm1 && table68k[opcode].dmode != imm2 + && table68k[opcode].dmode != absw && table68k[opcode].dmode != absl) + { + have_dstreg = 1; + if (table68k[opcode].dpos == -1) + { + if (((int)table68k[opcode].dreg) >= 128) + comprintf("\tuae_s32 dstreg = (uae_s32)(uae_s8)%d;\n", (int)table68k[opcode].dreg); + else + comprintf("\tuae_s32 dstreg = %d;\n", (int)table68k[opcode].dreg); + } else + { + int pos = table68k[opcode].dpos; + +#ifndef UAE + comprintf("#if defined(HAVE_GET_WORD_UNSWAPPED) && !defined(FULLMMU)\n"); + + if (pos < 8 && (dmsk >> (8 - pos)) != 0) + comprintf("\tuae_u32 dstreg = ((opcode >> %d) | (opcode << %d)) & %d;\n", + pos ^ 8, 8 - pos, dmsk); + else if (pos != 8) + comprintf("\tuae_u32 dstreg = (opcode >> %d) & %d;\n", + pos ^ 8, dmsk); + else + comprintf("\tuae_u32 dstreg = opcode & %d;\n", dmsk); + + comprintf("#else\n"); +#endif + + if (pos) + comprintf("\tuae_u32 dstreg = (opcode >> %d) & %d;\n", + pos, dmsk); + else + comprintf("\tuae_u32 dstreg = opcode & %d;\n", dmsk); + +#ifndef UAE + comprintf("#endif\n"); +#endif + } + } + + if (have_srcreg && have_dstreg && + (table68k[opcode].dmode == Areg || + table68k[opcode].dmode == Aind || + table68k[opcode].dmode == Aipi || + table68k[opcode].dmode == Apdi || + table68k[opcode].dmode == Ad16 || + table68k[opcode].dmode == Ad8r) && + (table68k[opcode].smode == Areg || + table68k[opcode].smode == Aind || + table68k[opcode].smode == Aipi || + table68k[opcode].smode == Apdi || + table68k[opcode].smode == Ad16 || + table68k[opcode].smode == Ad8r) + ) { + comprintf("\tuae_u32 dodgy=(srcreg==(uae_s32)dstreg);\n"); + } else { + comprintf("\tuae_u32 dodgy=0;\n"); + } + comprintf("\tuae_u32 m68k_pc_offset_thisinst=m68k_pc_offset;\n"); + comprintf("\tm68k_pc_offset+=2;\n"); + + aborted = gen_opcode(opcode); + { + char flags[64 * 6]; + *flags = '\0'; + if (global_isjump) strcat(flags, "COMP_OPCODE_ISJUMP|"); + if (long_opcode) strcat(flags, "COMP_OPCODE_LONG_OPCODE|"); + if (global_cmov) strcat(flags, "COMP_OPCODE_CMOV|"); + if (global_isaddx) strcat(flags, "COMP_OPCODE_ISADDX|"); + if (global_iscjump) strcat(flags, "COMP_OPCODE_ISCJUMP|"); + if (global_fpu) strcat(flags, "COMP_OPCODE_USES_FPU|"); + if (*flags) + flags[strlen(flags) - 1] = '\0'; + else + strcpy(flags, "0"); + +#ifdef UAE /* RETTYPE != void */ + comprintf("return 0;\n"); +#endif + comprintf("}\n"); + + if (aborted) { + fprintf(stblfile, "{ NULL, %u, %s }, /* %s */\n", opcode, flags, name); + com_discard(); + } else { + fprintf(stblfile, "{ op_%x_%d_comp_%s, %u, %s }, /* %s */\n", opcode, postfix, tbl, opcode, flags, name); + fprintf(headerfile, "extern compop_func op_%x_%d_comp_%s;\n", opcode, postfix, tbl); + com_flush(); + } + } + opcode_next_clev[rp] = next_cpu_level; + opcode_last_postfix[rp] = postfix; +} + +static void +generate_func(int noflags) +{ + int i, j, rp; + const char *tbl = noflags ? "nf" : "ff"; + + using_prefetch = 0; + using_exception_3 = 0; + for (i = 0; i < 1; i++) /* We only do one level! */ + { + cpu_level = NEXT_CPU_LEVEL - i; + postfix = i; + + fprintf(stblfile, "const struct comptbl op_smalltbl_%d_comp_%s[] = {\n", postfix, tbl); + + /* sam: this is for people with low memory (eg. me :)) */ + printf("\n" + "#if !defined(PART_1) && !defined(PART_2) && " + "!defined(PART_3) && !defined(PART_4) && " + "!defined(PART_5) && !defined(PART_6) && " + "!defined(PART_7) && !defined(PART_8)" + "\n" + "#define PART_1 1\n" + "#define PART_2 1\n" + "#define PART_3 1\n" + "#define PART_4 1\n" + "#define PART_5 1\n" + "#define PART_6 1\n" + "#define PART_7 1\n" + "#define PART_8 1\n" + "#endif\n\n"); +#ifdef UAE + + printf("#ifdef USE_JIT_FPU\n"); + printf("extern void comp_fpp_opp();\n" + "extern void comp_fscc_opp();\n" + "extern void comp_fbcc_opp();\n"); + printf("#endif\n"); + printf("\n"); +#endif + + rp = 0; + for (j = 1; j <= 8; ++j) + { + int k = (j * nr_cpuop_funcs) / 8; + printf("#ifdef PART_%d\n", j); + for (; rp < k; rp++) + generate_one_opcode(rp, noflags); + printf("#endif\n\n"); + } + + fprintf(stblfile, "{ 0, 65536, 0 }};\n"); + } + +} + +#if (defined(OS_cygwin) || defined(OS_mingw)) && defined(EXTENDED_SIGSEGV) +void cygwin_mingw_abort() +{ +#undef abort + abort(); +} +#endif + +#if defined(FSUAE) && defined (WINDOWS) +#include "windows.h" +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +#else +int main(void) +#endif +{ + init_table68k(); + + opcode_map = (int *)malloc(sizeof(int) * nr_cpuop_funcs); + opcode_last_postfix = (int *)malloc(sizeof(int) * nr_cpuop_funcs); + opcode_next_clev = (int *)malloc(sizeof(int) * nr_cpuop_funcs); + counts = (unsigned long *)malloc(65536 * sizeof(unsigned long)); + read_counts(); + + /* It would be a lot nicer to put all in one file (we'd also get rid of + * cputbl.h that way), but cpuopti can't cope. That could be fixed, but + * I don't dare to touch the 68k version. */ + + headerfile = fopen(GEN_PATH "comptbl_x86.h", "wb"); + fprintf(headerfile, "" + "extern const struct comptbl op_smalltbl_0_comp_nf[];\n" + "extern const struct comptbl op_smalltbl_0_comp_ff[];\n" + ""); + + stblfile = fopen(GEN_PATH "compstbl_x86.cpp", "wb"); + if (freopen(GEN_PATH "compemu_x86.cpp", "wb", stdout) == NULL) { + abort(); + } + + generate_includes(stdout); + generate_includes(stblfile); + +#ifdef UAE + printf("#include \"compemu_x86.h\"\n"); + printf("#include \"flags_x86.h\"\n"); +#else + printf("#include \"" JIT_PATH "compemu.h\"\n"); + printf("#include \"" JIT_PATH "flags_x86.h\"\n"); +#endif + + noflags = 0; + generate_func(noflags); + + free(opcode_map); + free(opcode_last_postfix); + free(opcode_next_clev); + free(counts); + + opcode_map = (int *)malloc(sizeof(int) * nr_cpuop_funcs); + opcode_last_postfix = (int *)malloc(sizeof(int) * nr_cpuop_funcs); + opcode_next_clev = (int *)malloc(sizeof(int) * nr_cpuop_funcs); + counts = (unsigned long *)malloc(65536 * sizeof(unsigned long)); + read_counts(); + noflags = 1; + generate_func(noflags); + + printf("#endif\n"); + fprintf(stblfile, "#endif\n"); + + free(opcode_map); + free(opcode_last_postfix); + free(opcode_next_clev); + free(counts); + + free(table68k); + fclose(stblfile); + fclose(headerfile); + (void)disasm_this_inst; + return 0; +} + +#ifdef UAE +void write_log(const TCHAR *format, ...) +{ +} +#endif diff --git a/jit/memory-uae.h b/jit/x86/memory-uae.h similarity index 100% rename from jit/memory-uae.h rename to jit/x86/memory-uae.h